Logging & Tracing

Logging & Tracing

Khi triển khai hệ thống phân tán hay kiến trúc microservices, đối với mình để mà nói Logging và Tracing thật sự là rất quan trọng, nó giúp theo dõi luồng đi của request, giám sát và gỡ lỗi một cách rất hiệu quả.

Logging

Logging là quá trình ghi lại thông tin về hoạt động của ứng dụng, giúp theo dõi lỗi, hiệu suất, và các sự kiện quan trọng trong hệ thống.

Ví dụ:

  • Ghi nhận request/response của API.

  • Lưu lại vết các xử lý được gọi tới hoặc các lỗi phát sinh khi gọi service.

  • Ghi nhận hiệu suất xử lý của từng API/microservice.

Tracing

Tracing là quá trình theo dõi luồng thực thi của một request qua nhiều microservices để hiểu được hành trình của request.

Ví dụ:

  • Một request từ frontend đến API Gateway, sau đó đi qua nhiều microservices, mỗi bước được ghi nhận lại.

  • Nếu có lỗi xảy ra trong một service nào đó, tracing giúp xác định điểm thất bại.

Cơ chế hoạt động

  • Logging: Ghi log tại từng microservice thông qua các thư viện logging (Logback, Log4j, SLF4J,...) hoặc gửi log đến hệ thống tập trung (ELK, Loki, CloudWatch,...).

  • Tracing: Gán một Trace ID duy nhất cho mỗi request, sau đó truyền Trace ID này qua tất cả các microservices để theo dõi toàn bộ luồng request.

Trường hợp sử dụng

  • Debug lỗi hệ thống

  • Giám sát hiệu suất

  • Theo dõi request qua nhiều microservices

  • Phân tích nguyên nhân lỗi

  • Audit logs (Lưu vết lịch sử truy cập)

Cách triển khai

Logging

Ví dụ: Sử dụng Logback với Spring Boot, sau đó sử dụng ELK Stack để quản lý log tập trung

Tracing

Ví dụ: Sử dụng Spring Cloud Sleuth để tự động gán Trace ID, sau đó kết hợp với Zipkin để theo dõi tracing