Zum Inhalt springen

Datenbanken

Die Datenbank-Monitors verbinden sich mit Ihrem PostgreSQL-, MySQL/MariaDB- oder MongoDB-Server so, wie Ihre Anwendung es tut, führen eine Abfrage aus und prüfen das Ergebnis. Anders als eine TCP-Prüfung auf Port 5432 belegt das, dass der Server Verbindungen annimmt, Sie anmeldet und tatsächlich antwortet — und es erfasst bei jeder Prüfung die Verbindungs- plus Abfragelatenz.

Drei Monitor-Typen, ein Verhalten:

TypAkzeptierte SchemataStandardportStandardabfrage
PostgreSQLpostgres://, postgresql://5432SELECT 1
MySQLmysql://, mariadb://3306SELECT 1
MongoDBmongodb://, mongodb+srv://27017{ "ping": 1 }

MariaDB spricht das MySQL-Protokoll — verwenden Sie den Typ MySQL.

Agentfr-dc3 1 · verbinden (TLS) + Anmeldung 2 · SELECT count(*) FROM jobs … 3 · Ergebnis: 7 · 38 ms db.example.com:5432 ERGEBNIS verbunden, Abfrage lief, 7 < 10 → up verbunden, aber Ergebnis außerhalb der Schwelle → Fehlschlag abgelehnt / Anmeldung fehlgeschlagen / Zeitüberschreitung → Fehlschlag Benutzer / Passwort werden verschlüsselt gespeichert und erscheinen nie in URL, Alarmen, Statusseiten oder Exporten — die URL wird gespeichert als postgres://db.example.com:5432/app
  1. Der Agent öffnet eine Verbindung zum Server (mit TLS, wenn die URL es verlangt) und meldet sich mit Benutzer und Passwort des Monitors an.
  2. Er führt die konfigurierte Abfrage aus — oder die Standardabfrage des Typs.
  3. Das Ergebnis wird mit der optionalen Ergebnisprüfung verglichen. Abgelehnte Verbindung, fehlgeschlagene Anmeldung, Abfragefehler oder Zeitüberschreitung zählen allesamt als fehlgeschlagene Prüfung; ein Ergebnis außerhalb des erwarteten Werts ebenfalls.

Die Latenz umfasst Verbindung plus Abfrage — eine langsamer werdende Datenbank zeichnet sich also als Trend im Diagramm des Monitors ab, lange bevor sie aufhört zu antworten.

EinstellungBeschreibungStandard
Verbindungs-URLpostgres://host:5432/dbname?sslmode=require, mongodb://host1,host2/admin?replicaSet=rs0&tls=true—
DatenbankbenutzerAnmeldung, die für die Prüfung verwendet wird—
DatenbankpasswortVerschlüsselt gespeichert—
TestabfrageSQL-Anweisung oder ein MongoDB-Befehlsdokument als JSONSELECT 1 / { "ping": 1 }
ErgebnisprüfungOperator + erwarteter Wert, angewendet auf das Abfrageergebnis (optional)keine
TLS-Prüfung überspringenEin selbst signiertes Zertifikat akzeptierenaus
IntervallPrüffrequenztarifabhängig
ZeitbudgetFestes Prüfbudget, Verbindung + Abfrage (nicht konfigurierbar)5 s

Fügen Sie die Verbindungs-URL genau so ein, wie Ihr Anbieter sie liefert, samt Zugangsdaten. Alles vor dem @ wandert in die Felder Benutzer und Passwort, und die URL wird ohne diesen Teil gespeichert:

Sie fügen ein mongodb://monitoring:s3cret@node1.example.net,node2.example.net/admin?replicaSet=rs0&tls=true
gespeicherte URL mongodb://node1.example.net,node2.example.net/admin?replicaSet=rs0&tls=true
Benutzer monitoring (verschlüsselt)
Passwort s3cret (verschlüsselt)

Die URL ist das, was Monitor-Liste, Alarmmeldungen, öffentliche Statusseiten, Audit-Log und DSGVO-Export zeigen. Benutzer und Passwort sind im Ruhezustand verschlüsselt, in API und allen Exporten als *** maskiert und aus Fehlermeldungen entfernt. Das gilt für jeden Monitor-Typ — ein HTTP-Ziel https://benutzer:passwort@host wird genauso aufgeteilt.

Verwenden Sie einen nur lesenden Datenbankbenutzer, eigens fürs Monitoring angelegt. Die Abfrage läuft mit dessen Rechten, nichts anderes begrenzt sie.

Die URL entscheidet, ob TLS verwendet wird, je nach Konvention der jeweiligen Engine:

  • PostgreSQL — ?sslmode=require (oder verify-ca, verify-full)
  • MySQL / MariaDB — ?ssl-mode=REQUIRED (oder tls=true)
  • MongoDB — ?tls=true; mongodb+srv://-URLs verwenden immer TLS

Das Zertifikat des Servers wird gegen die öffentlichen Wurzelzertifikate geprüft. Für ein selbst signiertes Zertifikat aktivieren Sie am Monitor TLS-Zertifikatsprüfung überspringen.

Das Abfrageergebnis wird auf einen Wert reduziert:

  • SQL — die erste Spalte der ersten Zeile. SELECT count(*) FROM jobs WHERE status = 'stuck' liefert eine Zahl; SELECT pg_is_in_recovery() liefert t/f.
  • MongoDB — das Antwortdokument des Befehls. Wählen Sie ein Feld über einen Punktpfad (ok, members.0.stateStr, repl.setName); lassen Sie den Pfad leer, um die ganze Antwort zu vergleichen.

Wählen Sie dann einen Operator (==, !=, contains, >, <, >=, <=) und den erwarteten Wert. Numerische Operatoren vergleichen Zahlen, die übrigen Text.

Beispiele:

EngineAbfragePrüfungBedeutung
PostgreSQLSELECT count(*) FROM jobs WHERE status='stuck'< 10Die Job-Warteschlange staut sich nicht
PostgreSQLSELECT extract(epoch from now() - pg_last_xact_replay_timestamp())< 30Replikationsverzögerung unter 30 s
MySQLSHOW STATUS LIKE 'Threads_connected'(erste Spalte ist der Name — Unterabfrage verwenden)—
MySQLSELECT count(*) FROM information_schema.processlist< 200Verbindungszahl unter 200
MongoDB{ "replSetGetStatus": 1 }members.0.stateStr == PRIMARYKnoten 0 ist der Primary
MongoDB{ "serverStatus": 1 }connections.current < 500Verbindungszahl unter 500

Ohne Ergebnisprüfung besteht die Prüfung darin, sich erfolgreich zu verbinden und die Abfrage auszuführen.

Eine Datenbank, die aus dem Internet nicht erreichbar ist — und das sollten die meisten nicht sein —, wird von einem Private Agent aus überwacht, der in Ihrem Netz läuft. Die Prüfung ist identisch; nur der ausführende Agent ändert sich. Öffentliche Regionen weisen Ziele ab, die auf private Adressen auflösen.

Verbindungs- plus Abfragezeit wird bei jeder Prüfung erfasst und speist dieselben Latenzdiagramme, Perzentile und Alarme wie ein HTTP-Monitor.