Beobachtbarkeit mit benutzerdefinierten Monitoring-Messwerten verbessern

Wählen Sie eine Dokumentationsversion aus:

Sie können benutzerdefinierte Messwerte im AlloyDB Omni Kubernetes-Operator verwenden, um anwendungsspezifische Messwerte zu definieren und zu erfassen, indem Sie SQL-Abfragen für Ihre Datenbanken ausführen. Für benutzerdefinierte Messwerte wird die benutzerdefinierte ObservabilityConfig-Ressource (CR) verwendet, um die Regeln für die Messwerterfassung zu definieren.

Benutzerdefinierte Messwerte mit „ObservabilityConfig“ konfigurieren

Der ObservabilityConfig CR besteht aus zwei Hauptabschnitten: dbClusterRefs und customMetrics.

dbClusterRefs

Dieser Abschnitt enthält eine Liste der Verweise auf die DBCluster-Ressourcen, auf die sich diese Konfiguration bezieht. Jedes ObservabilityConfig muss auf ein DBCluster im selben Namespace ausgerichtet sein.

customMetrics

In diesem Abschnitt wird die Kernkonfiguration für die Erfassung benutzerdefinierter Messwerte definiert, einschließlich Ressourcenlimits und Abfragedefinitionen.

Ressourcenlimits (resourceLimits)

Zum Schutz der Datenbank erzwingt das System Limits für benutzerdefinierte Abfragen. Wenn Sie diese Grenzwerte nicht im Manifest angeben, verwendet das System die in der folgenden Tabelle aufgeführten Standardwerte.

Parameter Beschreibung Standard Max. Einheiten
workMemory Gibt work_mem für die spezifische Datenbankverbindung an, die vom Monitoring-Agent zum Erfassen dieser Messwerte verwendet wird. Diese Einstellung ist lokal für den Prozess zur Erfassung von Messwerten und wirkt sich nicht auf den globalen Parameter work_mem aus, der in der DBCluster-Spezifikation konfiguriert ist. 4MB KB, MB (Standard: KB)
maxParallelWorkers Gibt die max_parallel_workers_per_gather für die spezifische Datenbankverbindung an, die vom Monitoring-Agent verwendet wird. Legen Sie diesen Wert auf 0 fest, um die parallele Ausführung von Abfragen zu deaktivieren und die CPU-Auslastung zu minimieren. Diese Einstellung ist lokal für den Prozess der Messwerterhebung und wirkt sich nicht auf die globale Datenbankkonfiguration aus. 0 Ganzzahl
statementTimeout Gibt das statement_timeout für die spezifische Datenbankverbindung an, die vom Monitoring-Agent verwendet wird. Dadurch wird die maximal zulässige Ausführungszeit für eine einzelne Messwertabfrage begrenzt. Diese Einstellung ist lokal für den Prozess der Messwerterhebung und wirkt sich nicht auf die globale Datenbankkonfiguration aus. 2s 30s ms, s (Standard: ms)

Benutzerdefinierte Messwertdefinitionen (definitions)

Jeder Eintrag in der Liste definitions definiert eine Abfrage und beschreibt, wie die Ergebnisse zu interpretieren sind.

  • metricGroup: Ein eindeutiger Name (Kleinbuchstaben, Zahlen, Unterstriche), der für die Benennung von Messwerten verwendet wird.
  • database: Der Name der Zieldatenbank für die Abfrage. Der Monitoring-Agent stellt eine Verbindung zu dieser bestimmten Datenbank her, um die Abfrage auszuführen. Das abgefragte Schema muss also in der Datenbank vorhanden sein.
  • query: Eine gültige SQL-SELECT-Anweisung. Es sind nur SELECT-Abfragen zulässig.
  • metrics: Eine Liste, in der SQL-Ergebnisspalten Prometheus-Typen zugeordnet werden:

Sicherheit und Berechtigungen

Der AlloyDB Omni-Operator verwendet den Nutzer alloydbmonitor, um Messwerte zu erfassen. Standardmäßig erstellt der AlloyDB Omni-Operator diesen Nutzer mit dem LOGIN-Attribut und gewährt ihm die Rolle pg_monitor in der Datenbank postgres.

Wenn Sie benutzerdefinierte Messwerte hinzufügen, muss dieser Nutzer die entsprechenden zusätzlichen Berechtigungen haben:

  • Verantwortung des Nutzers: Datenbankadministratoren müssen dem alloydbmonitor-Nutzer manuell SELECT-Berechtigungen für alle spezifischen Anwendungstabellen, ‑ansichten oder ‑schemas erteilen, die in Ihren benutzerdefinierten Abfragen verwendet werden.
  • Sicherheitsprüfung für Schreibberechtigungen: Der AlloyDB Omni-Operator führt eine Sicherheitsprüfung durch, um die Systemintegrität zu gewährleisten und versehentliche Datenänderungen zu verhindern. Wenn das System feststellt, dass der alloydbmonitor-Nutzer Schreibberechtigungen für eine Zieldatenbank hat, z. B. INSERT, UPDATE und DELETE, protokolliert das System einen Fehler und weigert sich, benutzerdefinierte Messwerte aus dieser Datenbank zu erheben.

Beispiel für das Erteilen von Berechtigungen

Wenn Sie schreibgeschützten Zugriff auf alle Tabellen im Schema public einer Datenbank namens warehousedb gewähren möchten, müssen Sie den folgenden Befehl ausführen:

psql -h <var>DB_CLUSTER_ENDPOINT</var> -U <var>DB_ADMIN_USER</var> -d warehousedb
warehousedb=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO alloydbmonitor;

Beispielmanifest

Im folgenden Beispielmanifest wird der Monitoring-Agent so konfiguriert, dass er eine Verbindung zur Datenbank postgres herstellt und Transaktionsstatistiken mit der Systemansicht pg_stat_database erfasst.

apiVersion: alloydbomni.dbadmin.goog/v1
kind: ObservabilityConfig
metadata:
  name: obs-metrics
spec:
  dbClusterRefs:
    - dbcluster-sample
  customMetrics:
    resourceLimits:
      workMemory: "4MB"
      maxParallelWorkers: 0
    definitions:
      - metricGroup: database
        database: "postgres"
        query: |
          SELECT
            curr_db, xact_commit, xact_rollback
          FROM pg_stat_database WHERE datname IS NOT NULL
        metrics:
          - name: curr_db
            desc: "Database name"
            usage: label
          - name: xact_commit
            desc: "Transactions committed"
            usage: counter
          - name: xact_rollback
            desc: "Transactions rolled back"
            usage: counter

Referenz zu Messwerten

In diesem Abschnitt werden die Messwerte aufgeführt, die mit der Funktion für benutzerdefinierte Messwerte generiert werden.

Generierte Messwertausgabe

In diesem Beispielmanifest werden Messwerte im folgenden Prometheus-Format exportiert:

# HELP alloydb_omni_custom_database_xact_commit_total Transactions committed
# TYPE alloydb_omni_custom_database_xact_commit_total counter
alloydb_omni_custom_database_xact_commit_total{database="postgres",curr_db="testdb1",dbcluster="dbcluster-sample",dbcluster_type="Primary",dbinstance="n/a",dbinstance_type="n/a",dbnamespace="mc",dbnode="76d3-dbcluster-sample",dbnode_type="Primary"} 382069 1774388549568
# HELP alloydb_omni_custom_database_xact_rollback_total Transactions rolled back
# TYPE alloydb_omni_custom_database_xact_rollback_total counter
alloydb_omni_custom_database_xact_rollback_total{database="postgres",curr_db="testdb1",dbcluster="dbcluster-sample",dbcluster_type="Primary",dbinstance="n/a",dbinstance_type="n/a",dbnamespace="mc",dbnode="76d3-dbcluster-sample",dbnode_type="Primary"} 4364 1774388549568

Standardlabels

Jeder benutzerdefinierte Messwert enthält automatisch die folgenden Standardlabels: database, dbcluster, dbcluster_type, dbinstance, dbinstance_type, dbnamespace, dbnode und dbnode_type. Weitere Informationen zu diesen Labels finden Sie unter AlloyDB Omni-Messwertlabels.

Messwerte für die Messwerterfassung

Diese Messwerte geben den Status der einzelnen Messwerterfassungszyklen an. Detaillierte Fehlermeldungen, einschließlich der spezifischen Abfrage, für die das Zeitlimit überschritten wurde oder die fehlgeschlagen ist, finden Sie in den Containerlogs des Monitoring-Agents.

# HELP alloydb_omni_monitor_custom_metrics_errors_total Total number of errors encountered during execution of the custom query
# TYPE alloydb_omni_monitor_custom_metrics_errors_total counter
alloydb_omni_monitor_custom_metrics_errors_total{metricGroup="database",dbcluster="dbcluster-sample",dbnode="...",...} 0 1773703411350

Bevor Sie benutzerdefinierte Messwerte verwenden, sollten Sie Folgendes beachten:

  • Nur SELECT-Anweisungen sind zulässig. Das System lehnt alle Anweisungen ab, mit denen versucht wird, Daten zu ändern. Führen Sie Ihre Abfrage manuell aus und überprüfen Sie die Ergebnisse und die Leistung, bevor Sie sie in die Konfiguration der benutzerdefinierten Messwerte aufnehmen.
  • Entwerfen Sie jede SQL-Abfrage so, dass eine minimale Anzahl von Ergebniszeilen zurückgegeben wird. Wir empfehlen, weniger als fünf Zeilen und eine einzelne Zeile anzugeben. So wird sichergestellt, dass die aus den Abfrageergebnissen abgeleiteten Messwerte und Labels nicht zu einer übermäßigen Kardinalität führen, die sich negativ auf die Leistung des Überwachungssystems auswirken kann.
  • Optimieren Sie Abfragen und achten Sie darauf, dass sie nicht zu viele Ressourcen erfordern. Verwenden Sie resourceLimits, um Ihre Datenbank zu schützen.
  • Jede Abfrage muss Zeilen mit einer eindeutigen Kombination von Labelwerten zurückgeben.