Monitoring systemu pomaga w ocenie jego kondycji i określeniu, czy działa poprawie, pozwala na określenie przyczyny wystąpienia błędów. W jednym ze wcześniejszych wpisów na blogu Mikroserwisy: Monitoring, Tracing i Log Aggregation – diagnostyka problemów w środowisku rozproszonym opisywałem jakie narzędzia są według mnie najbardziej przydatne w diagnostyce problemów:
- Log Aggregation, zbieranie logów w środowisku rozproszonym
- Distributed Tracing, czyli śledzenie konkretnego żądania
- Monitoring ogólnej kondycji systemu
Aby uzyskać wszystkie te funkcjonalności, trzeba zainstalować lub skorzystać z jakiegoś oprogramowania. Istnieje wiele gotowych rozwiązań do wizualizacji metryk, np. Grafana, Kibana, do ich przechowywania, np. Prometheus, Graphite, ELK Stack, do zbierania i agregowania logów, np. Splunk.
Wymagają one jednak instalacji, utrzymywania i zarządzania.
Jeżeli Twój projekt wykorzystuje Cloud, poszukaj rozwiązania, które być może już można wykorzystać. Ja jestem zaznajomiony z rozwiązaniami chmurowymi Azure.
W tym wpisie chciałbym przybliżyć Azure Application Insigths – rozwiązanie chmurowe będące częścią Azure Monitor klasy APM (Application Performance Management), które jest dostępne w formie SaaS – możesz użyć „prosto z półki”, które zdejmie zadania takie jak:
- hostowanie backendów, na którym przechowywane są dane telemetryczne
- instalacji oprogramowania do wizualizacji metryk
- budowania dashboardów
Wszystko to, przynajmniej na start, zapewni Azure Monitor i funkcjonalność Application Insights.
A co, jeżeli powiem Ci, że w aplikacji Java włączysz to jedną linijką w kodzie?
Z dalszej części artykułu dowiesz się:
- czym jest Azure Monitor i Log Analytics Workspace
- czym jest Azure Application Insights
- jakie są dostępne dashboardy i inne funkcjonalności
Azure Monitor
Azure Application Insights to funkcjonalność w ramach usługi Azure Monitor zbierającej i przechowującej dane z różnych usług Azure, w tym infrastruktury (maszyn wirtualnych, sieci, storage accounts).
Metryki z różnych usług zapisywane są w usłudze Log Analytics Workspace w postaci wielu tabel z kolumnami, w których znajdują się wiersze z danymi. Z danych zawartych w tabelach budowane są widoki w ramach Azure Monitor i zakładek Metryki w wielu usługach Azure. To dość generyczne rozwiązanie.
Widoki zbudowane z przechowywanych metryk Azure Monitor są dostępne w zakładce „Monitoring” w prawie każdej usłudze.
Oprócz predefiniowanych metryk można budować własne dashboardy wizualizując kluczowe dla nas metryki.
Application Insights
Application Insights jako funkcjonalność w ramach Azure Monitor skupia się na monitorowaniu samej aplikacji, wysyłając z niej dane telemetryczne. Dzięki temu możemy obserwować nie tylko infrastrukturę, ale również przepływy danych w naszej aplikacji.
Dane z aplikacji są traktowane jako dodatkowe źródło danych w Azure Monitor i trafiają do Telemetry Ingestion Endpoint w postaci pakietów danych (jako tablice json).
Application Insights to między innymi:
- Application Dashboard – dashboard prezentujący kondycję aplikacji na pierwszy rzut oka. Prezentuje metryki takie jak liczba obsłużonych żądań, czasy odpowiedzi, liczba błędów (http), wyjątków, cpu, pamięć.
- Application map – widok prezentujący mapę interakcji aplikacji pomiędzy sobą oraz używanych usług, takich jak systemy kolejkowe, bazy danych. Na krawędziach grafu prezentowane są kluczowe metryki takie jak liczba wywołań, średni czas odpowiedzi, żywotność połączenia (czy występują błędy).
- Transaction search – Tracing w aplikacji. Możemy zapytać o konkretne correlationId, a naszym oczom ukaże się lista komponentów, przez które przeszło żądane, ze znacznikami czasowymi, metadanymi, opcjonalnie logami oraz wyjątakmi.
- Failures view oraz Performance view – dwa widoki do analizowania kondycji aplikacji, widok nastawiony na błędy, a drugi na czasy odpowiedzi i kody błędów wraz z podziałem na endpointy.
- Availability view – proaktywny monitoring dostępności aplikacji, czy jest dostępna, ma dobry certyfikat SSL, generujący alert, w razie gdy występuje jakiś problem.
Integracja z aplikacją Java
Application Insights dla środowiska Java oferuje automatyczną instrumentację kodu, który wpina się w kluczowe momenty działania naszej aplikacji i wysyła z niej dane. Są to np.:
- wywołania HTTP (z różnych bibliotek)
- wysyłanie wiadomości na brokery (Kafka, Rabbit)
- zapytania do baz danych (JDBC)
- wywoływanie końcówek REST i zbieranie czasów odpowiedzi,
- wysyłanie logów z aplikacji (za pomocą logback)
Mamy zasadniczo dwie możliwości uruchomienia autoinstrumentacji:
- Java agent jako parametr uruchomieniowy aplikacji
java -javaagent:"path/to/applicationinsights-agent-X.Y.Z.jar" -jar <myapp.jar>
- Dodanie zależności i włączenie programistyczne w metodzie main():
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>applicationinsights-runtime-attach</artifactId>
<version>3.5.1</version>
</dependency>
Instrumentacja kodu
Wywołanie w metodzie main
funkcji attach()
, na przykład w Spring Boot.
@SpringBootApplication
public class SpringBootApp {
public static void main(String[] args) {
ApplicationInsights.attach();
SpringApplication.run(SpringBootApp.class, args);
}
}
Aby wszystko działało, należy podać Connection String, który jest unikalnym identyfikatorem po stronie Azure Monitor i odpowiada za właściwe raportowanie metryk do naszej instancji usługi.
Chociaż Azure wspomina, że Connection String nie jest secretem, należy nie upubliczniać go, bo umożliwi to wysyłanie metryk do Twojej instancji usługi Azure Monitor.
Connection String można podać na przykład definiując zmienną środowiskową:
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey-...
Inną zmienną wartą ustawienia jest nazwa naszej aplikacji / mikroserwisu. Ułatwi to późniejszą identyfikację komponentu, na przykład na widoku Application Map.
APPLICATIONINSIGHTS_ROLE_NAME=nazwa-mikroserwisu
Istnieje szeroki zakres opcji konfiguracyjnych agenta, warto zapoznać się z pełną dokumentacją (link) – można na przykład wyłączyć przesyłanie logów z aplikacji (co jest domyślnie włączone).
Integracja z Micrometer i Open Telemetry
Oprócz auto instrumentacji kodu agent Application Insights integruje się z Micrometer i Open Telemetry (OTEL). Liczniki, wskaźniki, metryki, które zarejestrujesz są automatycznie wysyłane razem z innymi metrykami, a następnie jest możliwość ich do wizualizacji.
Szczególnie przydatną opcją jest tracing, w którym możemy zawrzeć dodatkowe informacje (atrybuty) dotyczące przebiegu procesu. Mogą one być przydatne w widoku Transaction Search, gdy wyszukujemy żądanie po correlationId.
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.common.AttributeKey;
AttributeKey attributeKey = AttributeKey.stringKey("orderId");
Span.current().setAttribute(attributeKey, "some_value");
Podsumowanie
- Application Insights to funkcjonalność APM (Application Performance Management) w ramach usługi Azure Monitor, która koncentruje się na monitoringu aplikacji: metryk, tracingu, alertów.
- Dostarcza warstwę dashboardy i wizualizacje zbieranych metryk bez konieczności budowania własnych.
- Dane są przechowywane w Log Analytics Workspace.
- Włączenie usługi jest bardzo proste: wystarczy włączyć agenta, a monitoring jest wykonany za pomocą instrumentacji kodu.
- Agent jest zintegrowany z Open Telemetry (OTEL) i Microemter, dzięki czemu w łatwy sposób można rozszerzać wysyłane metryki.
Gdybyś potrzebował jeszcze więcej:
Jesteś Java Developerem?
Przejdź na wyższy poziom wiedzy
„Droga do Seniora” 🔥💪
Jesteś Team Leaderem? Masz zespół?
Podnieś efektywność i wiedzę swojego zespołu 👌
Linki
- Azure Monitor
- Application Insights
- Application Insigths (Java) + Spring Boot
- Obrazy pochodzą z dokumentacji Azure.
Application Insights to funkcjonalność w ramach usługi Azure Monitor – skupia się na monitorowaniu samej aplikacji, wysyłając z niej dane telemetryczne. Dzięki temu możemy obserwować nie tylko infrastrukturę, ale również przepływy danych w naszej aplikacji.
Dane z aplikacji są traktowane jako dodatkowe źródło danych w Azure Monitor i trafiają do Telemetry Ingestion Endpoint w postaci pakietów danych (jako tablice json).
Główne widoki to:
* Application Dashboard
* Application map
* Transaction search
* Failures view oraz Performance view
* Availability view
Azure Monitor to usługa zbierająca i przechowująca dane z różnych usług Azure, w tym infrastruktury (maszyn wirtualnych, sieci, storage accounts).
Metryki z różnych usług zapisywane są w usłudze Log Analytics Workspace w postaci wielu tabel z kolumnami, w których znajdują się wiersze z danymi. Z danych zawartych w tabelach budowane są widoki w ramach Azure Monitor i zakładek Metryki w wielu usługach Azure.