Structured log là log ghi ra dưới dạng dữ liệu có trường (thường là JSON) thay vì một câu văn xuôi.
Nhờ đó hệ thống thu thập log có thể lọc và tổng hợp theo trường mà không cần regex mong manh.
{"ts":"2026-08-06T07:12:03Z","level":"error","service":"checkout",
"request_id":"c1f2...","user_id":"u_88","event":"payment_failed",
"gateway":"sepay","duration_ms":3021,"err":"upstream timeout"}So với logger.info("payment failed for user u_88 after 3021ms") — truy vấn level=error AND gateway=sepay chạy được ngay, còn câu văn xuôi thì phải parse.
Correlation id giải quyết việc một request người dùng chạy qua nhiều service:
1. Edge (gateway hoặc service đầu tiên) sinh một id nếu client chưa gửi, đặt vào header — chuẩn hiện nay là traceparent của W3C Trace Context, nhiều hệ cũ dùng X-Request-Id.
2. Mọi service nhận header đó, ghi vào mọi dòng log của mình, và truyền tiếp khi gọi service khác.
3. Khi điều tra, lọc theo một id là ghép được toàn bộ chuỗi log của đúng request đó.
Điểm hay quên: id phải được truyền qua cả worker nền và message queue, không chỉ HTTP — nếu không, chuỗi log đứt ngay tại hàng đợi.