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, host ou 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 Scans que 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_statements instalada
  • Módulo postgresql-contrib disponí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étricaDescriçãoLimite de Alerta Sugerido
postgresql.connectionsTotal de conexões ativas> 80% do max_connections
postgresql.percent_usage_connections% das conexões em uso> 75%
postgresql.bgwriter.checkpoints_timedCheckpoints agendadosMonitorar tendência
postgresql.bgwriter.checkpoints_requestedCheckpoints forçados> 10/min (pode indicar sobrecarga)
postgresql.replication.delayLag de replicação (bytes)> 50 MB em produção
postgresql.index_scansUso de índicesQueda brusca indica problema
postgresql.seq_scansSequential scansAumento indica queries sem índice
postgresql.deadlocksDeadlocks por segundo> 0 (qualquer valor deve ser investigado)
postgresql.cache_hitTaxa de cache hit< 95% indica pressão de memória

MySQL

MétricaDescriçãoLimite de Alerta Sugerido
mysql.performance.threads_connectedThreads conectadas> 80% do max_connections
mysql.innodb.buffer_pool_read_requestsReads do buffer poolMonitorar junto com reads
mysql.innodb.row_lock_waitsEsperas por row lock> 0 frequente indica contention
mysql.performance.slow_queriesQueries lentas/segundo> 5/s merece atenção
mysql.replication.seconds_behind_masterLag de replicação (s)> 30s em produção
mysql.net.max_connections_seenPico de conexõesMonitorar 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

  1. O APM instrumenta a aplicação (via SDK Datadog para Python, Java, Node.js, Go, Ruby, etc.)
  2. O DBM captura as queries e seus metadados
  3. 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:

PlanoPreço EstimadoInclui
Infrastructure Monitoring~$15/host/mêsMétricas de host, sem DBM
Database Monitoring~$70/host/mêsDBM completo (adicional ao infra)
Bundle mínimo~$85/host/mêsInfra + 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


Anterior Claude Mythos: avanço real ou só mais uma narrativa bem vendida no mercado de IA
Próxima LLM Open Source é a melhor estratégia para seu negócio

About author

Adalberto Monteiro Junior
Adalberto Monteiro Junior 2 posts

Adalberto Monteiro Junior atua como Analista de Infraestrutura em Software Livre, formado em Sistemas de Informação pela FIAP. Possui experiência em ferramentas voltadas para aplicação da cultura Devops, com ênfase em contêineres, detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux, e Devops.

View all posts by this author →

Você pode gostar também