OpenTelemetry, um dashboard RED, um trace atravessando o Kafka e um SLO que aciona na hora certa
A venda relâmpago está no ar e o suporte está lotado. É com todos os fãs ou com alguns? Qual dos sete serviços? O banco, o pool, o Kafka, o provedor de e-mail?
otel-lgtm
Backend de desenvolvimento em uma imagem; produção o troca por sistemas separados — os serviços continuam falando OTLP.
sh scripts/get-otel-agent.sh # downloads infra/otel/opentelemetry-javaagent.jar (v2.32.0) ```yaml x-otel: &otel JAVA_TOOL_OPTIONS: -javaagent:/otel/opentelemetry-javaagent.jar OTEL_JAVAAGENT_ENABLED: ${OTEL_ON:-true} OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-lgtm:4318
Cada serviço Java monta ./infra/otel:/otel:ro e adiciona <<: *otel e o seu OTEL_SERVICE_NAME. As imagens não mudam.
./infra/otel:/otel:ro
<<: *otel
OTEL_SERVICE_NAME
@Scheduled
http_server_request_duration_seconds_bucket{service_name, http_route, http_response_status_code}
trace_id
span_id
http_route
/catalog/events/{id}
Um pedido produz dois traces sem relação: POST /orders e, depois, relay → Kafka → notification.
POST /orders
notification
traceparent
V2__outbox_traceparent.sql
kafka.send
infra/grafana/dashboards/boxoffice-red.json
sum by (service_name) (rate(…_count[$__rate_interval])) # Rate rate(…_count{http_response_status_code=~"5.."}) / rate(…_count) # Errors (ratio) histogram_quantile(0.95, sum by (service_name, le) (rate(…_bucket[…]))) # Duration db_client_connections_pending_requests # Saturation
Nunca tire a média de percentis. Some as taxas dos buckets e depois calcule o quantil.
catalog
/actuator
infra/grafana/alerting/slo-catalog.yaml
$A > 14.4 && $B > 14.4
Tráfego constante, uma hora saudável, depois docker compose stop db. Quando a regra de queima rápida aciona?
docker compose stop db
for: 1m
OTEL_ON
parentbased_traceidratio
user_id
db
k6 constant-arrival-rate em GET /catalog/events/{id} pela borda; docker stats durante a execução.
constant-arrival-rate
GET /catalog/events/{id}
docker stats
observability-stack
chaos
Você não conserta o que não mede — e não mede o que não instrumentou.
Roteiro: (1) as perguntas que o k6 não responde; (2) otel-lgtm e o agente Java; (3) o outbox quebra o trace; (4) RED e USE como código; (5) SLO, orçamento de erros, taxa de queima; (6) disparar o alerta; (7) medir.