Spring Boot Actuator là một công cụ của Spring cho phép chúng ta có thể monitor ứng dụng của chúng ta trên môi trường production mà chúng ta không cần code gì cả. Nó sẽ expose các thông tin về của ứng dụng, trạng thái của nó như thế nào, các số liệu liên quan đến ứng dụng,… Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!
Đầu tiên, mình sẽ tạo một Spring Boot project với Actuator và Web dependency sử dụng Spring Initializr, sau đó thì import vào IntelliJ IDE như sau:
Bây giờ, mình sẽ start Spring Boot project này lên rồi đến địa chỉ http://localhost:8080/actuator, các bạn sẽ thấy kết quả như sau:
Như các bạn thấy, mặc dù mình không làm gì cả nhưng ứng dụng của mình cũng tự expose ra một số API bắt đầu với “/actuator” giúp chúng ta lấy thông tin về ứng dụng của mình.
Đối với phiên bản cũ 1.x, Actuator còn expose nhiều API khác nữa nhưng từ version 2.x, chúng đã bị disable đi rất nhiều. Các bạn có thể enable những API này bằng cách khai báo một property tên là management.endpoints.web.exposure.include trong tập tin application.properies của ứng dụng với giá trị là tên API mà chúng ta cần enable. Danh sách các API này, các bạn có thể tìm thấy ở đây https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints
Để enable tất cả các API, các bạn có thể config giá trị của property management.endpoints.web.exposure.include như sau:
1 |
management.endpoints.web.exposure.include=* |
Chạy lại ứng dụng rồi access tới địa chỉ http://localhost:8080/actuator, các bạn sẽ thấy toàn bộ các API mà Actuator expose, được hiển thị như sau:
Ở đây, mình sẽ nói thêm với các bạn một số thông tin về API “/actuator/health” mà mặc định Actuator enable nó từ phiên bản 2.x và API “/actuator/info”. Các API khác, các bạn có thể tìm hiểu thêm theo nhu cầu của mình các bạn nhé!
Đầu tiên là API “/actuator/health”.
API này được sử dụng để cho các ứng dụng khác có thể kiểm tra trạng thái của ứng dụng của chúng ta là đang chạy bình thường hay là đã stop rồi. Các bạn có thể click vào API “/actuator/health” để xem thông tin mà nó cung cấp cho chúng ta.
Mặc định nó chỉ hiển thị thông tin là status với giá trị là UP nếu ứng dụng của chúng ta vẫn đang chạy bình thường, còn ngược lại nếu có bất kỳ vấn đề gì thì status sẽ là DOWN.
Chúng ta có thể implement interface HealthIndicator để chỉ định khi nào ứng dụng của chúng ta là DOWN và khi nào là UP. Ví dụ như mình có class AppHealthIndicator implement interface HealthIndicator như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.huongdanjava.springbootactuator; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class AppHealthIndicator implements HealthIndicator { @Override public Health health() { return Health.down().build(); } } |
thì khi chạy lại và access tới API “/actuator/health”, ứng dụng của chúng ta sẽ luôn luôn trả về status là DOWN.
Tiếp theo chúng ta sẽ nói về API “/actuator/info”.
Mặc định nếu các bạn không enable thông tin biến môi trường sử dụng property management.info.env.enabled và khai báo các thông tin về ứng dụng của chúng ta sử dụng các property name bắt đầu với “info” thì khi access tới API này, không thông tin nào được trả về cả.
Nhưng nếu giờ mình enable để hiển thị thông tin biến môi trường:
1 |
management.info.env.enabled=true |
và cấu hình một số thông tin cho ví dụ của chúng ta:
1 2 3 |
info.app.name=Spring Boot Actuator info.app.description=An explanation about Spring Boot Actuator info.app.version=1.0.0 |
thì khi chạy lại ứng dụng và access tới API “/actuator/info”, các bạn sẽ thấy kết quả như sau: