Mejora la observabilidad con métricas de supervisión personalizadas

Selecciona una versión de la documentación:

Puedes usar métricas personalizadas en el operador de Kubernetes de AlloyDB Omni para definir y recopilar métricas específicas de la aplicación ejecutando consultas en SQL en tus bases de datos. Las métricas personalizadas usan el recurso personalizado (CR) ObservabilityConfig para definir las reglas de recopilación de métricas.

Configura métricas personalizadas con ObservabilityConfig

El CR ObservabilityConfig consta de dos secciones principales: dbClusterRefs y customMetrics.

dbClusterRefs

Esta sección contiene una lista de referencias a los recursos de DBCluster a los que se aplica esta configuración. Cada ObservabilityConfig debe segmentarse para un DBCluster en el mismo espacio de nombres.

customMetrics

En esta sección, se define la configuración principal para la recopilación de métricas personalizadas, incluidos los límites de recursos y las definiciones de consultas.

Límites de recursos (resourceLimits)

Para proteger la base de datos, el sistema aplica límites a las consultas personalizadas. Si no especificas estos límites en el manifiesto, el sistema usará los valores predeterminados que se indican en la siguiente tabla.

Parámetro Descripción Predeterminado Máx. Unidades
workMemory Especifica el parámetro work_mem para la conexión de base de datos específica que usa el agente de supervisión para recopilar estas métricas. Este parámetro de configuración es local para el proceso de recopilación de métricas y no afecta el parámetro global work_mem configurado en la especificación DBCluster. 4MB N/A KB, MB (predeterminado: KB)
maxParallelWorkers Especifica el valor de max_parallel_workers_per_gather para la conexión de base de datos específica que usa el agente de supervisión. Establece este valor en 0 para inhabilitar la ejecución de consultas paralelas y minimizar el impacto en la CPU. Este parámetro de configuración es local para el proceso de recopilación de métricas y no afecta la configuración global de la base de datos. 0 N/A Número entero
statementTimeout Especifica el valor de statement_timeout para la conexión de base de datos específica que usa el agente de supervisión. Esto limita el tiempo máximo permitido para ejecutar cualquier consulta de métricas individual. Este parámetro de configuración es local para el proceso de recopilación de métricas y no afecta la configuración global de la base de datos. 2s 30s ms, s (predeterminado: ms)

Definiciones de métricas personalizadas (definitions)

Cada entrada de la lista definitions define una búsqueda y describe cómo interpretar sus resultados.

  • metricGroup: Es un nombre único (en minúsculas, con números y guiones bajos) que se usa para nombrar la métrica.
  • database: Es el nombre de la base de datos de destino para la consulta. El agente de supervisión establece una conexión con esta base de datos específica para ejecutar la consulta; por lo tanto, el esquema que se consulta debe existir en ella.
  • query: Es una instrucción SELECT de SQL válida. Solo se permiten consultas SELECT.
  • metrics: Es una lista que asigna columnas de resultados de SQL a tipos de Prometheus:
    • usage: label: Usa el valor de la columna como una etiqueta de Prometheus.
    • usage: gauge: Exporta el valor como una métrica de indicador de Prometheus.
    • usage: counter: Exporta el valor como una métrica de contador de Prometheus.

Seguridad y permisos

El operador de AlloyDB Omni usa el usuario alloydbmonitor para recopilar métricas. De forma predeterminada, el operador de AlloyDB Omni crea este usuario con el atributo LOGIN y le otorga el rol pg_monitor en la base de datos postgres.

Cuando agregues métricas personalizadas, asegúrate de que este usuario tenga los permisos adicionales adecuados:

  • Responsabilidad del usuario: Los administradores de bases de datos deben otorgar manualmente privilegios de SELECT al usuario alloydbmonitor para cualquier tabla, vista o esquema de aplicación específicos que se usen en tus consultas personalizadas.
  • Verificación de seguridad de privilegios de escritura: Para garantizar la integridad del sistema y evitar la modificación accidental de los datos, el operador de AlloyDB Omni realiza una verificación de seguridad. Si el sistema detecta que el usuario alloydbmonitor tiene privilegios de escritura (por ejemplo, INSERT, UPDATE y DELETE) en una base de datos de destino, registra un error y se niega a recopilar métricas personalizadas de esa base de datos.

Ejemplo de otorgamiento de permisos

Para otorgar acceso de solo lectura a todas las tablas del esquema public de una base de datos llamada warehousedb, debes ejecutar el siguiente 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;

Ejemplo de manifiesto

En el siguiente manifiesto de ejemplo, se configura el agente de supervisión para que se conecte a la base de datos postgres y haga un seguimiento de las estadísticas de transacciones con la vista del 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

Referencia de métricas

En esta sección, se hace referencia a las métricas que genera la función de métricas personalizadas.

Resultados de las métricas generadas

Este manifiesto de muestra exporta métricas en el siguiente formato de 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

Etiquetas estándar

Todas las métricas personalizadas incluyen automáticamente las siguientes etiquetas estándar: database, dbcluster, dbcluster_type, dbinstance, dbinstance_type, dbnamespace, dbnode y dbnode_type. Para obtener más información sobre estas etiquetas, consulta Etiquetas de métricas de AlloyDB Omni.

Métricas de recopilación de métricas

Estas métricas indican el estado de cada ciclo de recopilación de métricas. Puedes encontrar mensajes de error detallados, incluida la consulta específica que agotó el tiempo de espera o falló, en los registros del contenedor del agente de supervisión.

# 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

Antes de usar métricas personalizadas, ten en cuenta lo siguiente:

  • Solo se permiten las instrucciones SELECT. El sistema rechaza cualquier instrucción que intente modificar datos. Ejecuta y verifica manualmente los resultados y el rendimiento de tus consultas antes de incluirlas en la configuración de las métricas personalizadas.
  • Diseña cada consulta en SQL para que muestre una cantidad mínima de filas de resultados. Te recomendamos que especifiques menos de cinco filas y una sola fila. Esto garantiza que las métricas y las etiquetas derivadas de los resultados de la consulta no generen una cardinalidad excesiva, lo que puede afectar negativamente el rendimiento del sistema de supervisión.
  • Optimiza las consultas y asegúrate de que no requieran recursos excesivos. Usa resourceLimits para proteger tu base de datos.
  • Cada consulta debe devolver filas con una combinación única de valores de etiquetas.