Spring Boot daje nam całkiem fajną możliwość do tego, aby monitorować nasze aplikacje. W tym celu została wprowadzona funkcjonalność
Actuatora,
który pozwala na zbieranie metryk, analizę ruchu oraz wykonanie innych ciekawych zadań lub obserwacji. Aby użyć
Actuator-a wystarczy podpiąć
odpowiednią zależność w pomie:
Powinniśmy też od razu rozpatrzyć dodanie następującej konfiguracji w pliku
application.properties:
W ten sposób określamy
port, na którym będzie działała usługa. Ze względów bezpieczeństwa dobrze jest wybrać port inny niż ten, na którym pracuje nasza aplikacja.
Dodatkowo możemy określić
adres ip, z którego będzie można korzystać z usługi. To również jest zalecane.
Podstawowe endpointy
Zobaczmy teraz jakie są podstawowe endpointy
Actuatora pod kątem jego zdolności do obserwacji aplikacji Spring Boot.
-
health
Informuje nas (za pomocą statusu) o tym, czy nasza aplikacja w ogóle żyje. Podawany zakres informacji jest różny w zależności od tego czy jesteśmy uwierzytelnieni, czy nie:
-
info
Wyświetla informacje o aplikacji. Taka informacja musi być jednak przygotowana przez nas.
Jeśli nie ustawimy dodatkowych własności w pliku application.properties, na przykład:
wówczas zobaczymy jedynie pustą stronę:
-
metrics
Wyświetla całkiem pokaźny zbiór informacji o stanie zasobów, na przykład:
Dosyć istotnym wskaźnikiem może się okazać na przykład liczba pracujących wątków.
-
trace
Wyświetla informacje na temat ostatniego ruchu w naszej aplikacji:
Możemy podejrzeć w ten sposób żądania i odpowiedzi. Dostaniemy dzięki temu wiele cennych informacji, na przykład jaka przyszła odpowiedź na wywołanie konkretnego żądania.
Pozwala to na szybką zdalną diagnozę ewentualnego problemu, o którym się dowiedzieliśmy.
-
env
Wyświetla całą masę informacji o środowisku, w którym jest uruchomiona aplikacja, jak również konfigurację samej aplikacji:
Widzimy na przykład z jakimi profilami nasza aplikacja została uruchomiona, albo też jakie ustawienia posiada załadowany
plik properties.
-
beans
Wyświetla informacje o beanach jakie działają w aplikacji. Możemy nawet zobaczyć jaki jest scope danego beana:
Oczywiście większość przedstawionych informacji zawiera dosyć istotne dane, dlatego powinniśmy zabezpieczyć nasze endpointy, co najmniej tak jak wspominaliśmy na początku rozdziału.
O szerszych zabezpieczeniach piszemy w ostatnim paragrafie.
Teraz zobaczmy jak wygląda tworzenie własnego endpointa!
Własny endpoint
Przygotowanie customowego endpointa jest bardzo proste. Załóżmy, że mamy plik na dysku, którego zawartość musimy monitorować i z jakiegoś powodu chcemy to robić ręcznie.
Wtedy wystarczy jedynie stworzyć klasę na wzór poniższej:
Klasa to zwykły komponent Springa, a więc na jej podstawie bez problemu zostanie stworzony obiekt, który będzie dostępny z poziomu kontenera.
Ważne jest, aby implementowała ona interfejs
Endpoint oraz posiadała odpowiednio zaimplementowane metody
tego interfejsu. Jedną z nich jest
getId, która musi zwracać nazwę identyfikującą nasz endpoint. Po tej nazwie będziemy go wywoływać w przeglądarce:
Dodatkowa konfiguracja Actuatora
Poza ustawieniami dotyczącymi portu oraz adresu, z którego możemy uruchomić usługę,
Actuator posiada jeszcze kilka innych opcji konfiguracyjnych.
Oczywiście wszystko ustawimy bez problemu z poziomu pliku
application.properties.
-
endpoints.sensitive=true lub false
Ustawia wszystkie endpointy jako wrażliwe (wymagające uwierzytelnienia) lub nie (na odwrót).
Nazwę użytkownika oraz hasło możemy też ustawić z poziomu pliku application.properties:
-
endpoints.<nazwa endpointa>.sensitive=true lub false
Ustawia wybrany endpoint jako wrażliwy lub nie. Możemy na przykład najpierw ustawić wszystkie endpointy jako wrażliwe endpoints.sensitive=true,
a następnie wyłączyć z tego endpoint, np. info za pomocą: endpoints.info.sensitive=false.
-
endpoints.enabled=true lub false
Włącza lub wyłącza wszystkie endpointy.
-
endpoints.<nazwa endpointa>.enabled=true lub false
Podobna zależność jak w przypadku wrażliwości.
Na koniec...
Zgodnie z tytułem rozdziału, wszystko co tutaj napisaliśmy jest oparte o Spring Boot-a w wersji 1.x.
Jeśli interesują Was zmiany, jakie zaszły w
Actuatorze w Spring Boot 2.x. to zapraszamy do kolejnego rozdziału.
Linki
https://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/html/production-ready-endpoints.html