Agente de Banco de Dados

Colete métricas de banco de dados sem alterar código. Suporta PostgreSQL, MySQL, MongoDB, Redis, Cassandra, Elasticsearch, ClickHouse, CockroachDB e SQLite.

Visão geral

O Obtrace Database Agent é um binário standalone que conecta nos seus bancos de dados, coleta métricas nativas de performance e envia como telemetria OTLP para o endpoint de ingestão do Obtrace. Sem alteração de código, sem sidecars injetados na aplicação -- basta apontar o agent pros seus bancos e ele cuida do resto.

Instalação

Docker (recomendado)

docker run -d \
  --name obtrace-db-agent \
  -e OBTRACE_INGEST_URL=https://ingest.obtrace.ai \
  -e OBTRACE_API_KEY=sua-api-key \
  -e DB_CONNECTIONS='[{"type":"postgres","dsn":"postgres://user:pass@host:5432/mydb","name":"primary"}]' \
  ghcr.io/obtrace/db-agent:latest

Binário

go install github.com/obtrace/db-agent@latest

A partir do código fonte

git clone https://github.com/obtrace/db-agent.git
cd db-agent
go build -o db-agent .

Configuração

Defina estas variáveis de ambiente:

VariávelObrigatóriaDescriçãoPadrão
OBTRACE_API_KEYSimAPI key do projeto--
DB_CONNECTIONSSimJSON array de conexões de banco--
OBTRACE_INGEST_URLNãoURL do endpoint de ingestãohttp://localhost:8080
OBTRACE_APP_IDNãoIdentificador da aplicaçãodb-agent
OBTRACE_ENVNãoNome do ambienteprod
OBTRACE_TENANT_IDNãoIdentificador do tenant--
OBTRACE_PROJECT_IDNãoIdentificador do projeto--
COLLECT_INTERVAL_MSNãoIntervalo de coleta (ms)15000

Bancos suportados

BancoValor do tipoFormato da DSNFonte de métricas
PostgreSQLpostgrespostgres://user:pass@host:5432/dbpg_stat_database, pg_stat_activity
MySQLmysqluser:pass@tcp(host:3306)/dbSHOW GLOBAL STATUS
MongoDBmongodbmongodb://user:pass@host:27017/adminserverStatus
Redisredisredis://:pass@host:6379/0INFO, SLOWLOG
Cassandracassandrahttp://host:8778/jolokiaJolokia JMX / Prometheus
Elasticsearchelasticsearchhttp://host:9200_cluster/health, _nodes/stats
ClickHouseclickhousehttp://user:pass@host:8123system.metrics, system.events
CockroachDBcockroachdbhttp://host:8080_status/vars
SQLitesqlite/path/to/db.sqlitePRAGMA queries

Início Rápido com Docker Compose

Monitore um PostgreSQL e um Redis:

version: "3.8"
services:
  postgres:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: secret
    ports:
      - "5432:5432"
 
  redis:
    image: redis:7
    ports:
      - "6379:6379"
 
  obtrace-db-agent:
    image: ghcr.io/obtrace/db-agent:latest
    depends_on:
      - postgres
      - redis
    environment:
      OBTRACE_INGEST_URL: https://ingest.obtrace.ai
      OBTRACE_API_KEY: ${OBTRACE_API_KEY}
      OBTRACE_ENV: staging
      DB_CONNECTIONS: >-
        [
          {"type": "postgres", "dsn": "postgres://postgres:secret@postgres:5432/postgres?sslmode=disable", "name": "primary"},
          {"type": "redis", "dsn": "redis://redis:6379/0", "name": "cache"}
        ]
export OBTRACE_API_KEY=obt_live_abc123
docker compose up -d

Referência de métricas

PostgreSQL

MétricaDescrição
db.postgres.connections.activeConexões backend ativas
db.postgres.connections.idleConexões idle
db.postgres.connections.waitingConexões aguardando locks
db.postgres.cache_hit_ratioTaxa de hit do buffer cache (0-1)
db.postgres.deadlocksTotal de deadlocks detectados
db.postgres.database_size_bytesTamanho total do banco
db.postgres.longest_query_secondsDuração da query mais longa em execução
db.postgres.table.dead_tuplesDead tuples por tabela (top 10)
db.postgres.query.avg_time_msTempo médio de query (pg_stat_statements)

MySQL

MétricaDescrição
db.mysql.connections.currentThreads conectadas
db.mysql.connections.runningThreads executando
db.mysql.queries.totalTotal de queries
db.mysql.queries.slowQueries lentas
db.mysql.innodb.buffer_pool_hit_ratioTaxa de hit do buffer pool InnoDB
db.mysql.innodb.row_lock_waitsEventos de espera por row lock

MongoDB

MétricaDescrição
db.mongodb.connections.currentConexões atuais
db.mongodb.opcounters.queryOperações de query
db.mongodb.memory.resident_mbMemória residente
db.mongodb.replication.lag_secondsLag de replicação

Redis

MétricaDescrição
db.redis.connections.connectedClientes conectados
db.redis.memory.used_bytesUso de memória
db.redis.keyspace.hit_ratioTaxa de hit do keyspace
db.redis.commands.per_secondOperações por segundo
db.redis.evictionsKeys removidas por eviction

Cassandra

MétricaDescrição
db.cassandra.read_latency_msLatência de leitura do cliente
db.cassandra.write_latency_msLatência de escrita do cliente
db.cassandra.compactions_pendingCompactações pendentes
db.cassandra.connections.activeConexões ativas

Elasticsearch

MétricaDescrição
db.elasticsearch.cluster.statusSaúde do cluster (0=green, 1=yellow, 2=red)
db.elasticsearch.cluster.shards.unassignedShards não atribuídos
db.elasticsearch.jvm.heap_used_bytesUso de heap JVM
db.elasticsearch.indices.search_latency_msLatência média de busca

ClickHouse

MétricaDescrição
db.clickhouse.queries.activeQueries em execução
db.clickhouse.queries.failedQueries com falha
db.clickhouse.memory.tracked_bytesMemória rastreada
db.clickhouse.parts.activeData parts ativas

CockroachDB

MétricaDescrição
db.cockroachdb.sql.query_countTotal de queries SQL
db.cockroachdb.sql.latency_p99Latência SQL (p99)
db.cockroachdb.ranges.unavailableRanges indisponíveis
db.cockroachdb.liveness.live_nodesNodes ativos

SQLite

MétricaDescrição
db.sqlite.database_size_bytesTamanho do arquivo do banco
db.sqlite.page_sizeTamanho da página
db.sqlite.cache_size_pagesTamanho do cache

Fortalecimento para produção

  1. Use credenciais read-only para todos os bancos monitorados.
  2. Configure o intervalo de coleta entre 15-60 segundos para workloads de produção.
  3. Defina limites de recursos do container -- 64MB de memória é suficiente para a maioria dos setups.
  4. O agent limita a 2 conexões por banco para minimizar overhead.
  5. Armazene API keys em secret managers, nunca em arquivos de config em texto plano.

Solução de Problemas

  • 401 do ingest: Verifique se OBTRACE_API_KEY corresponde ao seu projeto.
  • Sem métricas: Confira formato da DSN, acesso de rede e permissões do usuário do banco.
  • Memória alta: Reduza a quantidade de DB_CONNECTIONS ou aumente COLLECT_INTERVAL_MS.
  • Collector pulado: Verifique os logs do agent para o erro específico (DSN inválida, falha de auth, rede).
  • pg_stat_statements ausente: Instale a extensão com CREATE EXTENSION pg_stat_statements.

Lista de verificação

  • Métricas de banco aparecem no dashboard do Obtrace dentro de um intervalo de coleta
  • Sem erros 401/403 nos logs do agent
  • Memória do agent fica abaixo de 64MB
  • Credenciais read-only usadas para todos os bancos

Veja também: Métricas Semânticas