Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Mình đã giới thiệu với các bạn về HystrixHystrix Dashboard để monitor việc calling đến các service khác của một service trong hệ thống Microservices. Một vấn đề đặt ra là: chúng ta có rất nhiều service trong một hệ thống Microservices, chẳng lẽ chúng ta phải mở Hystrix Dashboard của từng service để monitor chúng? Sẽ tiện lợi hơn nếu chúng ta có thể combine Hystrix Dashboard của tất cả service vào trong một Dashboard và chỉ cần monitor Hystrix Dashboard này. Rất may là chúng ta có thể làm điều này với việc sử dụng Turbine hoặc Turbine Stream của Netflix và các wrapper của chúng từ Spring Cloud Netflix. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trước về Turbine Stream trong bài viết này các bạn nhé!

Để làm ví dụ cho bài viết này, mình sẽ tạo 3 service với 1 service có 1 request URL sẽ được gọi từ 2 service kia.

Cụ thể như sau:

Service 1 expose request URL “/hello”:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Chúng ta chỉ cần sử dụng Web dependency cho service này. Controller expose request URL “/hello” có nội dung như sau:

application.properties:

2 service gọi tới service 1 ở trên sẽ sử dụng Web, Hystrix, Actuator như sau:

Service 2:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Service2Controller:

SpringCloudTurbineService2Application:

application.properties:

Service 3

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Service3Controller:

SpringCloudTurbineService3Application:

application.properties:

Như các bạn thấy, cả 2 service 2 và 3 đều gọi tới request URL “/hello” của service 1 và tất cả chúng đều được enable hỗ trợ Circuit Breaker.

Tiếp theo, mình sẽ tạo một project riêng đóng vai trò là một Hystrix Dashboard, nếu không có Turbine các bạn chỉ có thể monitor 1 service tại một thời điểm:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

SpringCloudTurbineHystrixDashboardApplication:

application.properties:

Bây giờ nếu các bạn chạy tất cả các ứng dụng:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Request tới Hystrix Dashboard:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Nhập Hystrix Stream URL của service 2 hoặc service 3 cũng được, sau đó nhấn Monitor Stream.

Rồi request tới URL http://localhost:8083/service2-call-hello hoặc http://localhost:8084/service3-call-hello, các bạn sẽ thấy Hystrix Dashboard sẽ có kết quả như sau:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Các bạn có thể thấy là chúng ta không thể monitor nhiều service cùng một lúc trong Hystrix Dashboard được.

Bây giờ chúng ta thử sử dụng Turbine Stream các bạn nhé.



Để sử dụng Turbine Stream, các bạn cần sử dụng một MQ server để tất cả các data sẽ được gửi tới MQ server này.

Ở đây, mình sẽ sử dụng RabbitMQ server các bạn nhé! Các bạn có thể tham khảo các bài viết về cài đặt RabbitMQ với Management UI cho nó để start một RabbitMQ server cho mình.

RabbitMQ server của mình start như sau:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Username và password để access RabbitMQ này sẽ là guest/guest các bạn nhé!

OK, bây giờ chúng ta sẽ cấu hình service 2 và service 3 để chúng có thể gửi data tới MQ server.

Mình sẽ thêm vào mỗi service project các dependency như sau:

Hiện tại phiên bản mới nhất của Spring Cloud đang có vấn đề, Turbine Stream không work với phiên bản này, các bạn cần sử dụng Spring Cloud version Greenwich.M1. Hãy mở tập tin pom.xml của 2 service 2 và 3, chỉnh sửa version của Spring Cloud như sau các bạn nhé!

Cấu hình thông tin của RabbitMQ để các service này send data tới MQ server trong tập tin application.properties như sau:

Sau khi cấu hình xong phần send data tới MQ Server cho các service, các bạn cần tạo một project khác đóng vai trò là Turbine Stream, sẽ combine data trong MQ server để gửi cho Hystrix Dashboard.

Project này như sau:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Kết quả:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Trong class SpringCloudTurbineStreamApplication, các bạn hãy thêm annotation @EnableTurbineStream để hiện thực Turbine Stream. Mặc định Turbine Stream sẽ cố gắng đăng ký nó với Eureka Server nên nếu các bạn không disable đi, sẽ có nhiều lỗi xuất hiện.

Các bạn hãy disable cái này và cấu hình thông tin của RabbitMQ server trong tập tin application.properties của project này như sau:

OK, giờ hãy start tất cả các ứng dụng lên các bạn nhé:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Đi đến Hystrix Dashboard, nhập thông tin của Turbine Stream http://localhost:8989/turbine.stream, nhấn nút Monitor Stream, gọi request của 2 service 2 và 3: http://localhost:8083/service2-call-hello, http://localhost:8084/service3-call-hello, các bạn sẽ thấy kết quả như sau:

Monitor nhiều service sử dụng Hystrix Dashboard và Turbine Stream của Spring Cloud Netflix

Add Comment