Puoi utilizzare metriche personalizzate nell'operatore AlloyDB Omni Kubernetes per definire e raccogliere metriche specifiche dell'applicazione eseguendo query SQL sui database.
Le metriche personalizzate utilizzano la risorsa personalizzata (CR) ObservabilityConfig per definire le regole di raccolta delle metriche.
Configurare metriche personalizzate utilizzando ObservabilityConfig
La RP ObservabilityConfig è composta da due sezioni principali, dbClusterRefs e customMetrics.
dbClusterRefs
Questa sezione contiene un elenco di riferimenti alle risorse DBCluster a cui si applica questa configurazione. Ogni ObservabilityConfig deve avere come target un DBCluster nello stesso spazio dei nomi.
customMetrics
Questa sezione definisce la configurazione di base per la raccolta delle metriche personalizzate, inclusi i limiti delle risorse e le definizioni delle query.
Limiti delle risorse (resourceLimits)
Per proteggere il database, il sistema applica limiti alle query personalizzate. Se non specifichi questi limiti nel manifest, il sistema utilizza i valori predefiniti elencati nella tabella seguente.
| Parametro | Descrizione | Predefinito | Max | Unità |
|---|---|---|---|---|
workMemory |
Specifica work_mem per la connessione al database specifica utilizzata dall'agente di monitoraggio per raccogliere queste metriche. Questa impostazione è locale per il processo di raccolta delle metriche e non influisce sul parametro globale work_mem configurato nella specifica DBCluster. |
4MB |
N/D | KB, MB (predefinito: KB) |
maxParallelWorkers |
Specifica max_parallel_workers_per_gather per la connessione al database specifica utilizzata dall'agente di monitoraggio. Imposta questo valore su 0 per disattivare l'esecuzione parallela delle query e ridurre al minimo l'impatto sulla CPU. Questa impostazione è locale per il processo di raccolta delle metriche e non influisce sulla configurazione globale del database. | 0 |
N/D | Numero intero |
statementTimeout |
Specifica statement_timeout per la connessione al database specifica utilizzata dall'agente di monitoraggio. In questo modo viene limitato il tempo massimo consentito per l'esecuzione di una singola query sulle metriche. Questa impostazione è locale per il processo di raccolta delle metriche e non influisce sulla configurazione globale del database. | 2s |
30s |
ms, s (predefinito: ms) |
Definizioni delle metriche personalizzate (definitions)
Ogni voce dell'elenco definitions definisce una query e descrive come interpretarne i risultati.
metricGroup: un nome univoco (lettere minuscole, numeri, trattini bassi) utilizzato per la denominazione delle metriche.database: il nome del database di destinazione per la query. L'agente di monitoraggio stabilisce una connessione a questo database specifico per eseguire la query, pertanto lo schema sottoposto a query deve esistere.query: un'istruzione SQLSELECTvalida. Sono consentite soloSELECTquery.metrics: un elenco che mappa le colonne dei risultati SQL ai tipi Prometheus:usage: label: utilizza il valore della colonna come etichetta Prometheus.usage: gauge: esporta il valore come metrica prometheus gauge.usage: counter: esporta il valore come metrica contatore Prometheus.
Sicurezza e autorizzazioni
L'operatore AlloyDB Omni utilizza l'utente alloydbmonitor
per raccogliere le metriche. Per impostazione predefinita, l'operatore AlloyDB Omni crea questo utente
con l'attributo
LOGIN
e gli concede il ruolo
pg_monitor
nel database postgres.
Quando aggiungi metriche personalizzate, assicurati che questo utente disponga delle autorizzazioni aggiuntive appropriate:
- Responsabilità dell'utente: gli amministratori del database devono concedere manualmente i privilegi
SELECTall'utentealloydbmonitorper tabelle, viste o schemi dell'applicazione specifici utilizzati nelle query personalizzate. - Controllo di sicurezza del privilegio di scrittura: per garantire l'integrità del sistema e impedire la modifica accidentale dei dati, l'operatore AlloyDB Omni esegue un controllo di sicurezza. Se il sistema rileva che l'utente
alloydbmonitordispone di privilegi di scrittura, ad esempioINSERT,UPDATEeDELETE, su un database di destinazione, registra un errore e rifiuta di raccogliere metriche personalizzate da quel database.
Esempio di concessione di autorizzazioni
Per concedere l'accesso in sola lettura a tutte le tabelle nello schema public di un database denominato warehousedb, devi eseguire il seguente comando:
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;
Manifest di esempio
Il seguente manifest di esempio configura l'agente di monitoraggio per connettersi al database postgres e monitorare le statistiche sulle transazioni utilizzando la vista di sistema pg_stat_database.
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
Riferimento per le metriche
Questa sezione fa riferimento alle metriche generate dalla funzionalità delle metriche personalizzate.
Output delle metriche generate
Questo manifest di esempio esporta le metriche nel seguente formato Prometheus:
# 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
Etichette standard
Ogni metrica personalizzata include automaticamente le seguenti etichette standard: database, dbcluster, dbcluster_type, dbinstance, dbinstance_type, dbnamespace, dbnode e dbnode_type. Per saperne di più su queste etichette, consulta Etichette delle metriche di AlloyDB Omni.
Metriche di raccolta
Queste metriche indicano lo stato di ogni ciclo di raccolta delle metriche. Puoi trovare messaggi di errore dettagliati, inclusa la query specifica che ha raggiunto il timeout o non è riuscita, nei log del container dell'agente di monitoraggio.
# 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
Prima di utilizzare le metriche personalizzate, considera quanto segue:
- Sono consentite solo istruzioni
SELECT. Il sistema rifiuta qualsiasi istruzione che tenti di modificare i dati. Esegui e verifica manualmente i risultati e il rendimento della query prima di includerli nella configurazione delle metriche personalizzate. - Progetta ogni query SQL in modo che restituisca un numero minimo di righe di risultati. Ti consigliamo di specificare meno di cinque righe e una sola riga. In questo modo, le metriche e le etichette derivate dai risultati della query non portano a una cardinalità eccessiva, che può influire negativamente sulle prestazioni del sistema di monitoraggio.
- Ottimizza le query e assicurati che non richiedano risorse eccessive. Utilizza
resourceLimitsper proteggere il tuo database. - Ogni query deve restituire righe con una combinazione univoca di valori delle etichette.