forecast-operational-metrics
关于
This skill forecasts infrastructure and application metrics using Prophet or statsmodels for capacity planning and cost optimization. It helps predict needs for CPU, memory, or storage, visualizes forecasts in Grafana, and enables alerts for projected resource exhaustion. Use it for planning hardware procurement, optimizing cloud costs, or setting up proactive scaling policies based on predicted load.
快速安装
Claude Code
推荐npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/forecast-operational-metrics在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
Betriebsmetriken prognostizieren
Zukuenftige Ressourcennutzung und Systemmetriken fuer Kapazitaetsplanung und Kostenoptimierung vorhersagen.
Siehe Erweiterte Beispiele fuer vollstaendige Konfigurationsdateien und Vorlagen.
Wann verwenden
- Infrastruktur-Kapazitaetsbedarf prognostizieren (CPU, Speicher, Festplatte, Netzwerk)
- Hardware-/Cloud-Ressourcenbeschaffung fuer das naechste Quartal planen
- Kostentrends vorhersagen und Cloud-Ausgaben optimieren
- Proaktive Skalierungsrichtlinien basierend auf vorhergesagter Last einrichten
- Benutzerverkehr fuer Veranstaltungsplanung prognostizieren
- Datenbank-Speicherwachstum fuer Backup-Planung vorhersagen
- API-Nutzung fuer Rate-Limiting-Konfiguration schaetzen
Eingaben
- Erforderlich: Historische Zeitreihenmetriken (mindestens 3-12 Monate)
- Erforderlich: Metriktyp (CPU, Speicher, Anfragen/Sek., Kosten usw.)
- Erforderlich: Prognosehorizont (Tage, Wochen oder Monate voraus)
- Optional: Bekannte zukuenftige Ereignisse (Deployments, Marketing-Kampagnen, Feiertage)
- Optional: Saisonalitaetsinformationen (taegliche, woechentliche, jaehrliche Muster)
- Optional: Externe Regressoren (z.B. Marketing-Ausgaben, Benutzeranmeldungen)
Vorgehensweise
Schritt 1: Umgebung einrichten und Daten laden
Prognosebibliotheken installieren und Zeitreihendaten vorbereiten.
# Create virtual environment
python -m venv venv
source venv/bin/activate
# Install forecasting libraries
pip install prophet statsmodels pandas numpy
pip install plotly matplotlib seaborn
pip install prometheus-api-client influxdb-client
pip install grafana-api
Daten mit MetricsLoader laden und vorbereiten:
# forecasting/data_loader.py (abbreviated)
import pandas as pd
from datetime import datetime, timedelta
class MetricsLoader:
def load_from_prometheus(self, query: str, lookback_days: int = 90, step: str = "1h"):
"""Load historical metrics from Prometheus."""
# ... implementation (see EXAMPLES.md for complete code)
def resample_and_aggregate(self, df: pd.DataFrame, freq: str = "1H"):
"""Resample time series to regular intervals."""
# ... implementation (see EXAMPLES.md)
# Example usage
loader = MetricsLoader(prometheus_url="http://prometheus:9090")
df = loader.load_from_prometheus(
query='avg(rate(container_cpu_usage_seconds_total[5m]))',
lookback_days=90,
)
df_daily = loader.resample_and_aggregate(df, freq="1D")
Siehe EXAMPLES.md Schritt 1 fuer die vollstaendige MetricsLoader-Implementierung.
Erwartet: Zeitreihendaten mit regelmaessigen Intervallen geladen, fehlende Werte gefuellt, bereit fuer Prognose.
Bei Fehler: Bei Datenluecken Forward-Fill oder Interpolation verwenden, sicherstellen dass der Rueckblickzeitraum ausreichend Daten hat (90+ Tage empfohlen), Zeitstempel-Zeitzonenkonsistenz verifizieren, auf Ausreisser (>5 Sigma) pruefen die Prognosen verzerren koennten.
Schritt 2: Prophet-Prognose implementieren
Facebook Prophet fuer automatische Saisonalitaetserkennung und Prognose verwenden.
# forecasting/prophet_forecaster.py (abbreviated)
from prophet import Prophet
class ProphetForecaster:
def __init__(self, growth: str = "linear", seasonality_mode: str = "multiplicative"):
self.growth = growth
self.prophet_params = {
"growth": growth,
"seasonality_mode": seasonality_mode,
# ... additional parameters (see EXAMPLES.md)
}
def fit(self, df: pd.DataFrame, regressors=None, holidays=None):
"""Train Prophet model on historical data."""
# ... implementation (see EXAMPLES.md)
def forecast(self, periods: int, freq: str = "D"):
"""Generate forecast for future periods."""
# ... implementation (see EXAMPLES.md)
# Example usage
forecaster = ProphetForecaster(growth="linear", seasonality_mode="multiplicative")
forecaster.fit(df_daily)
forecast = forecaster.forecast(periods=30, freq="D")
forecaster.plot_forecast(forecast, save_path="results/cpu_forecast.png")
Siehe EXAMPLES.md Schritt 2 fuer die vollstaendige ProphetForecaster-Implementierung.
Erwartet: Prognose fuer 30+ Tage voraus mit Konfidenzintervallen generiert, saisonale Muster im Komponentendiagramm erfasst, Kreuzvalidierungs-MAPE < 15%.
Bei Fehler: Wenn die Prognose unrealistisch aussieht, ein anderes Wachstumsmodell versuchen (linear vs. logistisch); wenn Saisonalitaet fehlt, seasonality_mode anpassen; wenn die Genauigkeit schlecht ist (<70% MAPE), mehr historische Daten oder externe Regressoren hinzufuegen; auf Datenqualitaetsprobleme pruefen.
Schritt 3: ARIMA/SARIMAX-Prognose implementieren (Alternative)
statsmodels fuer traditionelle Zeitreihenprognose verwenden.
# forecasting/arima_forecaster.py (abbreviated)
from statsmodels.tsa.statespace.sarimax import SARIMAX
class ARIMAForecaster:
def __init__(self, order: tuple = (1, 1, 1), seasonal_order: tuple = (1, 1, 1, 7)):
self.order = order
self.seasonal_order = seasonal_order
def fit(self, df: pd.DataFrame, exog=None):
"""Train SARIMAX model."""
series = df.set_index("timestamp")["value"]
self.model = SARIMAX(series, exog=exog, order=self.order, seasonal_order=self.seasonal_order)
self.fitted_model = self.model.fit(disp=False)
# ... implementation (see EXAMPLES.md)
def forecast(self, steps: int, exog_future=None):
"""Generate forecast for future periods."""
# ... implementation (see EXAMPLES.md)
# Auto-select parameters
best_order, best_seasonal = auto_arima(series, seasonal=True)
forecaster = ARIMAForecaster(order=best_order, seasonal_order=best_seasonal)
forecaster.fit(df_hourly)
forecast = forecaster.forecast(steps=168) # 7 days
Siehe EXAMPLES.md Schritt 3 fuer die vollstaendige ARIMAForecaster-Implementierung und auto_arima-Funktion.
Erwartet: ARIMA-Modell mit optimalen Parametern angepasst, Prognose mit Konfidenzintervallen generiert, Diagnosediagramme zeigen weisses Rauschen in den Residuen.
Bei Fehler: Wenn das Modell nicht konvergiert, Parameter vereinfachen (p, q, P, Q reduzieren); wenn die Prognose einen falschen Trend hat, Differenzierungsordnung pruefen (d, D); wenn Residuen kein weisses Rauschen sind, mehr AR/MA-Terme hinzufuegen; sicherstellen dass Reihenlaenge >2x saisonaler Periode ist.
Schritt 4: Kapazitaetsschwellen und Alarme identifizieren
Prognose analysieren, um vorherzusagen, wann Ressourcen erschoepft sein werden.
# forecasting/capacity_planning.py (abbreviated)
from datetime import datetime
class CapacityPlanner:
def __init__(self, capacity_limit: float, warning_threshold: float = 0.8):
self.capacity_limit = capacity_limit
self.warning_threshold = warning_threshold
def find_exhaustion_date(self, forecast: pd.DataFrame):
"""Find when forecast exceeds capacity limit."""
exceeded = forecast[forecast["yhat"] >= self.capacity_limit]
# ... implementation (see EXAMPLES.md)
def generate_capacity_report(self, forecast: pd.DataFrame):
"""Generate comprehensive capacity planning report."""
# ... implementation (see EXAMPLES.md)
# Example usage
planner = CapacityPlanner(capacity_limit=1000, warning_threshold=0.8)
report = planner.generate_capacity_report(forecast)
print(f"Warning Date: {report['warning_date']}")
print(f"Exhaustion Date: {report['exhaustion_date']}")
recommendation = planner.recommend_scaling_action(report)
Siehe EXAMPLES.md Schritt 4 fuer die vollstaendige CapacityPlanner-Implementierung.
Erwartet: Bericht zeigt, wann Kapazitaetsgrenzen erreicht werden, Empfehlungen mit Dringlichkeitsstufen bereitgestellt, Wachstumsraten berechnet.
Bei Fehler: Wenn das Erschoepfungsdatum unrealistisch ist, capacity_limit auf Richtigkeit pruefen; wenn die Wachstumsrate zu hoch ist, auf Ausreisser in historischen Daten pruefen; nichtlineare Wachstumsmodelle fuer ausgereifte Systeme in Betracht ziehen.
Schritt 5: Prognosen in Grafana visualisieren
Prognosedaten fuer Echtzeit-Monitoring an Grafana uebertragen.
# forecasting/grafana_integration.py (abbreviated)
import requests
class GrafanaForecaster:
def __init__(self, grafana_url: str, api_key: str, dashboard_uid: str = None):
self.grafana_url = grafana_url.rstrip("/")
self.api_key = api_key
self.dashboard_uid = dashboard_uid
def create_annotation(self, text: str, tags: list, time: datetime = None):
"""Create annotation in Grafana for forecast events."""
# ... implementation (see EXAMPLES.md)
def create_capacity_alert_annotation(self, capacity_report: dict):
"""Create Grafana annotation for capacity warnings."""
# ... implementation (see EXAMPLES.md)
# Export to CSV for Grafana datasource
def export_forecast_to_csv(forecast: pd.DataFrame, output_path: str):
"""Export forecast in format compatible with Grafana CSV datasource."""
# ... implementation (see EXAMPLES.md)
# Example usage
grafana = GrafanaForecaster(
grafana_url="http://grafana:3000",
api_key="YOUR_API_KEY",
dashboard_uid="your-dashboard-uid",
)
grafana.create_capacity_alert_annotation(report)
export_forecast_to_csv(forecast, "grafana/forecasts/cpu_forecast.csv")
Siehe EXAMPLES.md Schritt 5 fuer die vollstaendige GrafanaForecaster-Implementierung.
Erwartet: Prognoseannotationen erscheinen in Grafana-Dashboards, Kapazitaetswarnungen als vertikale Markierungen sichtbar, Prognosedaten ueber CSV-Datenquelle zugaenglich.
Bei Fehler: Grafana-API-Schluessel auf korrekte Berechtigungen verifizieren, Dashboard-UID auf Richtigkeit pruefen, sicherstellen dass Zeitstempel in Millisekunden fuer Annotationen vorliegen, API vor Integration mit curl testen.
Schritt 6: Prognosegenerierung automatisieren
Geplante Jobs einrichten, um regelmaessig Prognosen zu generieren.
# forecasting/scheduler.py (abbreviated)
import schedule
import time
def generate_daily_forecast():
"""Generate forecast for all monitored metrics."""
logger.info("Starting daily forecast generation")
metrics_config = [
{"name": "cpu_usage", "query": "...", "capacity_limit": 0.8, "forecast_days": 30},
{"name": "memory_usage", "query": "...", "capacity_limit": 32, "forecast_days": 30},
{"name": "disk_usage", "query": "...", "capacity_limit": 500, "forecast_days": 90},
]
loader = MetricsLoader(prometheus_url="http://prometheus:9090")
for metric_config in metrics_config:
df = loader.load_from_prometheus(query=metric_config["query"], lookback_days=90)
forecaster = ProphetForecaster()
forecaster.fit(df)
forecast = forecaster.forecast(periods=metric_config["forecast_days"])
planner = CapacityPlanner(capacity_limit=metric_config["capacity_limit"])
report = planner.generate_capacity_report(forecast)
export_forecast_to_csv(forecast, f"grafana/forecasts/{metric_config['name']}_forecast.csv")
# ... (see EXAMPLES.md for complete implementation)
# Schedule daily at 2 AM
schedule.every().day.at("02:00").do(generate_daily_forecast)
while True:
schedule.run_pending()
time.sleep(60)
Siehe EXAMPLES.md Schritt 6 fuer die vollstaendige Scheduler-Implementierung.
Erwartet: Prognosen werden taeglich fuer alle Metriken generiert, Kapazitaetsberichte protokolliert, CSV-Dateien fuer Grafana exportiert, Alarme fuer kritische Kapazitaetswarnungen gesendet.
Bei Fehler: Verifizieren dass der Scheduler-Prozess kontinuierlich laeuft (systemd/supervisor verwenden), Prometheus-Konnektivitaet pruefen, ausreichend Festplattenspeicher fuer Prognose-Exporte sicherstellen, Wiederholungslogik fuer voruebergehende Fehler implementieren, Monitoring fuer den Scheduler selbst einrichten.
Validierung
- Historische Daten mit 90+ Tagen kontinuierlicher Metriken geladen
- Prophet-Prognose erfasst taegliche/woechentliche Saisonalitaet im Komponentendiagramm
- Prognose-Konfidenzintervalle enthalten 85-95% der tatsaechlichen Werte in der Validierung
- Kapazitaetserschoepfungsdaten fuer bekannte Szenarien korrekt berechnet
- ARIMA-Modellresiduen erscheinen als weisses Rauschen in Diagnosediagrammen
- Grafana-Annotationen erscheinen an prognostizierten Warn-/Erschoepfungsdaten
- Automatisierte Prognose laeuft taeglich ohne manuellen Eingriff
- Prognosegenauigkeit (MAPE) < 15% auf Validierungsdatensatz
Haeufige Stolperfallen
- Unzureichende historische Daten: 3-12 Monate fuer zuverlaessige Saisonalitaetserkennung benoetigt; Prognose mit <60 Tagen vermeiden
- Bekannte Ereignisse ignorieren: Feiertage, Deployments, Marketing-Kampagnen verzerren Prognosen; als externe Regressoren oder Feiertage hinzufuegen
- Uebermaessiges Vertrauen in Langzeitprognosen: Genauigkeit verschlechtert sich jenseits von 30-90 Tagen; als Richtungshinweis verwenden, nicht als exakte Vorhersagen
- Statische Kapazitaetsgrenzen: Infrastruktur aendert sich im Laufe der Zeit; capacity_limit bei Ressourcenerweiterung aktualisieren
- Anomalien prognostizieren: Ausreisser in Trainingsdaten pflanzen sich in die Prognose fort; Daten bereinigen oder robuste Methoden verwenden
- Modelle nicht aktualisieren: Prognosen veralten nach Systemaenderungen; woechentlich oder nach signifikanten Architekturaenderungen neu trainieren
- Konfidenzintervalle ignorieren: Punktprognosen sind irrefuehrend; immer untere/obere Grenzen fuer die Planung verwenden
- Falsche Saisonalitaetsperiode: Taeglich fuer stuendliche Daten, woechentlich fuer taegliche Daten; Nichtubereinstimmung verursacht schlechte Prognosen
Verwandte Skills
detect-anomalies-aiops— Anomalieerkennung ergaenzt Prognose fuer proaktives Monitoringplan-capacity— Infrastruktur-Kapazitaetsplanungs-Workflowsbuild-grafana-dashboards— Prognosen und Kapazitaetstrends visualisieren
GitHub 仓库
相关推荐技能
executing-plans
设计该Skill用于当开发者提供完整实施计划时,以受控批次方式执行代码实现。它会先审阅计划并提出疑问,然后分批次执行任务(默认每批3个任务),并在批次间暂停等待审查。关键特性包括分批次执行、内置检查点和架构师审查机制,确保复杂系统实现的可控性。
requesting-code-review
设计该Skill可在完成任务、实现主要功能或合并代码前自动调度代码审查子代理,确保实现符合需求和计划。它支持通过指定git SHA范围进行精准的代码变更审查,帮助开发者在关键节点及时发现潜在问题。核心原则是"早审查、勤审查",适用于开发流程的各个关键阶段。
connect-mcp-server
设计这个Skill指导开发者如何将MCP服务器连接到Claude Code,支持HTTP、stdio和SSE三种传输协议。它涵盖了从安装配置到认证安全的完整流程,适用于集成GitHub、Notion、数据库等外部服务。当开发者需要添加集成、配置外部工具或提及MCP相关功能时,这个Skill能提供实用的操作指南。
web-cli-teleport
设计该Skill帮助开发者根据任务特性选择Claude Code的Web或CLI界面,并指导如何在两种环境间无缝迁移会话。它能分析任务复杂度、迭代需求等要素,推荐最优工作界面和工作流。关键特性包括会话状态管理、环境切换指导和上下文优化建议。
