Migliorare l'osservabilità utilizzando metriche di monitoraggio personalizzate

Seleziona una versione della documentazione:

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 SQL SELECT valida. Sono consentite solo SELECT query.
  • 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 SELECT all'utente alloydbmonitor per 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 alloydbmonitor dispone di privilegi di scrittura, ad esempio INSERT, UPDATE e DELETE, 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 resourceLimits per proteggere il tuo database.
  • Ogni query deve restituire righe con una combinazione univoca di valori delle etichette.