Cài đặt Jaeger Tracing để theo dõi các services trong một hệ thống Microservice.

Tram Ho

Kiến trúc Microservice ngày càng trở nên phổ biến và trở thành lựa chọn hàng đầu trong quá trình phát triển phần mềm. Trong kiến trúc microservice, ứng dụng monolithic truyền thống được chia nhỏ ra thành các thành phần có thể deploy độc lập. Một ứng dụng dần trở thành một nhóm các microservice, khi bạn có hàng trăm, hàng ngàn các microservice nhỏ cùng hoạt động, sẽ không dễ dàng cho bạn nắm được các service nào đang gọi đến nhau, một request đang đi từ services nào đến service nào.

Để giải quyết vấn đề này, một kỹ thuật được đưa ra là Distributed Tracing. Distributed Tracing là một phương thức để profile và monitor ứng dụng, đặc biệt là những ứng dụng sử dụng kiến trúc microservices. Nó giúp xác định chính xác service nào khi nó xảy ra lỗi và điều gì đang gây ảnh hưởng tới performance của ứng dụng.

Jaeger Tracing là một hệ thống distributed tracing được phát triển bởi Uber. Nó được sử dụng để giám sát và xử lý sự cố.

Triển khai trên Docker Swarm

Bộ Jaeger Tracing backend gồm 3 thành phần chính là:

  • Jaeger Agent
  • Jaeger Collector: Collector sẽ thu thập từ Agent về và lưu vào DB ( Ở đây chúng ta dùng Elasticsearch, và Jaeger mới chỉ support sử dụng Elasticsearch ver 6.x)
  • Jaeger Query/ UI

File cấu hình jaeger-stack.yaml

File cấu hình cho Elasticsearch config/elasticsearch.yml:

Deploy thông qua Docker stack sử dụng command

Jaeger Collector

Jaeger Collector nhận các trace từ Jaeger Agent và đưa đúng qua một pipeline. Trong pipeline sẽ xác mình trace, đánh chỉ mục chúng, thực hiện việc chuyển đổi trace đó sang dạng thông tin có giá trị hơn và cuối cùng lưu chúng vào Elasticsearch.

Container Jaeger Collector sẽ expose ra các cổng tới máy host để các service khác sử dụng.

Tuy nhiên bên trong network elastic-jaeger, các service vẫn giao tiếp với nhau qua cổng mặc định của chúng.

Do chúng ta sử dụng Elasticsearch để làm DB nên khi dựng container lên phải define rõ --es.server-urls.

Jaeger Agent

Jaeger Agent là một network daemon có nhiệm vụ nhận các log được gửi thông qua UDP từ ứng dụng và gửi nó tới Collector. Nó được thiết kế để triển khai trên tất các các máy chủ như một thành phần của infrastructure. Jaeger Agent tóm tắt các routing và phát hiện các nút thắt từ phía client.

Đây là service chính tương tác với phần Client để nhận thông tin của ứng dụng nên nó sẽ expose ra các cổng

Config dùng để thông báo tới Agent host-port của Jaeger Collector.

Jaeger Query

Là nơi tương tác với DB để lấy dữ liệu và hiển thị lên UI.

Sử dụng Jaeger UI

Truy cập http://127.0.0.1:16686/ui/search => Chon dự án cần trace và chọn Find traces

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo