Überwachung

Health-Probes für einen Load Balancer oder Kubernetes, Prometheus-Metriken und die Seite Status

  1. Health-Probes
  2. Prometheus-Metriken
  3. Die Seite Status
    1. Prüfungen
    2. Informationen

Health-Probes

Zwei Endpunkte sagen einem Load Balancer, einem Container-Healthcheck oder Kubernetes, ob ein Prozess Verkehr annehmen kann. Keiner braucht eine Anmeldung, und keiner gibt etwas über die Einrichtung preis:

Endpunkt Antwortet Verwendung
/api/v2/live 200 mit {"status":"live"}, solange der Prozess läuft Eine Liveness-Probe: den Prozess neu starten, wenn er nicht mehr antwortet
/api/v2/ready 200 mit {"status":"ready"} oder 503 mit {"status":"not ready","reason":"..."} Eine Readiness-Probe: Verkehr nur an bereite Prozesse senden

Ein Prozess ist bereit, wenn all das zutrifft:

  • er fährt nicht gerade herunter (stopping)
  • die Datenbank antwortet (database unreachable)
  • das Schema existiert (schema not provisioned) und ist vollständig, mit jeder Tabelle, jeder Spalte und jedem Index dieser Version (schema not upgraded); diese letzte Prüfung wird 30 Sekunden zwischengespeichert, sodass eine Probe alle paar Sekunden günstig bleibt

Unter einer BASE_URL beginnen die Pfade mit ihr, zum Beispiel /ansibleforms/api/v2/ready. Eine Laufzeitumgebung (RTE) beantwortet dieselben Probes unter /live und /ready, ohne die Prüfung der Vollständigkeit des Schemas; sie ist nicht bereit, während sie beim Herunterfahren ihre Jobs abarbeitet, sodass ihr kein neuer Job gesendet wird. Eine ausgehende RTE ist außerdem nicht bereit (not connected to the app), bis ihr Socket zur App offen ist. Ein mit AF_ROLE=worker gestarteter Prozess hat keine Weboberfläche: Er beantwortet nur /api/v2/version und /health für seinen Container-Healthcheck. Die Rollen finden Sie unter Skalierung.


Prometheus-Metriken

Setzen Sie METRICS_TOKEN auf eine lange Zufallszeichenfolge, um Prometheus-Metriken bereitzustellen. Ein Prozess, der die Webanwendung bereitstellt, antwortet unter /api/v2/metrics, eine RTE unter /metrics:

scrape_configs:
  - job_name: ansibleforms
    metrics_path: /api/v2/metrics
    authorization:
      type: Bearer
      credentials: <METRICS_TOKEN>
    static_configs:
      - targets: ['forms01.example.com:8000']

Ohne METRICS_TOKEN antworten die Endpunkte mit 404, als gäbe es sie nicht, und eine Anfrage ohne den richtigen Header Authorization: Bearer <token> erhält 401. Jeder Prozess meldet seine eigenen Werte, scrapen Sie also jeden einzeln:

Metrik Was sie misst
af_process_*, af_nodejs_* Den Prozess: CPU, Speicher, Event-Loop-Verzögerung, Garbage Collection
af_http_requests_total{route,method,status} Die bearbeiteten Anfragen
af_http_request_duration_seconds{route} Wie lange sie gedauert haben
af_jobs{status} Jobs, die gerade laufen (running) oder auf Genehmigung warten (approve)
af_jobs_ended_24h{status} Jobs, die in den letzten 24 Stunden geendet haben, nach Status
af_nodes{role,alive} Die in der Datenbank registrierten Prozesse, nach Rolle, lebend oder nicht
af_login_failures_total, af_login_lockouts_total Fehlgeschlagene Anmeldungen und Kontosperren
af_rte_running_jobs, af_rte_max_jobs Auf einer RTE: die Playbooks, die sie gerade ausführt, und wie viele sie gleichzeitig ausführen darf
af_rte_socket_connected Auf einer RTE im Socket-Modus: 1, solange ihr Socket zur App offen ist, 0, wenn nicht

Die Job- und Knotenwerte werden bei jedem Scrape aus der Datenbank gelesen. Antwortet die Datenbank nicht, werden sie weggelassen, und der Scrape gelingt trotzdem mit den übrigen Metriken.


Die Seite Status

Die Seite Status unter Einstellungen > System zeigt Benutzern mit der Rollenoption showSettings, wie es der Instanz geht. Sie liest nur, daher sendet ein Aktualisieren nie eine Mail und startet nie einen Job. Sie hat zwei Tabs, und die Anzahl der Probleme erscheint in der Beschriftung des Tabs Prüfungen.

Prüfungen

Jede Prüfung ist grün (in Ordnung), gelb (braucht Aufmerksamkeit) oder rot (ein Problem), mit Details beim Aufklappen der Zeile:

Prüfung Was sie betrachtet
Datenbankverbindung Die Datenbank antwortet
Datenbankbenutzer Gelb, wenn der Benutzer Rechte auf jede Datenbank hat, wie root, statt nur auf AnsibleForms.*
Datenbankschema Jede Tabelle, jede Spalte und jeder Index dieser Version existiert, und welcher Patch fehlgeschlagen ist, wenn nicht
Zeitplaner Ein Worker führt die Systemaufgaben aus, und keine davon hat aufgehört, eingeplant zu werden
Knoten Die Prozesse in der Datenbank, gelb, wenn sie unterschiedliche Versionen ausführen
Jobs Laufende Jobs und Jobs, die auf Genehmigung warten, gelb, wenn ein Job länger als 24 Stunden gelaufen ist
Backup-Werkzeuge Der Dump-Befehl von MYSQLDUMP_COMMAND existiert, und seine Version
Letztes Backup Gelb, wenn es keines gibt oder das neueste älter als zwei Tage ist, rot, wenn es keinen brauchbaren Dump hat
Designer-Sperre Wer die Designer-Sperre hält, gelb, wenn sie länger als 8 Stunden gehalten wurde
Repositories Rot, wenn ein Repository fehlgeschlagen ist oder kein Arbeitsverzeichnis auf der Festplatte hat
Konfigurations-Seed Die Datei des Config-Seeds ist lesbar und lässt sich parsen, und ihr letztes Neuladen hat funktioniert
Secret Stores Jeder Secret Store antwortet, gelb, wenn das Token eines HashiCorp Vault bald abläuft
Runner Jeder Runner antwortet, gelb, wenn es keinen gibt oder keine Standard-RTE
Server-Ausdrücke Gelb, wenn EXPRESSION_SANITIZER legacy ist
Geheimnisse Gelb, wenn ENCRYPTION_SECRET der öffentlich bekannte Standard ist oder ACCESS_TOKEN_SECRET nicht gesetzt ist
LDAP Der LDAP-Server ist erreichbar und sein TLS-Zertifikat gültig, ohne sich bei ihm anzumelden
Job-Speicher Die Größe der Job-Tabellen, gelb über 1 GB, wenn keine Job-Aufbewahrung gesetzt ist
Beschreibbare Ordner In jeden konfigurierten Ordner lässt sich schreiben
Speicherplatz Die Festplatte mit den Backups, gelb ab 85 % Belegung und rot ab 95 %

Informationen

Fakten über die Instanz ohne Bewertung, das Erste, wonach ein Support-Gespräch fragt: die Version von AnsibleForms, die Basis-URL, Version und Host der Datenbank, die Konfigurationsquelle, der Config-Seed, die Aufbewahrungseinstellungen, die Authentifizierungsmethoden, der Server des aktiven Mail-Kanals, Protokollstufe und -pfad, die Betriebszeit, die Zeitzone, die Node.js-Version und die Plattform.

Die Seite liest /api/v2/health, das einen angemeldeten Benutzer mit showSettings braucht. Für ein Überwachungssystem verwenden Sie stattdessen die Probes und die Metriken oben.