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 nurSELECT-Abfragen zulässig.metrics: Eine Liste, in der SQL-Ergebnisspalten Prometheus-Typen zugeordnet werden:usage: label: Der Spaltenwert wird als Prometheus-Label verwendet.usage: gauge: Der Wert wird als Prometheus-Messwert exportiert.usage: counter: Der Wert wird als Prometheus-Zählermesswert exportiert.
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 manuellSELECT-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,UPDATEundDELETE, 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.