Już dostępny

Program Szkoleniowy Java Developer dostępny 🔥💪 tylko TERAZ za 1299 zł  Sprawdź szczegóły i agendę

Zakres

Monitoring • Apache Kafka • Clean Code Testowanie • Hibernate • Systemy kolejkowe Sprawdź szczegóły i agendę

Zakres

14 modułów  /  ponad 40h nagrań  /  230 lekcji  /  dożywotni dostęp  /  Sprawdź szczegóły i agendę

Monitoring aplikacji Java w Azure – Application Insights

utworzone przez 26 marca 2024Java, Mikroserwisy i Integracje

[Szybkie info]: Startujemy z IV edycją Programu Szkoleniowego Java Developera 🚀. To MEGA piguła wiedzy o Java 🔥💪

  • 14 tygodniowy program szkoleniowy online,
  • 230 lekcji w formie video (40 godzin materiału)
  • z dożywotnim dostępem
  • Case Studies, masz dostęp do kodu i obrazów Dockerowych
  • zamknięta grupa mentorzy + uczestnicy i webinary na żywo

W agendzie znajdziesz: Mikroserwisy, Systemy kolejnowe, Apache Kafka, Caching, Hibernate/MyBatis/Spring Data, techniki efektywnych Testów kodu, Clean Code i Maven.

Tylko teraz dołączysz z 50% rabatem to 2699 zł 1299 zł (+VAT). I nigdy już nie będzie taniej. Poniżej dowiesz się więcej:

Zobacz więcej

A teraz przechodzimy do artykułu:

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.

Psst… Interesujący artykuł?

Jeżeli podoba Ci się ten artykuł i chcesz takich więcej – dołącz do newslettera. Nie ominą Cię materiały tego typu.

.

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:

  1. Java agent jako parametr uruchomieniowy aplikacji
java -javaagent:"path/to/applicationinsights-agent-X.Y.Z.jar" -jar <myapp.jar>
  1. 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.

Podoba Ci się ten artykuł? Weź więcej.

Jeżeli uważasz ten materiał za wartościowy i chcesz więcej treści tego typu – nie przegap ich i otrzymuj je prosto na swoją skrzynkę. Nawiążmy kontakt.

.

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

Czym jest Azure Application Insights?

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

Czym jest Azure Monitor?

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.

Dyskusja