Datadog para Bancos de Dados: Guia Completo de Database Monitoring
O que é o Datadog Database Monitoring?
O Datadog Database Monitoring (DBM) é um módulo da plataforma de observabilidade Datadog focado em fornecer visibilidade profunda e em tempo real sobre o desempenho de bancos de dados relacionais e NoSQL. Ele vai muito além do monitoramento tradicional de infraestrutura, permitindo que engenheiros e DBAs identifiquem, investiguem e resolvam gargalos em queries antes que eles impactem o usuário final.
Ao contrário de soluções que apenas monitoram métricas de host (CPU, memória, disco), o DBM desce ao nível da query, exibindo:
- Quais queries estão consumindo mais recursos
- O plano de execução exato de cada query
- Quais queries estão bloqueando outras
- Correlação entre performance de banco e comportamento da aplicação
Em resumo: o DBM transforma dados brutos de banco de dados em insights acionáveis, acelerando drasticamente o processo de troubleshooting.
Principais Funcionalidades
1. Query Metrics View
A visão de Query Metrics exibe o desempenho histórico de queries normalizadas. Com ela, é possível:
- Visualizar tendências de performance ao longo do tempo
- Filtrar e agrupar queries por
team,user,cluster,hostou qualquer tag customizada - Identificar queries lentas e as que mais consomem tempo de execução total
- Acessar métricas específicas do banco, como linhas atualizadas/retornadas, não capturadas pelo APM tradicional
2. Query Samples
O Query Samples mostra um snapshot das queries executadas em um determinado intervalo de tempo. Útil para:
- Entender o comportamento transacional do banco em picos de carga
- Correlacionar queries específicas com eventos de incidente
- Identificar padrões de uso anômalos
3. Explain Plans
Para cada query, o DBM captura automaticamente o plano de execução (EXPLAIN PLAN), que detalha:
- Os passos executados pelo otimizador do banco
- Custo estimado de cada operação
- Operações ineficientes, como
Sequential Scansque poderiam ser substituídos por índices
4. Wait Event Analysis
A análise de Wait Events (eventos de espera) permite:
- Identificar por quê queries estão demorando (aguardando lock, I/O, CPU, rede)
- Visualizar a carga do banco por tipo de espera
- Entender quais usuários, queries e serviços estão gerando mais carga
5. Blocking Queries
O DBM detecta e exibe automaticamente queries que estão bloqueando outras, mostrando a cadeia completa de bloqueio — um diferencial crítico para ambientes OLTP de alta concorrência.
Arquitetura e Funcionamento
O DBM utiliza o Datadog Agent instalado no host do banco (ou em um host separado, para serviços gerenciados). O Agent conecta ao banco como um usuário read-only e coleta telemetria diretamente:
┌─────────────────────────────────────┐
│ Aplicação / Backend │
└───────────────┬─────────────────────┘
│ queries
▼
┌─────────────────────────────────────┐
│ Banco de Dados │
│ (PostgreSQL / MySQL / etc.) │
│ │
│ pg_stat_statements │
│ pg_stat_activity │
│ auto_explain │
└───────────────┬─────────────────────┘
│ métricas (read-only)
▼
┌─────────────────────────────────────┐
│ Datadog Agent │
│ (instalado no host ou remoto) │
└───────────────┬─────────────────────┘
│ HTTPS / TLS
▼
┌─────────────────────────────────────┐
│ Datadog Platform │
│ DBM · APM · Logs · Dashboards │
└─────────────────────────────────────┘
Importante: O Agent não deve se conectar ao banco via proxy, load balancer ou connection pooler (como PgBouncer), pois isso pode gerar métricas imprecisas ao apontar para hosts diferentes.
Configuração Passo a Passo: PostgreSQL
Pré-requisitos
- Datadog Agent v7.36.1+
- PostgreSQL v9.6 ou superior
- Extensão
pg_stat_statementsinstalada - Módulo
postgresql-contribdisponível
Passo 1 — Configurar o PostgreSQL
Edite o arquivo postgresql.conf:
# Habilita rastreamento de statements
shared_preload_libraries = 'pg_stat_statements,auto_explain'
# Configurações do pg_stat_statements
pg_stat_statements.max = 10000
pg_stat_statements.track = all
pg_stat_statements.track_utility = false
pg_stat_statements.save = true
# Configurações do auto_explain (planos de execução automáticos)
auto_explain.log_min_duration = '500ms'
auto_explain.log_analyze = true
auto_explain.log_format = json
auto_explain.log_timing = false
auto_explain.sample_rate = 0.05
Após editar, reinicie o servidor PostgreSQL:
sudo systemctl restart postgresql
Passo 2 — Criar o usuário Datadog no banco
Conecte via psql com um usuário com privilégios de CREATEROLE:
-- Criar usuário read-only para o Datadog Agent
CREATE USER datadog WITH PASSWORD 'SUA_SENHA_SEGURA';
-- Conceder permissões de monitoramento (PostgreSQL 10+)
GRANT pg_monitor TO datadog;
-- Conceder acesso às estatísticas de banco
GRANT SELECT ON pg_stat_database TO datadog;
Para coletar métricas customizadas de tabelas específicas:
GRANT SELECT ON <NOME_DA_TABELA> TO datadog;
Valide a conexão:
psql -h localhost -U datadog postgres -c \
"SELECT * FROM pg_stat_database LIMIT 1;" \
&& echo "Conexão OK" \
|| echo " Falha na conexão"
Passo 3 — Configurar o Datadog Agent
Crie ou edite o arquivo /etc/datadog-agent/conf.d/postgres.d/conf.yaml:
init_config:
instances:
- host: 127.0.0.1
port: 5432
username: datadog
password: SUA_SENHA_SEGURA
dbname: postgres
# Habilita o Database Monitoring
dbm: true
# Coleta de métricas de tamanho do banco
# Desabilite em instâncias com milhares de relações
collect_database_size_metrics: true
# Intervalo de coleta em segundos (padrão: 1s)
collection_interval: 1
# Tags customizadas para filtros no dashboard
tags:
- env:production
- team:backend
- service:meu-servico
Reinicie o Agent:
sudo systemctl restart datadog-agent
# Verifique o status
sudo datadog-agent status | grep -A 20 "postgres"
Passo 4 — Habilitar coleta de logs (opcional, mas recomendado)
No arquivo /etc/datadog-agent/datadog.yaml:
logs_enabled: true
No arquivo de configuração do PostgreSQL (postgresql.conf):
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
log_min_duration_statement = 500 # loga queries acima de 500ms
log_line_prefix = '%m [%p] %q%u@%d '
Configuração Passo a Passo: MySQL
Passo 1 — Configurar o MySQL
Edite o my.cnf ou my.ini:
[mysqld]
# Habilita Performance Schema
performance_schema = ON
performance-schema-consumer-events-statements-current = ON
performance-schema-consumer-events-waits-current = ON
# Habilita slow query log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0.5
log_queries_not_using_indexes = ON
Passo 2 — Criar o usuário Datadog no MySQL
-- MySQL 8.0+
CREATE USER 'datadog'@'%' IDENTIFIED BY 'SUA_SENHA_SEGURA';
-- Permissões necessárias para DBM
GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'%';
GRANT PROCESS ON *.* TO 'datadog'@'%';
GRANT SELECT ON performance_schema.* TO 'datadog'@'%';
-- Para explain plans automáticos
GRANT SELECT ON sys.* TO 'datadog'@'%';
FLUSH PRIVILEGES;
Passo 3 — Configurar o Datadog Agent para MySQL
Crie /etc/datadog-agent/conf.d/mysql.d/conf.yaml:
init_config:
instances:
- host: 127.0.0.1
port: 3306
username: datadog
password: SUA_SENHA_SEGURA
# Habilita o Database Monitoring
dbm: true
# Coleta de explain plans
collect_explain_plans: true
# Tags
tags:
- env:production
- team:backend
Métricas Essenciais para Monitorar
PostgreSQL
| Métrica | Descrição | Limite de Alerta Sugerido |
|---|---|---|
postgresql.connections | Total de conexões ativas | > 80% do max_connections |
postgresql.percent_usage_connections | % das conexões em uso | > 75% |
postgresql.bgwriter.checkpoints_timed | Checkpoints agendados | Monitorar tendência |
postgresql.bgwriter.checkpoints_requested | Checkpoints forçados | > 10/min (pode indicar sobrecarga) |
postgresql.replication.delay | Lag de replicação (bytes) | > 50 MB em produção |
postgresql.index_scans | Uso de índices | Queda brusca indica problema |
postgresql.seq_scans | Sequential scans | Aumento indica queries sem índice |
postgresql.deadlocks | Deadlocks por segundo | > 0 (qualquer valor deve ser investigado) |
postgresql.cache_hit | Taxa de cache hit | < 95% indica pressão de memória |
MySQL
| Métrica | Descrição | Limite de Alerta Sugerido |
|---|---|---|
mysql.performance.threads_connected | Threads conectadas | > 80% do max_connections |
mysql.innodb.buffer_pool_read_requests | Reads do buffer pool | Monitorar junto com reads |
mysql.innodb.row_lock_waits | Esperas por row lock | > 0 frequente indica contention |
mysql.performance.slow_queries | Queries lentas/segundo | > 5/s merece atenção |
mysql.replication.seconds_behind_master | Lag de replicação (s) | > 30s em produção |
mysql.net.max_connections_seen | Pico de conexões | Monitorar tendência de crescimento |
Alertas e Monitores
Criando um monitor para queries lentas (exemplo via Terraform)
resource "datadog_monitor" "slow_queries" {
name = "[PostgreSQL] Queries lentas acima de 2 segundos"
type = "metric alert"
message = <<-EOT
Queries com duração média acima de 2 segundos detectadas no banco {{host.name}}.
Verifique o painel de Query Metrics no Datadog DBM para identificar as queries problemáticas.
@pagerduty-database-oncall @slack-db-alerts
EOT
query = "avg(last_5m):avg:postgresql.queries.mean_time{env:production} by {host} > 2000"
monitor_thresholds {
critical = 2000 # 2000ms = 2s
warning = 1000 # 1000ms = 1s
}
notify_no_data = false
renotify_interval = 30
tags = ["env:production", "team:backend", "service:database"]
}
Monitor para taxa de cache hit
resource "datadog_monitor" "cache_hit_ratio" {
name = "[PostgreSQL] Cache Hit Ratio abaixo de 95%"
type = "metric alert"
message = "@slack-db-alerts Cache hit ratio degradado — possível pressão de memória."
query = "avg(last_10m):avg:postgresql.cache_hit{env:production} by {host} < 95"
monitor_thresholds {
critical = 90
warning = 95
}
}
Monitor para conexões
resource "datadog_monitor" "connection_usage" {
name = "[PostgreSQL] Uso de conexões acima de 80%"
type = "metric alert"
message = "@pagerduty-db Número de conexões se aproximando do limite máximo."
query = "avg(last_5m):avg:postgresql.percent_usage_connections{env:production} by {host} > 80"
monitor_thresholds {
critical = 90
warning = 80
}
}
Integração com APM
Uma das funcionalidades mais poderosas do Datadog DBM é a integração nativa com o APM (Application Performance Monitoring). Isso permite correlacionar uma query lenta diretamente com a requisição HTTP ou o trace de aplicação que a originou.
Como funciona
- O APM instrumenta a aplicação (via SDK Datadog para Python, Java, Node.js, Go, Ruby, etc.)
- O DBM captura as queries e seus metadados
- O Datadog correlaciona automaticamente usando o trace ID propagado na query
Configurando a propagação de trace (exemplo em Python)
import psycopg2
from ddtrace import patch_all, tracer
# Instrumenta automaticamente o driver do PostgreSQL
patch_all()
@tracer.wrap(service="meu-servico", resource="buscar_usuarios")
def buscar_usuarios(filtro: str):
conn = psycopg2.connect(
host="localhost",
database="meu_banco",
user="app_user",
password="senha"
)
cursor = conn.cursor()
# O trace ID é automaticamente injetado como comentário SQL
# pelo patch do ddtrace, permitindo correlação no DBM
cursor.execute(
"SELECT id, nome, email FROM usuarios WHERE status = %s LIMIT 100",
(filtro,)
)
return cursor.fetchall()
Exemplo em Java (Spring Boot)
// Adicione a dependência no pom.xml:
// <dependency>
// <groupId>com.datadoghq</groupId>
// <artifactId>dd-trace-api</artifactId>
// <version>1.x.x</version>
// </dependency>
// A instrumentação automática do JDBC injeta o trace ID nas queries
// Habilite no arquivo de propriedades da aplicação:
// dd.trace.db.client.split-by-instance=true
// dd.jdbc.prepared.statement.db.name.lookup=true
Com a integração configurada, ao identificar uma query lenta no painel DBM, você pode clicar diretamente no trace da aplicação que a originou — encurtando drasticamente o MTTR (Mean Time To Resolve).
Boas Práticas e Considerações de Segurança
Segurança
1. Princípio do menor privilégio
Sempre crie um usuário dedicado e read-only para o Datadog Agent. Nunca utilize o superusuário do banco.
-- PostgreSQL: apenas o necessário
GRANT pg_monitor TO datadog;
GRANT SELECT ON pg_stat_database TO datadog;
-- Não conceda: SUPERUSER, CREATEDB, CREATEROLE
2. Gerenciamento seguro de credenciais
Utilize variáveis de ambiente ou um secret manager (AWS Secrets Manager, HashiCorp Vault) em vez de hardcoded passwords no conf.yaml:
instances:
- host: 127.0.0.1
username: datadog
password: ENC[datadog_secret:db_password] # Integração com Datadog Secret Backend
3. Dados sensíveis em query samples
O DBM anonimiza automaticamente os valores nos parâmetros das queries (ex: SELECT * FROM users WHERE email = ?). Verifique se a opção de obfuscação está habilitada (padrão: ativo).
4. Controle de acesso via RBAC
Use as funcionalidades de RBAC do Datadog para restringir quem pode visualizar explain plans e query samples contendo dados potencialmente sensíveis.
Performance
1. Ajuste do intervalo de coleta
Para instâncias de alta carga, considere aumentar o collection_interval para reduzir overhead:
instances:
- dbm: true
collection_interval: 5 # Reduz frequência em bancos sobrecarregados
2. Bancos com muitas relações
Em instâncias PostgreSQL com milhares de tabelas, desabilite a coleta de tamanho para evitar queries pg_database_size() custosas:
instances:
- dbm: true
collect_database_size_metrics: false
3. Auto_explain e volume de logs
O auto_explain pode gerar grande volume de logs em bancos de alta carga. Ajuste auto_explain.log_min_duration e auto_explain.sample_rate conforme necessário:
auto_explain.log_min_duration = '1s' # Apenas queries acima de 1 segundo
auto_explain.sample_rate = 0.01 # Amostrar 1% das queries elegíveis
Custos e Considerações de Adoção
O Datadog DBM é um produto pago, com precificação por host monitorado:
| Plano | Preço Estimado | Inclui |
|---|---|---|
| Infrastructure Monitoring | ~$15/host/mês | Métricas de host, sem DBM |
| Database Monitoring | ~$70/host/mês | DBM completo (adicional ao infra) |
| Bundle mínimo | ~$85/host/mês | Infra + DBM |
Nota: Preços são estimativas de mercado e podem variar. Consulte o site oficial do Datadog para valores atualizados e planos Enterprise.
Quando o DBM se paga?
O ROI do Datadog DBM é mais claro em cenários como:
- Incidentes de produção recorrentes causados por queries lentas ou bloqueios
- Times sem DBA dedicado, onde engenheiros de backend precisam investigar problemas de banco sozinhos
- Ambientes multi-banco e multi-cloud, onde a visibilidade unificada é crítica
- Alta sensibilidade a latência, como e-commerce, fintechs e SaaS B2B
Uma única hora de indisponibilidade evitada frequentemente supera meses do custo da ferramenta.
Conclusão
O Datadog Database Monitoring representa uma evolução significativa na capacidade de observabilidade sobre bancos de dados. Ao unir métricas de infraestrutura, análise de queries, planos de execução, wait events e correlação com traces de aplicação em uma única plataforma, o DBM elimina os silos tradicionais entre times de desenvolvimento, operações e DBA.
Os principais benefícios práticos são:
- Redução do MTTR em incidentes relacionados a banco de dados
- Proatividade na identificação de queries problemáticas antes que virem incidente
- Colaboração entre devs e DBAs com uma linguagem e visão comuns
- Otimização contínua de performance com dados históricos e explain plans automáticos
Para times que já utilizam o Datadog como plataforma de observabilidade, habilitar o DBM é um passo natural e de alto valor. Para quem está avaliando ferramentas, o trial gratuito de 14 dias permite validar o impacto no ambiente real antes da decisão de adoção.
Referências
- Documentação oficial: Datadog Database Monitoring
- Setup PostgreSQL Self-Hosted
- Configuração avançada PostgreSQL DBM
- Integração PostgreSQL padrão
- Pricing Datadog
About author
Você pode gostar também
EnterpriseDB e 4Linux: Gerenciamento de bancos de dados com tecnologia Open Source
A EnterpriseDB é uma empresa global especializada na gestão de bancos de dados de missão crítica com tecnologia Open Source. Baseado em PostgreSQL a solução permite um gerenciamento com recursos
Acesso a dados SQL Server através do PostgreSQL: um guia prático
Tenho um PostgreSQL e preciso acessar dados que estão no SQL Server! E agora?! Não! Não precisa entrar em pânico! Existe uma solução para isso. Digamos que em um determinado
Opinião: Em Defesa de IAs Generativas Open Source – Questão de Soberania Digital para o Brasil
Parte desse texto foi escrito com base na experiência da 4Linux e também do debate em Davos – “Open Source AI Infrastructure Ecosystem | AI House Davos 2025” com a







