É possível usar métricas personalizadas no operador do Kubernetes do AlloyDB Omni para definir e coletar métricas específicas do aplicativo executando consultas SQL nos seus bancos de dados.
As métricas personalizadas usam o recurso personalizado (CR) ObservabilityConfig para definir as regras de coleta de métricas.
Configurar métricas personalizadas usando ObservabilityConfig
O CR ObservabilityConfig consiste em duas seções principais, dbClusterRefs e customMetrics.
dbClusterRefs
Esta seção contém uma lista de referências aos recursos DBCluster a que essa configuração se aplica. Cada ObservabilityConfig precisa segmentar um DBCluster no mesmo namespace.
customMetrics
Esta seção define a configuração principal para a coleta de métricas personalizadas, incluindo limites de recursos e definições de consultas.
Limites de recursos (resourceLimits)
Para proteger o banco de dados, o sistema impõe limites às consultas personalizadas. Se você não especificar esses limites no manifesto, o sistema usará os valores padrão listados na tabela a seguir.
| Parâmetro | Descrição | Padrão | Máx. | Unidades |
|---|---|---|---|---|
workMemory |
Especifica a work_mem para a conexão de banco de dados específica usada pelo agente de monitoramento para coletar essas métricas. Essa configuração é local para o processo de coleta de métricas e não afeta o parâmetro global work_mem configurado na especificação DBCluster. |
4MB |
N/A | KB, MB (padrão: KB) |
maxParallelWorkers |
Especifica o max_parallel_workers_per_gather para a conexão de banco de dados específica usada pelo agente de monitoramento. Defina como 0 para desativar a execução de consultas paralelas e minimizar o impacto na CPU. Essa configuração é local para o processo de coleta de métricas e não afeta a configuração global do banco de dados. | 0 |
N/A | Número inteiro |
statementTimeout |
Especifica o statement_timeout para a conexão de banco de dados específica usada pelo agente de monitoramento. Isso limita o tempo máximo permitido para a execução de uma única consulta de métrica. Essa configuração é local para o processo de coleta de métricas e não afeta a configuração global do banco de dados. | 2s |
30s |
ms, s (padrão: ms) |
Definições de métricas personalizadas (definitions)
Cada entrada na lista definitions define uma consulta e descreve como interpretar os resultados dela.
metricGroup: um nome exclusivo (minúsculas, números, sublinhados) usado para nomear métricas.database: o nome do banco de dados de destino da consulta. O agente de monitoramento estabelece uma conexão com esse banco de dados específico para executar a consulta. Portanto, o esquema consultado precisa existir nele.query: uma instruçãoSELECTSQL válida. SóSELECTconsultas são permitidas.metrics: uma lista que mapeia colunas de resultados SQL para tipos do Prometheus:usage: label: usa o valor da coluna como um rótulo do Prometheus.usage: gauge: exporta o valor como uma métrica de medidor do Prometheus.usage: counter: exporta o valor como uma métrica de contador do Prometheus.
Segurança e permissões
O operador do AlloyDB Omni usa o usuário alloydbmonitor para coletar métricas. Por padrão, o operador do AlloyDB Omni cria esse usuário com o atributo LOGIN e concede a ele o papel pg_monitor no banco de dados postgres.
Ao adicionar métricas personalizadas, verifique se o usuário tem as permissões adicionais adequadas:
- Responsabilidade do usuário: os administradores de banco de dados precisam conceder manualmente privilégios
SELECTao usuárioalloydbmonitorpara tabelas, visualizações ou esquemas de aplicativos específicos usados nas suas consultas personalizadas. - Verificação de segurança do privilégio de gravação: para garantir a integridade do sistema e evitar modificações acidentais de dados, o operador do AlloyDB Omni realiza uma verificação de segurança. Se o sistema descobrir que o usuário
alloydbmonitortem privilégios de gravação, por exemplo,INSERT,UPDATEeDELETE, em um banco de dados de destino, ele vai registrar um erro e se recusar a coletar métricas personalizadas desse banco de dados.
Exemplo de concessão de permissões
Para conceder acesso somente leitura a todas as tabelas no esquema public de um banco de dados chamado warehousedb, execute o seguinte 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;
Exemplo de manifesto
O exemplo de manifesto a seguir configura o agente de monitoramento para se conectar ao banco de dados postgres e rastrear estatísticas de transações usando a visualização do 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
Referência de métricas
Esta seção faz referência às métricas geradas pelo recurso de métricas personalizadas.
Saída de métricas geradas
Este manifesto de exemplo exporta métricas no seguinte formato do 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
Marcadores padrão
Todas as métrica personalizada incluem automaticamente os seguintes rótulos padrão: database, dbcluster, dbcluster_type, dbinstance, dbinstance_type, dbnamespace, dbnode e dbnode_type. Para mais informações sobre esses rótulos, consulte Rótulos de métricas do AlloyDB Omni.
Métricas de coleta de métricas
Essas métricas indicam o status de cada ciclo de coleta. Você pode encontrar mensagens de erro detalhadas, incluindo qual consulta específica atingiu o tempo limite ou falhou, nos registros do contêiner do agente de monitoramento.
# 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, considere o seguinte:
- Somente instruções
SELECTsão permitidas. O sistema rejeita qualquer instrução que tente modificar dados. Execute e verifique manualmente os resultados e a performance da consulta antes de incluí-los na configuração de métricas personalizadas. - Projete cada consulta SQL para retornar um número mínimo de linhas de resultado. Recomendamos que você especifique menos de cinco linhas e uma única linha. Isso garante que as métricas e os rótulos derivados dos resultados da consulta não levem a uma cardinalidade excessiva, o que pode afetar negativamente o desempenho do sistema de monitoramento.
- Otimize as consultas e verifique se elas não exigem recursos excessivos. Use o
resourceLimitspara proteger seu banco de dados. - Cada consulta precisa retornar linhas com uma combinação exclusiva de valores de rótulo.