Autorzy rozwiązania Spring Boot bardzo mocno stawiają na fakt, iż aplikacja napisana z wykorzystaniem ich frameworku powinna być production-ready. Zgodnie z 12 factor manifesto, apikacja sama w sobie powinna dostarczać informacji na temat swojej telemetrii. Projekt actuator jest mechanizmem zbliżającym nas do pojęcia production-ready. Dostarcza on podstawowe metryki oraz informacje na temat aplikacji.
Zależności
Standardowo zaczniemy od dodania nowej zależności do naszego projektu, tym razem będzie to spring-boot-starter-actuator
:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
Domyślnie
Dodanie powyższej zależności do naszego projektu sprawiło, iż pojawią się nowe funkcjonalności. Wszystkie dodatkowe informacje o aplikacji dostępne pod adresem /actuator
. Domyślnie włączonymi adresami są /info
oraz /health
.
Health
Adres /health
zwraca informacje na temat statusu aplikacji w postaci:
- {
- "status": "UP" // jeśli aplikacja działa poprawnie
- }
- {
- "status": "DOWN" // jeśli aplikacja działa niepoprawnie
- }
Info
Adres /info
zwraca ustawione przez nas informacje o aplikacji (domyślnie zwraca pusty JSON). Aby ustawić wartości pod adresem /info
wystarczy w pliku application.properties
dodać wpis:
- #Zawartość adresu /info
- info.app.name=Code Couple Application
- info.app.description=This is my first code couple application
- info.app.version=1.0.0
- #Wszystko co jest po kluczu info
- info.dowolny.klucz=wartosc
Wszystko co dostępne jest po kluczu info
dodawane jest do adresu /info
. W wyniku wywołania adresu /actuator/info
otrzymamy:
- {
- "app": {
- "name": "Code Couple Application",
- "description": "This is my first code couple application",
- "version": "1.0.0"
- },
- "dowolny": {
- "klucz": "wartosc"
- }
- }
Jest to bardzo przydatny adres, jeśli chcemy poinformować innych o aktualnej wersji lub gdy przygotowujemy dashboard zbierający informacje o aplikacjach.
Actuator
Jednakże, projekt actuator to nie tylko /info
oraz /health
. Projekt ten oferuje bardzo dużą ilość metryk i informacji na temat aplikacji. Dostępne adresy to (poniżej zostało wypisane tylko kilka najważniejszych):
/beans
– zwraca wszystkie dostępne Bean’y w naszej aplikacji/conditions
– zwraca wszystkie autokonfiguracje/flyway
– zwraca informacje na temat migracji bazy z wykorzystaniem technologii Flyway/liquibase
– zwraca informacje na temat migracji bazy z wykorzystaniem technologii Liquibase/env
– zwraca wszystkie zmienne środowiskowe/heapdump
– zwraca zrzut pamięci naszej JVM’owej aplikacji/threaddump
– zwraca zrzut wątków naszej JVM’owej aplikacji/scheduledtasks
– zwraca informacje o zadaniach wykonywanych w tle w naszej aplikacji/sessions
– zwraca informacje o sesjach HTTP z wykorzystaniem technologii Spring Session/metrics
– zwraca metryki aplikacji/prometheus
– zwraca metryki aplikacji dostosowane do aplikacji Prometheus/shutdown
– wyłącza aplikację poprzez żądanie POST (domyślnie jest wyłączony)
Dostępność
Jak pisałem w poprzednim akapicie, domyślnie włączonymi adresami są /health
oraz /info
. Jeśli chcemy włączyć wszystkie lub kilka szczególnych adresów to musimy użyć wpisu management.endpoints.web.exposure.include
:
- #Włącza wszystkie adresy
- management.endpoints.web.exposure.include=*
- #Włącza tylko wybrane adresy
- management.endpoints.web.exposure.include=info, metrics
- #Wyłącza adres shutdown
- management.endpoints.web.exposure.exclude=shutdown
Dodatkowo poprzez plik application.properties
możemy ustawić:
- #Zmiana ścieżki bazowej /actuator
- management.endpoints.web.base-path=/
- #Włącza wszystkie usługi
- management.endpoints.enabled-by-default=true
- #Wyłączenie adresu metrics
- management.endpoint.metrics.enabled=false
- #Akceptowane nagłówki
- management.endpoints.web.cors.allowed-headers=*
Całą listę dostępnych właściwości znajdziecie pod https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html.
Github
Całość jak zawsze na Github’ie.