Voraussetzungen
Stellen Sie sicher, dass die folgenden Komponenten verfügbar sind:
- Prometheus 2.x oder neuer, laufend und erreichbar
- Grafana 10.x oder neuer, laufend und erreichbar
- Reva mit erreichbarem
/api/metrics-Endpunkt von Prometheus aus
Prüfen Sie, ob der Metriken-Endpunkt funktioniert:
curl http://<reva-host>:3978/api/metrics
Sie sollten eine Ausgabe im Prometheus-Textformat mit Metriken sehen, die mit reva_ beginnen.
Für den Metriken-Endpunkt ist keine Authentifizierung erforderlich. Stellen Sie sicher, dass Ihre Prometheus-Instanz über das Netzwerk auf den Reva-Host (Port 3978) zugreifen kann.
Prometheus-Konfiguration
Kopieren oder mergen Sie config/prometheus/prometheus.yml in Ihre Prometheus-Konfiguration.
Das Standard-Target reva:3978 in static_configs setzt voraus, dass Prometheus im selben Docker-Netzwerk wie Reva läuft.
# prometheus.yml (Docker Compose)
scrape_configs:
- job_name: "reva"
metrics_path: "/api/metrics"
scrape_interval: 30s
static_configs:
- targets: ["reva:3978"]
Ersetzen Sie static_configs durch kubernetes_sd_configs, um den Reva-Pod im Namespace reva automatisch zu erkennen.
# prometheus.yml (Kubernetes)
scrape_configs:
- job_name: "reva"
metrics_path: "/api/metrics"
scrape_interval: 30s
kubernetes_sd_configs:
- role: pod
namespaces:
names: ["reva"]
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
regex: reva
action: keep
Laden Sie Prometheus nach der Konfigurationsänderung neu:
docker compose exec prometheus kill -HUP 1
kubectl rollout restart deployment/prometheus -n monitoring
Prüfung: Navigieren Sie in der Prometheus-Oberfläche zu Status > Targets und stellen Sie sicher, dass das Target reva den Status UP anzeigt.
Grafana-Dashboard importieren
Reva liefert ein vorgefertigtes Grafana-Dashboard unter config/grafana/reva-dashboard.json mit. Importieren Sie es in vier Schritten:
- Öffnen Sie Grafana und navigieren Sie zu Dashboards > Import.
- Klicken Sie auf Upload JSON file und wählen Sie
config/grafana/reva-dashboard.json. - Wählen Sie im Import-Dialog Ihre Prometheus-Datenquelle aus dem Dropdown.
- Klicken Sie auf Import.
Dashboard-Panels
Das Dashboard „Reva — Release Virtual Assistant“ enthält sieben Panels in vier Reihen:
| Reihe | Panels |
|---|---|
| Request Performance | Latenz-Perzentile, Anfragerate, Fehlerrate |
| Agent & LLM | Agent-Loop-Schritte, LLM-Inferenzzeit |
| MCP Tools | Tool-Dauer nach Server (Tabelle) |
| Active Sessions & Infrastructure | Sitzungen, Nachrichtenanzahl, Speicher/DB/Redis |
Das Dashboard aktualisiert sich alle 30 Sekunden automatisch. Einige Panels zeigen möglicherweise „No data“ an, bis Reva die erste Anfrage erhält.
Alarme konfigurieren
Kopieren Sie config/prometheus/alerts.yml in Ihr Prometheus-Regelverzeichnis (dasselbe Verzeichnis wie prometheus.yml oder wohin rule_files zeigt).
Alarmregeln
Folgende Alarme sind vordefiniert:
| Alarm | Bedingung | Schweregrad |
|---|---|---|
RevaHighErrorRate | Fehlerrate > 10 % für 5 Min. | critical |
RevaMcpDisconnected | MCP-Reconnect-Zähler steigt | warning |
RevaSlowLlm | LLM-p95-Latenz > 60s für 5 Min. | warning |
RevaHighMemory | RSS > 2 GB für 10 Min. | warning |
RevaNoRequests | 0 Anfragen/Min. für 15 Min. während der Geschäftszeiten | info |
AlertManager-Routing
Um Alarmbenachrichtigungen zu erhalten, konfigurieren Sie AlertManager mit einem Empfänger. Beispiel für Slack:
# alertmanager.yml
route:
receiver: "slack"
routes:
- match:
severity: critical
receiver: "slack"
repeat_interval: 1h
receivers:
- name: "slack"
slack_configs:
- api_url: "https://hooks.slack.com/services/..."
channel: "#reva-alerts"
title: '{{ .CommonAnnotations.summary }}'
text: '{{ .CommonAnnotations.description }}'
Alarme können auch an Microsoft Teams, E-Mail oder PagerDuty weitergeleitet werden. Alle Empfängertypen finden Sie in der AlertManager-Dokumentation.
Verifizierung
Führen Sie nach Abschluss der Einrichtung diese vier Prüfungen durch, um sicherzustellen, dass alles funktioniert:
- Prometheus-Target: Navigieren Sie zu
http://<prometheus>:9090/targetsund prüfen Sie, obrevaden StatusUPanzeigt. - Direkte Abfrage: Führen Sie
reva_uptime_secondsin der Prometheus-Abfrageoberfläche aus. Es sollte ein positiver Wert zurückgegeben werden. - Grafana-Panels: Öffnen Sie das Reva-Dashboard. Alle Panels sollten Daten anzeigen (einige können Null sein, wenn noch kein Traffic stattgefunden hat).
- Alarmregeln: Navigieren Sie zu
http://<prometheus>:9090/rulesund prüfen Sie, ob die Regelgruppereva.rulesgeladen ist.
Wenn alle vier Prüfungen bestanden sind, ist Ihr Monitoring-Stack vollständig einsatzbereit. Reva meldet ab sofort kontinuierlich Metriken und löst Alarme aus, wenn Schwellenwerte überschritten werden.
Metrik-Referenz
Gauges
| Metrik | Beschreibung |
|---|---|
reva_uptime_seconds | Prozess-Laufzeit in Sekunden |
reva_request_duration_p50_seconds | Anfragedauer, 50. Perzentil |
reva_request_duration_p95_seconds | Anfragedauer, 95. Perzentil |
reva_request_duration_p99_seconds | Anfragedauer, 99. Perzentil |
reva_requests_per_minute | Empfangene Anfragen in den letzten 60 Sekunden |
reva_agent_steps_p50 | Agent-Loop-Schritte pro Anfrage, 50. Perzentil |
reva_agent_steps_p95 | Agent-Loop-Schritte pro Anfrage, 95. Perzentil |
reva_agent_tool_calls_p50 | Tool-Aufrufe pro Anfrage, 50. Perzentil |
reva_agent_tool_calls_p95 | Tool-Aufrufe pro Anfrage, 95. Perzentil |
reva_llm_step_duration_p50_seconds | LLM-Schritt-Dauer, 50. Perzentil |
reva_llm_step_duration_p95_seconds | LLM-Schritt-Dauer, 95. Perzentil |
reva_llm_step_duration_p99_seconds | LLM-Schritt-Dauer, 99. Perzentil |
reva_mcp_tool_duration_p50_seconds{server="..."} | MCP-Tool-Aufrufdauer p50, pro Server |
reva_mcp_tool_duration_p95_seconds{server="..."} | MCP-Tool-Aufrufdauer p95, pro Server |
reva_webhook_events_per_hour | Webhook-Ereignisse in der letzten Stunde |
reva_active_sessions | Aktuell aktive Gesprächssitzungen |
reva_messages_last_24h | Verarbeitete Nachrichten in den letzten 24 Stunden |
reva_db_pool_checked_out | Aktuell belegte Datenbankverbindungen |
reva_db_pool_size | Gesamtgröße des Datenbank-Verbindungspools |
reva_process_memory_rss_bytes | Resident Set Size des Prozesses in Bytes |
reva_redis_connected | Redis-Verbindungsstatus (1 = verbunden, 0 = getrennt) |
Counter
| Metrik | Labels | Beschreibung |
|---|---|---|
reva_requests_total | status (success, error) | Empfangene Nachrichten gesamt |
reva_agent_max_steps_aborts_total | — | Agent hat das Schritt-Limit erreicht |
reva_llm_tokens_input_total | — | Geschätzte verbrauchte Eingabe-Tokens |
reva_llm_tokens_output_total | — | Geschätzte generierte Ausgabe-Tokens |
reva_mcp_reconnects_total | — | MCP-Server-Reconnect-Ereignisse |
reva_webhook_events_total | source (release, jira) | Eingehende Webhook-Ereignisse nach Quelle |
reva_notification_deliveries_total | status (success, failed) | Benachrichtigungszustellversuche |
reva_messages_by_language_total | lang (de, en) | Nachrichten nach erkannter Sprache |
reva_router_classifications_total | role (release, ...) | Router-Intent-Klassifikationen nach Rolle |
Alle Gauge-Metriken werden über ein gleitendes Fenster berechnet. Counter-Metriken steigen monoton und werden bei Prozessneustart auf Null zurückgesetzt. Verwenden Sie die Prometheus-Funktionen rate() oder increase() für Counter-basierte Abfragen.