Jednym z głównych założeń Spring Boot jest to, aby framework był production ready. Autorzy frameworku rozumieją przez production ready między innymi to, że aplikacja będzie dostarczać metryki out-of-the-box. Aby dodać metryki do swojego projektu, wystarczy dopisać jedną pozycję do zależności Maven. Jest to biblioteka Actuator.
Zacznijmy od dodania zależności Maven, czyli spring-boot-starter-actuator:
1 | <dependencies> |
Na wstępie warto wspomnieć, że endpointy z pakietu Actuator mogą być sensitive. Oznacza to, że są dostępne z lub bez potrzeby logowania do aplikacji. Dziś opiszę te, które są dostępne bez logowania, czyli są insensitive. Tymi endpointami są:
/info/health
Info
Pierwszym omawianym endpointem jest /info. Zwraca on informacje na temat naszej aplikacji:
1 | {} |
Otrzymaliśmy pusty wynik, ponieważ nie zdefiniowaliśmy w application.properties żadnych informacji o aplikacji. Aby dodać własne dane, musimy poprzedzić je słowem info:
1 | info.site.name=CodeCouple.pl |
W rezultacie otrzymujemy:
1 | { |
Możemy także rozszerzyć informacje o naszej aplikacji, wyświetlając dane na temat build’a (z pliku META-INF/build-info.properties) oraz dane z GIT’a (z pliku git.properties). Aby to osiągnąć, musimy dodać odpowiednie kroki do budowania. Krok build-info automatycznie doda plik build-info.properties. Natomiast plugin git-commit-id-plugin jest odpowiedzialny za stworzenie pliku git.properties.
1 | <build> |
W rezultacie otrzymamy:
1 | { |
Możemy jeszcze bardziej rozszerzyć zbiór informacji z GIT’a. Wystarczy w application.properties dodać wpis:
1 | management.info.git.mode=full |
W łatwy sposób możemy dodać własne informacje w kodzie, jeśli z jakichś przyczyn nie chcemy, aby były one zmieniane w application.properties. Wystarczy zarejestrować komponent (@Component), który implementuje interfejs InfoContributor:
1 |
|
Nasze informacje zostaną zwrócone w postaci:
1 | { |
Istnieje także możliwość przekazania informacji z Mavena. Wartość taką musimy umieścić pomiędzy znakami @:
1 | info.app.encoding=@project.build.sourceEncoding@ |
Health
Drugim omawianym endpointem jest /health, czyli health checker. Zwraca on informacje na temat statusu naszej aplikacji:
1 | {"status":"UP"} |
Po zalogowaniu się do aplikacji dostajemy więcej informacji niż tylko prosty status. Otrzymujemy także stan naszej bazy danych (jeśli z niej korzystamy):
1 | { |
Jeśli z jakichś przyczyn chcesz udostępnić informacje o używanej bazie danych bez potrzeby logowania, wystarczy dodać jeden wpis:
1 | endpoints.health.sensitive=false |
Status naszej aplikacji jest cache’owany co 1000 milisekund, dzięki czemu unikniemy ataku typu DoS. Możemy zmienić tę wartość, używając:
1 | endpoints.health.time-to-live |
Podobnie jak w przypadku InfoContributor, możemy stworzyć własny HealthIndicator:
1 |
|
To tylko dwa endpointy, a już możemy zawrzeć w nich tyle informacji! W następnym wpisie pokażę wam inne endpointy z pakietu Actuator, które są dostępne dopiero po zalogowaniu, oraz ich różne ciekawe właściwości.
