Usługa Application Insights dla języka Java 2.x

Przestroga

Ten artykuł dotyczy języka Java 2.x usługi Application Insights, który nie jest już zalecany.

Dokumentację dotyczącą najnowszej wersji można znaleźć w artykule Application Insights Java 3.x.

Z tego artykułu dowiesz się, jak używać języka Java 2.x usługi Application Insights. W tym artykule wyjaśniono, jak:

  • Rozpocznij pracę i dowiedz się, jak instrumentować żądania, śledzić zależności, zbierać liczniki wydajności, diagnozować problemy z wydajnością i wyjątki oraz pisać kod, aby śledzić, co użytkownicy robią z aplikacją.
  • Wysyłanie dzienników śledzenia do usługi Application Insights i eksplorowanie ich przy użyciu portalu usługi Application Insights.
  • Monitorowanie zależności, przechwyconych wyjątków i czasów wykonywania metod w aplikacjach internetowych Java.
  • Filtrowanie danych telemetrycznych w aplikacji internetowej Java.
  • Zapoznaj się z metrykami wydajności systemu Linux w usłudze Application Insights przy użyciu polecenia collectd.
  • Metryki miar dla kodu aplikacji opartego na maszynie wirtualnej Java (JVM). Wyeksportuj dane do ulubionych systemów monitorowania przy użyciu monitorowania aplikacji Micrometer.

Uwaga

31 marca 2025 r. zostanie zakończone świadczenie pomocy technicznej dla pozyskiwania klucza instrumentacji. Pozyskiwanie klucza instrumentacji będzie nadal działać, ale nie będziemy już zapewniać aktualizacji ani obsługi funkcji. Przejście do parametrów połączenia w celu skorzystania z nowych możliwości.

Wprowadzenie do usługi Application Insights w projekcie sieci Web w języku Java

W tej sekcji użyjesz zestawu SDK usługi Application Insights do instrumentacji żądań, śledzenia zależności, zbierania liczników wydajności, diagnozowania problemów z wydajnością i wyjątków oraz pisania kodu w celu śledzenia działań użytkowników w aplikacji.

Application Insights jest rozszerzalną usługą analizy dla deweloperów sieci Web, która ułatwia zrozumienie wydajności i użycia aktywnej aplikacji. Usługa Application Insights obsługuje aplikacje w języku Java działające w systemach Linux, Unix lub Windows.

Wymagania wstępne

Potrzebne elementy:

Uzyskiwanie klucza instrumentacji usługi Application Insights

  1. Zaloguj się w witrynie Azure Portal.

  2. W witrynie Azure Portalutwórz zasób usługi Application Insights. Jako typ aplikacji ustaw wartość Aplikacja internetowa Java.

  3. Znajdź klucz instrumentacji nowego zasobu. Wkrótce będzie trzeba wkleić ten klucz do projektu kodu.

    Zrzut ekranu przedstawiający okienko Przegląd zasobu usługi Application Insights w Azure Portal z wyróżnionym kluczem instrumentacji.

Dodawanie zestawu SDK usługi Application Insights dla środowiska Java do projektu

Wybierz typ projektu.

Jeśli projekt został już skonfigurowany do używania narzędzia Maven do kompilacji, scal następujący kod z plikiem pom.xml . Następnie odśwież zależności projektu, aby pliki binarne zostały pobrane.

    <dependencies>
      <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-web-auto</artifactId>
        <!-- or applicationinsights-web for manual web filter registration -->
        <!-- or applicationinsights-core for bare API -->
        <version>2.6.4</version>
      </dependency>
    </dependencies>

Często zadawane pytania

  • Jaka jest relacja między składnikami -web-auto, -webi -core ?

    • applicationinsights-web-auto Udostępnia metryki, które śledzą liczbę żądań serwletu HTTP i czasy odpowiedzi, automatycznie rejestrując filtr serwletu usługi Application Insights w czasie wykonywania.
    • applicationinsights-web Udostępnia również metryki, które śledzą liczbę żądań serwletu HTTP i czasy odpowiedzi. Jednak wymagana jest ręczna rejestracja filtru serwletu usługi Application Insights w aplikacji.
    • applicationinsights-core Udostępnia na przykład goły interfejs API, jeśli aplikacja nie jest oparta na serwletach.
  • Jak zaktualizować zestaw SDK do najnowszej wersji?

    • Od listopada 2020 r. w celu monitorowania aplikacji Java zalecamy używanie środowiska Java 3.x usługi Application Insights. Aby uzyskać więcej informacji na temat rozpoczynania pracy, zobacz Application Insights Java 3.x.

Dodawanie pliku ApplicationInsights.xml

Dodaj ApplicationInsights.xml do folderu resources w projekcie lub upewnij się, że został dodany do ścieżki klasy wdrożenia projektu. Skopiuj do niego następujący kod XML.

Zastąp klucz instrumentacji kluczem uzyskanym z Azure Portal.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">

   <!-- The key from the portal: -->
   <InstrumentationKey>** Your instrumentation key **</InstrumentationKey>

   <!-- HTTP request component (not required for bare API) -->
   <TelemetryModules>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebRequestTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebSessionTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebUserTrackingTelemetryModule"/>
   </TelemetryModules>

   <!-- Events correlation (not required for bare API) -->
   <!-- These initializers add context data to each event -->
   <TelemetryInitializers>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationIdTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationNameTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebSessionTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserAgentTelemetryInitializer"/>
   </TelemetryInitializers>

</ApplicationInsights>

Opcjonalnie plik konfiguracji może znajdować się w dowolnej lokalizacji dostępnej dla aplikacji. Właściwość -Dapplicationinsights.configurationDirectory systemowa określa katalog zawierający ApplicationInsights.xml. Na przykład plik konfiguracji znajdujący się w E:\myconfigs\appinsights\ApplicationInsights.xml zostanie skonfigurowany z właściwością -Dapplicationinsights.configurationDirectory="E:\myconfigs\appinsights".

  • Klucz instrumentacji jest wysyłany wraz z każdym elementem telemetrii i dzięki temu te elementy mogą być wyświetlane dla odpowiedniego zasobu usługi Application Insights.
  • Składnik żądań HTTP jest opcjonalny. Powoduje automatyczne wysyłanie telemetrii dotyczącej żądań i czasów odpowiedzi do portalu.
  • Korelacja zdarzenia jest dodatkiem do składnika żądań HTTP. Przypisuje identyfikator do każdego żądania odebranego przez serwer. Następnie dodaje ten identyfikator jako właściwość do każdego elementu telemetrii jako właściwość Operation.Id. Umożliwia skorelowanie danych telemetrycznych skojarzonych z każdym żądaniem przez ustawienie filtru w wyszukiwaniu diagnostycznym.

Alternatywne sposoby ustawienia klucza instrumentacji

Zestaw SDK usługi Application Insights szuka klucza w następującej kolejności:

  • Właściwość systemu: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
  • Zmienna środowiskowa: APPINSIGHTS_INSTRUMENTATIONKEY
  • Plik konfiguracji: ApplicationInsights.xml

Możesz również ustawić klucz w kodzie:

    String instrumentationKey = "00000000-0000-0000-0000-000000000000";

    if (instrumentationKey != null)
    {
        TelemetryConfiguration.getActive().setInstrumentationKey(instrumentationKey);
    }

Dodawanie agenta

Zainstaluj agenta Java, aby przechwytywać wychodzące wywołania HTTP, zapytania JDBC, rejestrowanie aplikacji i lepsze nazewnictwo operacji.

Uruchamianie aplikacji

Uruchom go w trybie debugowania na komputerze deweloperskim lub opublikuj go na serwerze.

Wyświetlanie telemetrii w usłudze Application Insights

Wróć do zasobu usługi Application Insights w Azure Portal.

Dane żądań HTTP są wyświetlane w okienku przeglądu. Jeśli tak nie jest, zaczekaj kilka sekund, a następnie wybierz pozycję Odśwież.

Zrzut ekranu przedstawiający przykładowe dane z omówieniem.

Dowiedz się więcej o metrykach.

Klikaj elementy wykresów, aby wyświetlać bardziej szczegółowe metryki zagregowane.

Zrzut ekranu przedstawiający okienko błędów usługi Application Insights z wykresami.

Dane wystąpienia

Kliknij określony typ żądania, aby wyświetlić poszczególne wystąpienia.

Zrzut ekranu przedstawiający przechodzenie do szczegółów określonego widoku przykładu.

Log Analytics: zaawansowany język zapytań

W miarę gromadzenia większej ilości danych można uruchamiać zapytania w celu agregowania danych i znajdowania poszczególnych wystąpień. Log Analytics to zaawansowane narzędzie do zrozumienia wydajności i użycia oraz do celów diagnostycznych.

Zrzut ekranu przedstawiający przykład usługi Log Analytics w Azure Portal.

Instalowanie aplikacji na serwerze

Teraz opublikuj aplikację na serwerze, zezwól użytkownikom na korzystanie z niej i obejrzyj dane telemetryczne wyświetlane w portalu.

  • Upewnij się, że zapora pozwala aplikacji na wysłanie telemetrii do tych portów:

    • dc.services.visualstudio.com:443
    • f5.services.visualstudio.com:443
  • Jeśli ruch wychodzący musi być kierowany przez zaporę, zdefiniuj właściwości http.proxyHost systemowe i http.proxyPort.

  • Na serwerach systemu Windows zainstaluj:

Azure App Service, Azure Kubernetes Service, konfiguracja maszyn wirtualnych

Najlepszym i najłatwiejszym podejściem do monitorowania aplikacji działających u dowolnego dostawcy zasobów platformy Azure jest użycie usługi Application Insights w języku Java 3.x.

Wyjątki i błędy żądań

Nieobsługiwane wyjątki i błędy żądań są automatycznie zbierane przez filtr internetowy usługi Application Insights.

Aby zbierać dane dotyczące innych wyjątków, możesz wstawić wywołania do funkcji trackException() w kodzie.

Monitorowanie wywołań metod i zależności zewnętrznych

Zainstaluj agenta Java w celu rejestrowania określonych metod wewnętrznych i wywołań wykonanych za pośrednictwem sterownika JDBC, z danymi chronometrażu i nazewnictwa operacji automatycznych.

Śledzenie rozproszone W3C

Zestaw JAVA SDK usługi Application Insights obsługuje teraz śledzenie rozproszone W3C.

Konfiguracja przychodzącego zestawu SDK jest dokładniej objaśniona w temacie Korelacja telemetrii w usłudze Application Insights.

Konfiguracja wychodzącego zestawu SDK jest definiowana w pliku AI-Agent.xml .

Liczniki wydajności

Wybierz pozycję Zbadaj>metryki , aby wyświetlić zakres liczników wydajności.

Zrzut ekranu przedstawiający okienko Metryki dla zasobu usługi Application Insights w Azure Portal z wybranymi bajtami prywatnymi procesu.

Dostosowywanie zbierania danych liczników wydajności

Aby wyłączyć zbieranie standardowych zestawów liczników wydajności, dodaj następujący kod w węźle głównym pliku ApplicationInsights.xml :

    <PerformanceCounters>
       <UseBuiltIn>False</UseBuiltIn>
    </PerformanceCounters>

Zbieranie dodatkowych liczników wydajności

Można określić więcej liczników wydajności do zebrania.

Liczniki JMX (uwidocznione przez maszynę wirtualną Java)
    <PerformanceCounters>
      <Jmx>
        <Add objectName="java.lang:type=ClassLoading" attribute="TotalLoadedClassCount" displayName="Loaded Class Count"/>
        <Add objectName="java.lang:type=Memory" attribute="HeapMemoryUsage.used" displayName="Heap Memory Usage-used" type="composite"/>
      </Jmx>
    </PerformanceCounters>
  • displayName: nazwa wyświetlana w portalu usługi Application Insights.
  • objectName: nazwa obiektu JMX.
  • attribute: atrybut nazwy obiektu JMX do pobrania.
  • type (opcjonalnie): typ atrybutu obiektu JMX:
    • Ustawienie domyślne: prosty typ, taki jak int lub long.
    • composite: Dane licznika wydajności są w formacie Attribute.Data.
    • tabular: Dane licznika wydajności są w formacie wiersza tabeli.
Liczniki wydajności systemu Windows

Każdy licznik wydajności systemu Windows jest składową kategorii (w taki sam sposób, w jaki pole jest składową klasy). Kategorie mogą być globalne lub mają numerowane lub nazwane wystąpienia.

    <PerformanceCounters>
      <Windows>
        <Add displayName="Process User Time" categoryName="Process" counterName="%User Time" instanceName="__SELF__" />
        <Add displayName="Bytes Printed per Second" categoryName="Print Queue" counterName="Bytes Printed/sec" instanceName="Fax" />
      </Windows>
    </PerformanceCounters>
  • displayName: nazwa wyświetlana w portalu usługi Application Insights.
  • categoryName: kategoria licznika wydajności (obiekt wydajności), z którym jest skojarzony ten licznik wydajności.
  • counterName: nazwa licznika wydajności.
  • instanceName: nazwa wystąpienia kategorii licznika wydajności lub pusty ciąg (""), jeśli kategoria zawiera jedno wystąpienie. Jeśli categoryName element to Process i licznik wydajności, który chcesz zebrać, pochodzi z bieżącego procesu JVM, na którym działa aplikacja, określ wartość "__SELF__".

Liczniki wydajności sytemu Unix

Zainstaluj zebrane za pomocą wtyczki usługi Application Insights , aby uzyskać szeroką gamę danych systemowych i sieciowych.

Pobieranie danych użytkownika i sesji

Teraz wysyłasz dane telemetryczne z serwera internetowego. Aby uzyskać pełny widok 360 stopni aplikacji, możesz dodać więcej monitorowania:

Wysyłanie własnej telemetrii

Po zainstalowaniu zestawu SDK możesz użyć interfejsu API do wysyłania własnych danych telemetrycznych:

Testy dostępności sieci Web

Usługa Application Insights może służyć do testowania witryny sieci Web w regularnych odstępach czasu, aby sprawdzić, czy witryna działa i odpowiada poprawnie.

Dowiedz się więcej o sposobie konfigurowania testów sieci Web dostępności.

Rozwiązywanie problemów

Zobacz dedykowany artykuł dotyczący rozwiązywania problemów.

Testowanie łączności między hostem aplikacji a usługą pozyskiwania

Zestawy SDK usługi Application Insights i agenci wysyłają dane telemetryczne w celu pozyskania ich jako wywołań REST do naszych punktów końcowych pozyskiwania. Możesz przetestować łączność z serwera internetowego lub maszyny hosta aplikacji do punktów końcowych usługi pozyskiwania przy użyciu pierwotnych klientów REST z poziomu programu PowerShell lub poleceń curl. Zobacz Rozwiązywanie problemów z brakującą telemetrią aplikacji w usłudze Azure Monitor Application Insights.

Eksplorowanie dzienników śledzenia języka Java w usłudze Application Insights

Jeśli używasz funkcji Logback lub Log4J (wersja 1.2 lub 2.0) do śledzenia, możesz automatycznie wysyłać dzienniki śledzenia do usługi Application Insights, gdzie można je eksplorować i wyszukiwać.

Porada

Musisz ustawić klucz instrumentacji usługi Application Insights tylko raz dla aplikacji. Jeśli używasz platformy takiej jak Java Spring, być może klucz został już zarejestrowany w innej lokalizacji w konfiguracji aplikacji.

Korzystanie z agenta Java usługi Application Insights

Domyślnie agent Java usługi Application Insights automatycznie przechwytuje rejestrowanie wykonywane na WARN poziomie i wyższym.

Próg rejestrowania przechwyconego można zmienić przy użyciu pliku AI-Agent.xml :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging threshold="info"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Przechwytywanie rejestrowania agenta Java można wyłączyć przy użyciu pliku AI-Agent.xml :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging enabled="false"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Alternatywy

Zamiast korzystać z agenta Java, możesz wykonać te instrukcje.

Instalowanie zestawu Java SDK

Postępuj zgodnie z instrukcjami, aby zainstalować zestaw SDK usługi Application Insights dla języka Java, jeśli jeszcze tego nie zrobiono.

Dodawanie bibliotek rejestrowania do projektu

Wybierz odpowiedni sposób dla danego projektu.

Maven

Jeśli projekt został już skonfigurowany do używania narzędzia Maven do kompilacji, scal jeden z poniższych fragmentów kodu do pliku pom.xml . Następnie odśwież zależności projektu, aby pliki binarne zostały pobrane.

Logback


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-logback</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J, wersja 2.0


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J v1.2


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j1_2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>
Gradle

Jeśli projekt został już skonfigurowany do używania narzędzia Gradle do kompilacji, dodaj jeden z następujących wierszy do dependencies grupy w pliku build.gradle . Następnie odśwież zależności projektu, aby pliki binarne zostały pobrane.

Logback


    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-logback', version: '2.0.+'

Log4J, wersja 2.0

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j2', version: '2.0.+'

Log4J v1.2

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j1_2', version: '2.0.+'

Postępuj zgodnie z wytycznymi, aby ręcznie zainstalować zestaw JAVA SDK usługi Application Insights i pobrać plik jar. Na stronie Maven Central wybierz jar link w sekcji pobierania dla odpowiedniego dołączania. Dodaj pobrany plik jar appender do projektu.

Rejestratora Pobierz Biblioteka
Logback Plik Jar dołączania logback applicationinsights-logging-logback
Log4J, wersja 2.0 Log4J v2 appender Jar applicationinsights-logging-log4j2
Log4j v1.2 Log4J v1.2 appender Jar applicationinsights-logging-log4j1_2

Dodawanie dołączania do struktury rejestrowania

Aby rozpocząć pobieranie śladów, scal odpowiedni fragment kodu z plikiem konfiguracji Logback lub Log4J.

Logback


    <appender name="aiAppender" 
      class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender">
        <instrumentationKey>[APPLICATION_INSIGHTS_KEY]</instrumentationKey>
    </appender>
    <root level="trace">
      <appender-ref ref="aiAppender" />
    </root>

Log4J v2.0


    <Configuration packages="com.microsoft.applicationinsights.log4j.v2">
      <Appenders>
        <ApplicationInsightsAppender name="aiAppender" instrumentationKey="[APPLICATION_INSIGHTS_KEY]" />
      </Appenders>
      <Loggers>
        <Root level="trace">
          <AppenderRef ref="aiAppender"/>
        </Root>
      </Loggers>
    </Configuration>

Log4J v1.2


    <appender name="aiAppender" 
         class="com.microsoft.applicationinsights.log4j.v1_2.ApplicationInsightsAppender">
        <param name="instrumentationKey" value="[APPLICATION_INSIGHTS_KEY]" />
    </appender>
    <root>
      <priority value ="trace" />
      <appender-ref ref="aiAppender" />
    </root>

Dołączanie usługi Application Insights można odwoływać się do dowolnego skonfigurowanego rejestratora i niekoniecznie przez główny rejestrator, jak pokazano w poprzednich przykładach kodu.

Eksplorowanie śladów w portalu usługi Application Insights

Po skonfigurowaniu projektu w celu wysyłania śladów do usługi Application Insights możesz wyświetlać te ślady i przeszukiwać je w portalu usługi Application Insights w okienku Wyszukiwania .

Wyjątki przesyłane za pośrednictwem rejestratorów będą wyświetlane w portalu jako dane telemetryczne wyjątków .

Zrzut ekranu przedstawiający okienko Wyszukiwania zasobu usługi Application Insights w Azure Portal.

Monitorowanie zależności, przechwyconych wyjątków i czasów wykonywania metody w aplikacjach internetowych Java

Jeśli instrumentujesz aplikację internetową Java przy użyciu zestawu SDK usługi Application Insights, możesz użyć agenta Java, aby uzyskać szczegółowe informacje bez żadnych zmian kodu:

  • Zależności: dane dotyczące wywołań, które aplikacja wykonuje do innych składników, w tym:

    • Wychodzące wywołania HTTP: wywołania wykonywane za pośrednictwem Apache HttpClientmetody , OkHttpi java.net.HttpURLConnection są przechwytywane.
    • Wywołania usługi Redis: połączenia wykonywane za pośrednictwem klienta Jedis są przechwytywane.
    • Zapytania JDBC: w przypadku programów MySQL i PostgreSQL, jeśli wywołanie trwa dłużej niż 10 sekund, agent zgłasza plan zapytania.
  • Rejestrowanie aplikacji: przechwytywanie i korelowanie dzienników aplikacji za pomocą żądań HTTP i innych danych telemetrycznych:

    • Log4j 1.2
    • Log4j2
    • Rejestrowanie zwrotne
  • Lepsze nazewnictwo operacji: służy do agregacji żądań w portalu.

    • Spring: na podstawie elementu @RequestMapping.
    • JAX-RS: na podstawie elementu @Path.

Aby użyć agenta Java, zainstaluj go na serwerze. Aplikacje internetowe muszą być instrumentowane przy użyciu zestawu JAVA SDK usługi Application Insights.

Instalowanie agenta usługi Application Insights dla języka Java

  1. Na maszynie z uruchomionym serwerem Java pobierz agenta 2.x. Upewnij się, że używana wersja agenta Java 2.x jest zgodna z wersją używanego zestawu SDK Java usługi Application Insights 2.x.

  2. Edytuj skrypt uruchamiania serwera aplikacji i dodaj następujący argument JVM:

    -javaagent:<full path to the agent JAR file>

    Na przykład w usłudze Tomcat na maszynie z systemem Linux:

    export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"

  3. Uruchom ponownie serwer aplikacji.

Konfigurowanie agenta

Utwórz plik o nazwie AI-Agent.xml i umieść go w tym samym folderze co plik jar agenta.

Ustaw zawartość pliku XML. Edytuj poniższy przykład, aby uwzględnić lub pominąć żądane funkcje.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn enabled="true">

         <!-- capture logging via Log4j 1.2, Log4j2, and Logback, default is true -->
         <Logging enabled="true" />

         <!-- capture outgoing HTTP calls performed through Apache HttpClient, OkHttp,
              and java.net.HttpURLConnection, default is true -->
         <HTTP enabled="true" />

         <!-- capture JDBC queries, default is true -->
         <JDBC enabled="true" />

         <!-- capture Redis calls, default is true -->
         <Jedis enabled="true" />

         <!-- capture query plans for JDBC queries that exceed this value (MySQL, PostgreSQL),
              default is 10000 milliseconds -->
         <MaxStatementQueryLimitInMS>1000</MaxStatementQueryLimitInMS>

      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Więcej konfiguracji (Spring Boot)

java -javaagent:/path/to/agent.jar -jar path/to/TestApp.jar

Aby uzyskać Azure App Service, wykonaj następujące kroki:

  1. Wybierz pozycję Ustawienia>aplikacji.

  2. W obszarze Ustawienia aplikacji dodaj nową parę wartości klucza:

    • Klucz: JAVA_OPTS
    • Wartość: -javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar

    Agent musi być spakowany jako zasób w projekcie, aby był on wyświetlany w katalogu D:/home/site/wwwroot/ . Aby potwierdzić, że agent znajduje się w poprawnym katalogu App Service, przejdź do pozycjiNarzędzia programistyczne Advanced Tools>>Debug Console i sprawdź zawartość katalogu lokacji.

  3. Zapisz ustawienia i uruchom ponownie aplikację. Te kroki dotyczą tylko usług aplikacji działających w systemie Windows.

Uwaga

AI-Agent.xml i plik jar agenta powinien znajdować się w tym samym folderze. Są one często umieszczane razem w folderze /resources projektu.

Włączanie śledzenia rozproszonego W3C

Dodaj następujący fragment kodu do AI-Agent.xml:

<Instrumentation>
   <BuiltIn enabled="true">
      <HTTP enabled="true" W3C="true" enableW3CBackCompat="true"/>
   </BuiltIn>
</Instrumentation>

Uwaga

Tryb zgodności z poprzednimi wersjami jest domyślnie włączony. Parametr enableW3CBackCompat jest opcjonalny i powinien być używany tylko wtedy, gdy chcesz go wyłączyć.

Najlepiej byłoby, gdyby wszystkie usługi zostały zaktualizowane do nowszych wersji zestawów SDK obsługujących protokół W3C. Zalecamy przejście do nowszych wersji zestawów SDK z obsługą W3C tak szybko, jak to możliwe.

Upewnij się, że zarówno konfiguracje przychodzące , jak i wychodzące (agent) są dokładnie takie same.

Wyświetlanie danych

W zasobie usługi Application Insights w kafelku Wydajność są wyświetlane zagregowane czasy wykonywania zależności zdalnej i metody.

Aby wyszukać poszczególne wystąpienia raportów zależności, wyjątków i metod, otwórz pozycję Wyszukaj.

Dowiedz się więcej na temat diagnozowania problemów z zależnościami.

Pytania lub problemy?

Użyj następujących zasobów:

Filtrowanie danych telemetrycznych w aplikacji internetowej Java

Filtry umożliwiają wybranie danych telemetrycznych wysyłanych przez aplikację internetową Java do usługi Application Insights. Istnieją pewne gotowe filtry, których można użyć. Możesz również napisać własne filtry niestandardowe.

Filtry gotowe do użycia obejmują:

  • Poziom ważności śledzenia.
  • Określone adresy URL, słowa kluczowe lub kody odpowiedzi.
  • Szybkie odpowiedzi. Innymi słowy, żądania, na które aplikacja szybko zareagowała.
  • Określone nazwy zdarzeń.

Uwaga

Filtruje niesymetryczność metryk aplikacji. Na przykład możesz zdecydować, że zdiagnozować powolne odpowiedzi, ustawisz filtr, aby odrzucić szybkie czasy odpowiedzi. Należy jednak pamiętać, że średni czas odpowiedzi zgłoszony przez usługę Application Insights będzie wtedy wolniejszy niż rzeczywista szybkość. Ponadto liczba żądań będzie mniejsza niż rzeczywista liczba.

Jeśli jest to problem, użyj zamiast tego opcji Próbkowanie .

Ustawianie filtrów

W ApplicationInsights.xmldodaj sekcję podobną TelemetryProcessors do tego przykładu:


    <ApplicationInsights>
      <TelemetryProcessors>

        <BuiltInProcessors>
           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>

           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="100"/>
                  <Add name="NotNeededResponseCodes" value="200-400"/>
           </Processor>

           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="100"/>
                  <Add name="NotNeededNames" value="home,index"/>
                  <Add name="NotNeededUrls" value=".jpg,.css"/>
           </Processor>

           <Processor type="TelemetryEventFilter">
                  <!-- Names of events we don't want to see -->
                  <Add name="NotNeededNames" value="Start,Stop,Pause"/>
           </Processor>

           <!-- Exclude telemetry from availability tests and bots -->
           <Processor type="SyntheticSourceFilter">
                <!-- Optional: specify which synthetic sources,
                     comma-separated
                     - default is all synthetics -->
                <Add name="NotNeededSources" value="Application Insights Availability Monitoring,BingPreview"
           </Processor>

        </BuiltInProcessors>

        <CustomProcessors>
          <Processor type="com.fabrikam.MyFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>

      </TelemetryProcessors>
    </ApplicationInsights>

Sprawdź pełny zestaw wbudowanych procesorów.

Wbudowane filtry

W tej sekcji omówiono wbudowane filtry, które są dostępne.

Filtr telemetrii metryk


           <Processor type="MetricTelemetryFilter">
                  <Add name="NotNeeded" value="metric1,metric2"/>
           </Processor>
  • NotNeeded: Rozdzielona przecinkami lista niestandardowych nazw metryk

Filtr telemetrii widoku strony


           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="500"/>
                  <Add name="NotNeededNames" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>
  • DurationThresholdInMS: czas trwania odnosi się do czasu potrzebnego do załadowania strony. Jeśli ten parametr jest ustawiony, strony ładowane szybciej niż w tym czasie nie są zgłaszane.
  • NotNeededNames: rozdzielona przecinkami lista nazw stron.
  • NotNeededUrls: rozdzielona przecinkami lista fragmentów adresów URL. Na przykład "home" filtruje wszystkie strony, które mają "stronę główną" w adresie URL.

Filtr telemetrii żądania


           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="500"/>
                  <Add name="NotNeededResponseCodes" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>

Filtr syntetycznego źródła

Filtruje wszystkie dane telemetryczne, które mają wartości we SyntheticSource właściwości. Uwzględniane są żądania botów, pająków i testów dostępności.

Filtruje dane telemetryczne dla wszystkich syntetycznych żądań:


           <Processor type="SyntheticSourceFilter" />

Filtruje dane telemetryczne dla określonych syntetycznych źródeł:


           <Processor type="SyntheticSourceFilter" >
                  <Add name="NotNeeded" value="source1,source2"/>
           </Processor>
  • NotNeeded: Rozdzielona przecinkami lista syntetycznych nazw źródłowych

Filtr zdarzeń telemetrii

Filtruje zdarzenia niestandardowe, które zostały zarejestrowane przy użyciu funkcji TrackEvent():


           <Processor type="TelemetryEventFilter" >
                  <Add name="NotNeededNames" value="event1, event2"/>
           </Processor>
  • NotNeededNames: Rozdzielona przecinkami lista nazw zdarzeń

Filtr śledzenia telemetrii

Filtruje ślady dzienników rejestrowane przy użyciu funkcji TrackTrace() lub modułu zbierającego struktury rejestrowania:


           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>
  • Prawidłowe FromSeverityLevel wartości to:

    • WYŁĄCZONE: filtruje wszystkie ślady.
    • TRACE: Brak filtrowania. Równa się poziomowi TRACE.
    • INFORMACJE: Filtruje poziom ŚLEDZENIA.
    • OSTRZEGAJ: Filtruje dane TRACE i INFO.
    • BŁĄD: Filtruje ostrzeżenie, INFORMACJE i ŚLAD.
    • KRYTYCZNE: filtruje wszystkie, ale KRYTYCZNE.

Filtry niestandardowe

W poniższych sekcjach przedstawiono kroki tworzenia własnych filtrów niestandardowych.

Koduj filtr

W kodzie utwórz klasę, która implementuje TelemetryProcessorelement :


    package com.fabrikam.MyFilter;
    import com.microsoft.applicationinsights.extensibility.TelemetryProcessor;
    import com.microsoft.applicationinsights.telemetry.Telemetry;

    public class SuccessFilter implements TelemetryProcessor {

        /* Any parameters that are required to support the filter.*/
        private final String successful;

        /* Initializers for the parameters, named "setParameterName" */
        public void setNotNeeded(String successful)
        {
            this.successful = successful;
        }

        /* This method is called for each item of telemetry to be sent.
           Return false to discard it.
           Return true to allow other processors to inspect it. */
        @Override
        public boolean process(Telemetry telemetry) {
            if (telemetry == null) { return true; }
            if (telemetry instanceof RequestTelemetry)
            {
                RequestTelemetry requestTelemetry = (RequestTelemetry)    telemetry;
                return request.getSuccess() == successful;
            }
            return true;
        }
    }

Wywoływanie filtru w pliku konfiguracji

Teraz w ApplicationInsights.xml:



    <ApplicationInsights>
      <TelemetryProcessors>
        <CustomProcessors>
          <Processor type="com.fabrikam.SuccessFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>
      </TelemetryProcessors>
    </ApplicationInsights>

Wywoływanie filtru (Java Spring)

W przypadku aplikacji opartych na strukturze Spring niestandardowe procesory telemetryczne muszą być zarejestrowane w głównej klasie aplikacji jako fasola. Po uruchomieniu aplikacji zostaną one automatycznie uruchomione.

@Bean
public TelemetryProcessor successFilter() {
      return new SuccessFilter();
}

Możesz utworzyć własne parametry filtru w pliku application.properties. Następnie użyjesz zewnętrznej struktury konfiguracji platformy Spring Boot, aby przekazać te parametry do filtru niestandardowego.

Rozwiązywanie problemów

Ta sekcja zawiera poradę dotyczącą rozwiązywania problemów.

Mój filtr nie działa

Sprawdź, czy podano prawidłowe wartości parametrów. Na przykład czasy trwania powinny być liczbami całkowitymi. Nieprawidłowe wartości spowodują zignorowanie filtru. Jeśli filtr niestandardowy zgłasza wyjątek od konstruktora lub metody zestawu, zostanie zignorowany.

zebrane: metryki wydajności systemu Linux w usłudze Application Insights (przestarzałe)

Aby zapoznać się z metrykami wydajności systemu Linux w usłudze Application Insights, zainstaluj zebraną razem z wtyczką usługi Application Insights. To rozwiązanie typu open source zbiera różne statystyki systemowe i sieciowe.

Zazwyczaj będziesz używać collectd , jeśli usługa internetowa Java została już instrumentowana za pomocą usługi Application Insights. Udostępnia ona więcej danych, które ułatwiają zwiększenie wydajności aplikacji lub diagnozowanie problemów.

Uzyskiwanie klucza instrumentacji

W Azure Portal otwórz zasób usługi Application Insights, w którym mają być wyświetlane dane. Możesz też utworzyć nowy zasób.

Utwórz kopię klucza instrumentacji, który identyfikuje zasób.

Zrzut ekranu przedstawiający okienko przeglądu zasobu usługi Application Insights w Azure Portal z wyróżnionym kluczem instrumentacji.

Instalacja zebrana i wtyczka

Na maszynach z serwerem z systemem Linux:

  1. Zainstaluj zebraną wersję 5.4.0 lub nowszą.
  2. Pobierz wtyczkę modułu zapisywania zebranego przez usługę Application Insights. Zanotuj numer wersji.
  3. Skopiuj plik jar wtyczki do /usr/share/collectd/javapliku .
  4. Edytuj /etc/collectd/collectd.conf:
    • Upewnij się, że wtyczka Java jest włączona.

    • Zaktualizuj element JVMArg, java.class.path aby uwzględnić następujący plik jar. Zaktualizuj numer wersji, aby był zgodny z pobranym numerem wersji:

      • /usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
    • Dodaj ten fragment kodu przy użyciu klucza instrumentacji z zasobu:

      
           LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
           <Plugin ApplicationInsightsWriter>
              InstrumentationKey "Your key"
           </Plugin>
      

      Oto część przykładowego pliku konfiguracji:

      
          ...
          # collectd plugins
          LoadPlugin cpu
          LoadPlugin disk
          LoadPlugin load
          ...
      
          # Enable Java Plugin
          LoadPlugin "java"
      
          # Configure Java Plugin
          <Plugin "java">
            JVMArg "-verbose:jni"
            JVMArg "-Djava.class.path=/usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar:/usr/share/collectd/java/collectd-api.jar"
      
            # Enabling Application Insights plugin
            LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
      
            # Configuring Application Insights plugin
            <Plugin ApplicationInsightsWriter>
              InstrumentationKey "12345678-1234-1234-1234-123456781234"
            </Plugin>
      
            # Other plugin configurations ...
            ...
          </Plugin>
          ...
      

Skonfiguruj inne zebrane wtyczki, które mogą zbierać różne dane z różnych źródeł.

Uruchom ponownie collectd zgodnie z instrukcją.

Wyświetlanie danych w usłudze Application Insights

W zasobie usługi Application Insights otwórz pozycję Metryki i dodaj wykresy. Wybierz metryki, które chcesz zobaczyć w kategorii Niestandardowe .

Domyślnie metryki są agregowane na wszystkich maszynach hosta, z których zostały zebrane metryki. Aby wyświetlić metryki na hosta, w okienku Szczegóły wykresu włącz grupowanie, a następnie wybierz grupowanie według kolekcji CollectD-Host.

Wyklucz przekazywanie określonych statystyk

Domyślnie wtyczka usługi Application Insights wysyła wszystkie dane zebrane przez wszystkie włączone collectd read wtyczki.

Aby wykluczyć dane z określonych wtyczek lub źródeł danych:

  • Edytuj plik konfiguracji.

  • W <Plugin ApplicationInsightsWriter>pliku dodaj wiersze dyrektywy, takie jak te w poniższej tabeli:

    Dyrektywy Efekt
    Exclude disk Wyklucz wszystkie dane zebrane przez wtyczkę disk .
    Exclude disk:read,write Wyklucz źródła o nazwie read i write z disk wtyczki.

Oddzielne dyrektywy z nową linią.

Problemy?

Ta sekcja zawiera porady dotyczące rozwiązywania problemów.

Nie widzę danych w portalu

Wypróbuj następujące opcje:

  • Otwórz pozycję Wyszukaj , aby sprawdzić, czy przybyły nieprzetworzone zdarzenia. Czasami pojawiają się one dłużej w Eksploratorze metryk.
  • Może być konieczne ustawienie wyjątków zapory dla danych wychodzących.
  • Włącz śledzenie w wtyczki usługi Application Insights. Dodaj ten wiersz w pliku <Plugin ApplicationInsightsWriter>:
    • SDKLogger true
  • Otwórz terminal i uruchom collectd w trybie pełnym, aby zobaczyć wszelkie problemy, które zgłasza:
    • sudo collectd -f

Znany problem

Wtyczka zapisu usługi Application Insights jest niezgodna z niektórymi wtyczkami odczytu. Niektóre wtyczki czasami wysyłają NaNelement , ale wtyczka usługi Application Insights oczekuje numeru zmiennoprzecinkowego.

  • Objaw: Dziennik pokazuje błędy, które obejmują "Sztuczna collectd inteligencja: ... SyntaxError: Nieoczekiwany token N.
  • Obejście: Wyklucz dane zebrane przez wtyczkę zapisu problemu.

Metryki monitorowania aplikacji mikrometrów dla kodu aplikacji opartego na maszynie JVM umożliwiają eksportowanie danych do ulubionych systemów monitorowania. W tej sekcji pokazano, jak używać mikrometrów z usługą Application Insights zarówno dla aplikacji Spring Boot, jak i innych niż Spring Boot.

Korzystanie z platformy Spring Boot 1.5x

Dodaj następujące zależności do pliku pom.xml lub build.gradle :

Wykonaj następujące kroki:

  1. Zaktualizuj plik pom.xml aplikacji Spring Boot i dodaj w nim następujące zależności:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-spring-boot-starter</artifactId>
        <version>2.5.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-spring-legacy</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-azure-monitor</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    
  2. Zaktualizuj plik application.properties lub YML przy użyciu klucza instrumentacji usługi Application Insights, używając następującej właściwości:

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. Skompiluj aplikację i uruchom ją.

Poprzednie kroki powinny zostać uruchomione z automatycznie zagregowanymi metrykami zagregowanymi do usługi Azure Monitor.

Korzystanie z platformy Spring 2.x

Dodaj następujące zależności do pliku pom.xml lub build.gradle :

Wykonaj następujące kroki:

  1. Zaktualizuj plik pom.xml aplikacji Spring Boot i dodaj w nim następującą zależność:

    <dependency> 
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-spring-boot-metrics-starter</artifactId>
          <version>2.0.7</version>
    </dependency>
    
  2. Zaktualizuj plik application.properties lub YML przy użyciu klucza instrumentacji usługi Application Insights, używając następującej właściwości:

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. Skompiluj aplikację i uruchom ją.

Poprzednie kroki powinny zostać uruchomione z automatycznie zagregowanymi metrykami zagregowanymi do usługi Azure Monitor. Aby uzyskać więcej informacji na temat dostosowywania szablonu startowego Spring Boot usługi Application Insights, zobacz readme w witrynie GitHub.

Metryki domyślne:

  • Automatycznie skonfigurowane metryki dla oprogramowania Tomcat, JVM, Logback Metrics, Log4J Metrics, Uptime Metrics, Processor Metrics i FileDescriptorMetrics.
  • Jeśli na przykład program Netflix Hystrix znajduje się na ścieżce klasy, otrzymamy również te metryki.
  • Następujące metryki mogą być dostępne przez dodanie odpowiednich fasoli:
    • CacheMetrics (CaffeineCache, EhCache2, GuavaCache, HazelcastCachei JCache)
    • DataBaseTableMetrics
    • HibernateMetrics
    • JettyMetrics
    • Metryki platformy OkHttp3
    • Metryki platformy Kafka

Wyłącz automatyczne zbieranie metryk:

  • Metryki maszyny wirtualnej JVM:
    • management.metrics.binders.jvm.enabled=false
  • Metryki powrotu dzienników:
    • management.metrics.binders.logback.enabled=false
  • Metryki czasu pracy:
    • management.metrics.binders.uptime.enabled=false
  • Metryki procesora:
    • management.metrics.binders.processor.enabled=false
  • FileDescriptorMetrics:
    • management.metrics.binders.files.enabled=false
  • Hystrix Metrics if library on classpath:
    • management.metrics.binders.hystrix.enabled=false
  • Metryki aspektu, jeśli biblioteka w systemie classpath:
    • spring.aop.enabled=false

Uwaga

Określ poprzednie właściwości w pliku application.properties lub application.yml aplikacji Spring Boot.

Używanie mikrometru z aplikacjami internetowymi spoza platformy Spring Boot

Dodaj następujące zależności do pliku pom.xml lub build.gradle :

Wykonaj następujące kroki:

  1. Dodaj następujące zależności w pliku pom.xml lub build.gradle :

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-azure-monitor</artifactId>
            <version>1.1.0</version>
        </dependency>
    
        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>applicationinsights-web-auto</artifactId>
            <version>2.5.0</version>
        </dependency>
    
  2. Jeśli jeszcze tego nie zrobiono, dodaj plik ApplicationInsights.xml w folderze resources. Aby uzyskać więcej informacji, zobacz Dodawanie pliku ApplicationInsights.xml.

  3. Przykładowa klasa Servlet (emituje metrykę czasomierza):

        @WebServlet("/hello")
        public class TimedDemo extends HttpServlet {
    
          private static final long serialVersionUID = -4751096228274971485L;
    
          @Override
          @Timed(value = "hello.world")
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
    
            response.getWriter().println("Hello World!");
            MeterRegistry registry = (MeterRegistry) getServletContext().getAttribute("AzureMonitorMeterRegistry");
    
        //create new Timer metric
            Timer sampleTimer = registry.timer("timer");
            Stream<Integer> infiniteStream = Stream.iterate(0, i -> i+1);
            infiniteStream.limit(10).forEach(integer -> {
              try {
                Thread.sleep(1000);
                sampleTimer.record(integer, TimeUnit.MILLISECONDS);
              } catch (Exception e) {}
               });
          }
          @Override
          public void init() throws ServletException {
            System.out.println("Servlet " + this.getServletName() + " has started");
          }
          @Override
          public void destroy() {
            System.out.println("Servlet " + this.getServletName() + " has stopped");
          }
    
        }
    
    
  4. Przykładowa klasa konfiguracji:

         @WebListener
         public class MeterRegistryConfiguration implements ServletContextListener {
    
           @Override
           public void contextInitialized(ServletContextEvent servletContextEvent) {
    
         // Create AzureMonitorMeterRegistry
           private final AzureMonitorConfig config = new AzureMonitorConfig() {
             @Override
             public String get(String key) {
                 return null;
             }
            @Override
               public Duration step() {
                 return Duration.ofSeconds(60);}
    
             @Override
             public boolean enabled() {
                 return false;
             }
         };
    
      MeterRegistry azureMeterRegistry = AzureMonitorMeterRegistry.builder(config);
    
             //set the config to be used elsewhere
             servletContextEvent.getServletContext().setAttribute("AzureMonitorMeterRegistry", azureMeterRegistry);
    
           }
    
           @Override
           public void contextDestroyed(ServletContextEvent servletContextEvent) {
    
           }
         }
    

Aby dowiedzieć się więcej o metrykach, zobacz dokumentację mikrometrów.

Inny przykładowy kod dotyczący tworzenia różnych typów metryk można znaleźć w oficjalnym repozytorium GitHub Micrometer.

Wiązanie większej liczby kolekcji metryk

W poniższych sekcjach pokazano, jak zebrać więcej metryk.

SpringBoot/Spring

Utwórz fasolę odpowiedniej kategorii metryk. Załóżmy na przykład, że potrzebujesz metryk pamięci podręcznej Guava:

    @Bean
    GuavaCacheMetrics guavaCacheMetrics() {
        Return new GuavaCacheMetrics();
    }

Kilka metryk nie jest domyślnie włączonych, ale może być powiązanych z poprzednią modą. Aby uzyskać pełną listę, zobacz repozytorium Micrometer GitHub.

Aplikacje inne niż Spring

Dodaj następujący kod powiązania do pliku konfiguracji:

    New GuavaCacheMetrics().bind(registry);

Następne kroki