Health Check
Der Health-Endpunkt prüft Datenbankverbindung, Teams-Adapter-Initialisierung und MCP-Server-Status. Docker- und Kubernetes-Healthchecks nutzen diesen Endpunkt — der Pod wird als ungesund markiert, wenn ein MCP-Server nicht verbunden ist.
curl -s http://localhost:3978/api/health | python3 -m json.tool
curl -s https://ihre-domain.example.com/api/health | python3 -m json.tool
Erwartete Antwort (alle Systeme betriebsbereit):
{
"status": "ok",
"adapter_initialized": true,
"db": true,
"mcp": {
"release": { "connected": true, "tools": 38, "error": null },
"jira": { "connected": true, "tools": 29, "error": null }
}
}
| Feld | Bedeutung |
|---|---|
status | "ok" (HTTP 200) oder "degraded" (HTTP 503) |
adapter_initialized | Teams-Bot-Framework-Adapter ist bereit |
db | PostgreSQL-Verbindung erfolgreich |
mcp.*.connected | MCP-Server ist verbunden und antwortet |
mcp.*.tools | Anzahl registrierter Tools des MCP-Servers |
Nach einem Deployment benötigen MCP-Sidecars 20–30 Sekunden zum Verbinden. Der Health Check gibt während dieser Startphase 503 zurück.
Metriken & Monitoring
Reva stellt Metriken in zwei Formaten bereit. Für Metriken-Endpunkte ist keine Authentifizierung erforderlich.
Prometheus-Format
GET /api/metrics # text/plain; version=0.0.4
Diesen Endpunkt mit Prometheus, Grafana Agent oder einem kompatiblen Collector scrapen. Wichtige Metriken:
| Metrik | Typ | Beschreibung |
|---|---|---|
reva_request_duration_p50_seconds | Gauge | Nachrichtenverarbeitungszeit (p50) |
reva_requests_total | Counter | Nachrichten gesamt nach Status (success/error) |
reva_llm_step_duration_p50_seconds | Gauge | LLM-Inferenzzeit (p50) |
reva_agent_max_steps_aborts_total | Counter | Agent-Loops mit Iterationslimit |
reva_mcp_tool_duration_p50_seconds | Gauge | MCP-Tool-Aufruf-Dauer nach Server |
reva_active_sessions | Gauge | Aktive Gesprächssitzungen |
reva_notification_deliveries_total | Counter | Proaktive Benachrichtigungszustellungen |
JSON-Format
GET /api/stats # application/json
Dieselben Daten als strukturiertes JSON — nützlich für Dashboards, Skripte oder Ad-hoc-Prüfungen.
Support-Bundle
Das Support-Bundle sammelt DSGVO-konforme Diagnosedaten für die Fernanalyse. Es ist für Kundeninstallationen konzipiert, bei denen X-idra keinen SSH-Zugang hat. Zwei Erfassungsmethoden stehen zur Verfügung: ein API-Endpunkt (wenn die Anwendung läuft) und ein Shell-Skript (wenn nicht).
Einrichtung
Setzen Sie ein Shared Secret, um den Support-Bundle-Endpunkt zu aktivieren:
In Ihrer .env-Datei ergänzen:
REVA_SUPPORT_SECRET=ihr-secret-hier
Dann neustarten:
docker compose up -d reva
ConfigMap aktualisieren:
kubectl patch configmap reva-env -n reva \
--type merge -p '{"data":{"REVA_SUPPORT_SECRET":"ihr-secret-hier"}}'
kubectl rollout restart deployment/reva -n reva
API-Endpunkt (Anwendung läuft)
Diagnosedaten als JSON oder herunterladbares ZIP-Archiv abrufen:
# JSON-Antwort
curl -H "X-Support-Secret: $REVA_SUPPORT_SECRET" \
https://ihre-domain.example.com/api/support-bundle
# ZIP-Archiv (eine Datei pro Abschnitt)
curl -H "X-Support-Secret: $REVA_SUPPORT_SECRET" \
https://ihre-domain.example.com/api/support-bundle?format=zip \
-o support-bundle.zip
Was wird erfasst?
Das Bundle führt 11 unabhängige Kollektoren aus. Wenn einer fehlschlägt, laufen die anderen weiter.
| Abschnitt | Erfasste Daten |
|---|---|
system_info | Betriebssystem, Kernel, Architektur, Hostname, RAM, CPU, Festplatte, Python-Version, installierte Pakete |
config | Reva- + Renfield-Einstellungen (Secrets maskiert), relevante Umgebungsvariablen |
health | Datenbank, MCP-Server, Teams-Adapter, Ollama, Redis-Konnektivität |
metrics | Vollständiger Metriken-Snapshot (Anfrageleistung, Agent-Loop, LLM, MCP, Webhooks) |
mcp_status | MCP-Server-Konnektivität, Tool-Liste pro Server |
router_state | Agent-Router-Rollen, Modelle, Beschreibungen, MCP-Zuordnungen |
db_stats | Tabellen-Zeilenzählungen, aktive Verbindungen, Datenbankgröße, Connection-Pool-Statistiken |
ollama | Verfügbare Modelle, laufende Modelle mit VRAM-Nutzung |
network | DNS-Auflösung + TCP-Konnektivitätstests für alle konfigurierten Dienste |
logs | Letzte 500 Log-Zeilen + letzte 200 Fehler-/Warnungs-Zeilen (bereinigt) |
error_summary | Fehlerzahlen, Agent-Abbrüche, MCP-Fehler, Benachrichtigungsfehler |
DSGVO-Bereinigung
Das Support-Bundle ist so konzipiert, dass es sicher über Organisationsgrenzen hinweg geteilt werden kann:
| Datentyp | Behandlung |
|---|---|
| Passwörter, Tokens, API-Schlüssel | Ersetzt durch *** |
Umgebungsvariablen mit PASSWORD, SECRET, TOKEN, KEY, APP_ID, TENANT | Werte ersetzt durch *** |
| Benutzernamen in Logs | Ersetzt durch [REDACTED] |
| Sitzungs-/Konversations-IDs in Logs | Auf 8 Zeichen gekürzt |
| Datenbankinhalte (Nachrichten, Erinnerungen) | Werden nie abgefragt — nur pg_stat_user_tables-Zeilenzählungen |
Authentifizierung: Der Endpunkt gibt 403 zurück, wenn REVA_SUPPORT_SECRET nicht konfiguriert ist, und 401, wenn der X-Support-Secret-Header nicht übereinstimmt. Ohne das korrekte Secret werden keine Diagnosedaten offengelegt.
Offline-Shell-Skript (Anwendung läuft nicht)
Wenn die Anwendung nicht starten kann oder die API nicht erreichbar ist, verwenden Sie das Shell-Skript. Es erkennt automatisch, ob Docker Compose oder Kubernetes verwendet wird.
# Ohne API-Zugang (erfasst Systeminfo, Logs, Container-Status, DB-Statistiken)
./bin/support-bundle.sh
# Mit API-Zugang (zieht zusätzlich das vollständige API-Bundle)
REVA_SUPPORT_SECRET=ihr-secret ./bin/support-bundle.sh
Das Skript erzeugt ein support-bundle-YYYY-MM-DD-HHMMSS.tar.gz-Archiv im Projektverzeichnis mit:
- Systeminformationen (OS, Arbeitsspeicher, Festplatte, Docker-/K8s-Version)
- Container-/Pod-Status und Ressourcenverbrauch
- Anwendungslogs (letzte 1000 Zeilen)
- Health-Check-Antwort (wenn erreichbar)
- Konfiguration mit maskierten Secrets
- Datenbankstatistiken (Zeilenzählungen, Verbindungen, Größe)
- Vollständiges API-Bundle (wenn Secret angegeben und API erreichbar)
GDPR_NOTICE.txtmit Dokumentation der Bereinigung
Senden Sie die resultierende .tar.gz- oder .zip-Datei zur Analyse an info@x-idra.de. Das Bundle enthält keine personenbezogenen Daten, Gesprächsinhalte oder Zugangsdaten.
Datenbank-Backups
# Manuelles Backup
./bin/backup-db.sh
# Automatisches tägliches Backup (Crontab hinzufügen)
0 2 * * * /pfad/zu/reva/bin/backup-db.sh
Backups werden als komprimierte SQL-Dumps unter backups/reva_YYYY-MM-DD_HHMMSS.sql.gz gespeichert, mit automatischer 30-Tage-Aufbewahrung.
# Automatisch: CronJob läuft täglich um 02:00 UTC
kubectl get cronjob db-backup -n reva
# Manuelles Backup
kubectl create job --from=cronjob/db-backup db-backup-manual -n reva
# Backup-Logs prüfen
kubectl logs -n reva job/db-backup-manual
Backups werden auf dem Persistent Volume gespeichert. Für Off-Cluster-Backup ein zusätzliches PVC einbinden oder S3-Upload im CronJob konfigurieren.
Backups verwenden den postgres-Superuser (nicht den eingeschränkten reva-App-Benutzer), um alle Schemas und Berechtigungen zu erfassen.
Log-Verwaltung
# Reva-Logs folgen
docker compose logs -f reva
# Nach Fehlern suchen
docker compose logs reva | grep -i "error\|warning\|critical"
Log-Rotation
Docker-Log-Rotation ist in docker-compose.yml vorkonfiguriert (json-file-Treiber):
| Service | Max. Größe | Max. Dateien | Gesamt |
|---|---|---|---|
| reva | 50 MB | 5 | 250 MB |
| postgres | 20 MB | 3 | 60 MB |
| redis | 10 MB | 3 | 30 MB |
# Reva-Anwendung
kubectl logs -n reva -l app=reva -c reva -f
# MCP-Sidecars
kubectl logs -n reva -l app=reva -c release-mcp -f
kubectl logs -n reva -l app=reva -c jira-mcp -f
# Vorherige Pod-Logs (nach Absturz)
kubectl logs -n reva -l app=reva -c reva --previous
# Nach Fehlern suchen
kubectl logs -n reva -l app=reva -c reva | grep -i "error\|warning"
Kubernetes verwaltet Log-Rotation über die Container-Runtime. Für langfristige Log-Aufbewahrung einen Log-Aggregator (Loki, Elasticsearch usw.) konfigurieren.
Updates & Rollback
Update
# Version in .env aktualisieren
REVA_VERSION=1.0.5
# Neues Image laden und neustarten
docker compose pull reva
docker compose up -d reva
Rollback
# Auf vorherige Version zurücksetzen
REVA_VERSION=1.0.4
docker compose up -d reva
Update
# Neues Image bauen und importieren
docker build -t reva:latest .
docker save reva:latest | sudo k3s ctr images import -
# Deployment neustarten
kubectl rollout restart deployment/reva -n reva
# Rollout beobachten
kubectl rollout status deployment/reva -n reva
Rollback
# Auf vorherige Version zurücksetzen
kubectl rollout undo deployment/reva -n reva
# Rollout-Verlauf anzeigen
kubectl rollout history deployment/reva -n reva
Vor dem Update: Erstellen Sie immer zuerst ein Datenbank-Backup. Die Anwendung führt Datenbankmigrationen beim Start automatisch durch, und einige Migrationen sind möglicherweise nicht rückgängig zu machen.