Blog chia sẻ về công nghệ ...
Published on

Giải thích chi tiết và dễ hiểu về Jaeger

Authors
giai-thich-de-hieu-nhat-ve-ung-dung-jaeger

Jaeger là gì?

Jaeger là một công cụ theo dõi dấu vết (tracing) cho hệ thống phần mềm phân tán. Nó giúp bạn thấy được:

  • Request đi qua những đâu?
  • Mất bao lâu ở mỗi bước?
  • Bước nào bị lỗi?

Jaeger được phát triển bởi Uber, hiện nay là một dự án của CNCF (Cloud Native Computing Foundation).


📑 Mục Lục

  1. Tại sao cần Jaeger?
  2. Jaeger giúp theo dõi gì?
  3. Sơ đồ hoạt động của Jaeger
  4. Cách sử dụng Jaeger
  5. Tích hợp với OpenTelemetry
  6. Triển khai Jaeger trên Kubernetes
  7. Kết luận
  8. Tài nguyên tham khảo

💡 Tại sao cần Jaeger?

Trong hệ thống có nhiều dịch vụ (microservices), request đi qua rất nhiều chỗ. Khi có lỗi hoặc chậm:

  • Bạn cần biết đường đi của request.
  • Cần xác định bước nào bị nghẽn hoặc lỗi.

Jaeger giúp bạn vẽ lại toàn bộ hành trình của request, để bạn dễ dàng:

  • Debug lỗi
  • Tối ưu hiệu năng
  • Hiểu rõ cách hệ thống hoạt động

🔍 Jaeger giúp theo dõi gì?

Jaeger giúp bạn theo dõi:

  • Trace: Đường đi của một request từ đầu đến cuối.
  • Span: Mỗi bước nhỏ trong trace (gọi API, truy vấn DB,...).
  • Thời gian: Mỗi span mất bao lâu.
  • Quan hệ cha-con giữa các span.

🧭 Sơ đồ hoạt động của Jaeger

   [Ứng dụng A]      [Ứng dụng B]
       |                  |
   (OTel SDK hoặc Jaeger client)
       |                  |
       +--------+---------+
                |
         [Jaeger Agent] (thu thập dữ liệu)
                |
         [Jaeger Collector] (xử lý và lưu trữ)
                |
         [Jaeger UI] (giao diện để xem trace)

⚙️ Cách sử dụng Jaeger

Bước 1: Gắn thư viện Jaeger client vào ứng dụng

Ví dụ: ứng dụng Python

pip install jaeger-client opentracing

Bước 2: Gửi trace về Jaeger

from jaeger_client import Config

config = Config(config={ 'sampler': {'type': 'const', 'param': 1}, 'logging': True }, service_name='don-hang')
tracer = config.initialize_tracer()

with tracer.start_span('xu-ly-don-hang'):
    print("Đang xử lý đơn hàng...")

tracer.close()

Bước 3: Mở Jaeger UI để xem trace

  • Truy cập http://localhost:16686
  • Chọn service → Xem danh sách trace → Click để xem chi tiết

🔗 Tích hợp với OpenTelemetry

Jaeger hoạt động rất tốt với OpenTelemetry. Thay vì dùng Jaeger client trực tiếp, bạn có thể:

  1. Dùng OpenTelemetry SDK trong ứng dụng
  2. Gửi trace bằng giao thức OTLP
  3. Collector sẽ export trace tới Jaeger backend

Ví dụ trong cấu hình Collector:

exporters:
  jaeger:
    endpoint: "jaeger-collector:14250"
    tls:
      insecure: true

🚀 Triển khai Jaeger trên Kubernetes

Bạn có thể triển khai nhanh bằng Helm:

helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm install jaeger jaegertracing/jaeger

Sau khi cài:

  • Collector sẽ chạy
  • UI sẵn sàng tại http://<your-node>:16686
  • Bạn có thể gửi trace từ ứng dụng hoặc từ OpenTelemetry Collector

✅ Kết luận

Jaeger là công cụ tuyệt vời giúp bạn hiểu rõ hành trình của request trong hệ thống microservices. Với Jaeger, bạn có thể:

  • Phân tích lỗi nhanh chóng
  • Tối ưu hiệu năng theo từng bước
  • Kết hợp với OpenTelemetry để quản lý trace hiệu quả

📚 Tài nguyên tham khảo