Depois de fechar o Reporting Service, o desafio no Day 11 do #30DiasJava foi garantir rastreabilidade ponta a ponta. O resultado é um Logging Service que empacota correlação distribuída, mascaramento de PII e ingestão centralizada em um starter pronto para qualquer microserviço Spring Boot.

🧰 What went live

  • Starter de logging (logging-service-starter) com SLF4J + Logback, layouts JSON e appenders STDOUT/FILE/GELF.
  • Correlation ID + Session ID propagados via filtros Servlet, RestTemplate e WebClient, inclusive em chamadas assíncronas.
  • Log context com MDC (requestId, tenant, userId, featureFlag, endpoint) aplicado automaticamente em cada request.
  • Mascaramento e redaction (@SensitiveLog) para PII (email, taxId) antes dos logs saírem do pod.
  • Shipping centralizado: Filebeat → Logstash → Elasticsearch → Kibana, com dashboards “Error Heatmap” e “Slow Requests”.

💡 Why it matters

  • Auditoria consegue seguir um request em segundos — do mobile ao banco.
  • Times de incident response ganham um atalho: requestId → stacktrace → fix.
  • Logs estruturados viram insumo para métricas, alertas e análise de produto.

📚 Deep dive (+ code)


🧩 Implementation Notes

  • Logback JSON encoder (net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder) com providers (mdc, arguments, stackTrace).
  • Config as code: logging/enouveau-logback.xml incluído em todos os serviços via Spring Boot auto-config.
  • Async logging com AsyncAppender para não bloquear threads HTTP.
  • Dynamic log level: endpoint /actuator/loggers protegido via RBAC para ajustar níveis em runtime.
  • Metrics: logging.events.total{level="ERROR"}, logging.events.dropped expostos via Micrometer + Prometheus.

✅ Daily checklist

  • Filebeat/Logstash/Elasticsearch verdes (health check) e índices rotacionando (log-enouveau-YYYY.MM.DD).
  • Alertas (logging.error.count > 50 em 5m) sendo enviados ao Slack/Teams.
  • Dashboards Kibana revisados com o time de suporte e SRE.

Next episodeDay 12/30 — Monitoring Service with Prometheus & Grafana