Nâng CaoJava iconJava

Structured logging với correlation ID hoạt động như thế nào trong microservices?

Mục tiêu: khi một request đi qua 5 services, log của tất cả services liên quan phải filter được theo một key duy nhất. Cơ chế: MDC (Mapped Diagnostic Context) là thread-local map chứa metadata như traceId, spanId, requestId. Mỗi service log theo format JSON: {"traceId":"abc123", "spanId":"def456", "userId":"u1", "message":"Processing order"}. OpenTelemetry tự populate MDC khi dùng Micrometer. Centralize log: ELK Stack (Elasticsearch-Logstash-Kibana) hoặc Grafana Loki nhận log từ tất cả services, cho phép query traceId = "abc123" để xem toàn bộ flow.

Lợi ích: giảm MTTR (Mean Time to Resolution) từ giờ xuống phút. Setup: Logback với JSON encoder (logstash-logback-encoder) + MDC auto-injection.

Lưu ý Virtual Threads (Spring Boot 3.2+): MDC là thread-local — có thể bị mất hoặc leak context khi dùng Virtual Threads. Thay thế: dùng Micrometer Observation API để propagate context đúng cách thay vì raw MDC.

Xem toàn bộ Java cùng filter theo level & chủ đề con.

Mở danh sách Java