Przewodnik rozwiązywania problemów: Usługa Azure Monitor Application Insights dla języka Java

Ten artykuł zawiera informacje dotyczące rozwiązywania typowych problemów, które mogą wystąpić podczas instrumentacji aplikacji Java przy użyciu agenta Języka Java dla usługi Application Insights. Usługa Application Insights to funkcja usługi platformy Azure Monitor.

Sprawdzanie pliku dziennika samodzielnej diagnostyki

Domyślnie usługa Application Insights Java 3. X tworzy plik dziennika o nazwie applicationinsights.log w tym samym katalogu, w którym jest przechowywany plik applicationinsights-agent-3.2.11.jar .

Ten plik dziennika jest pierwszym miejscem do sprawdzenia pod kątem wskazówek dotyczących wszelkich problemów, które mogą wystąpić.

Jeśli usługa Application Insights nie generuje pliku dziennika, upewnij się, że aplikacja Java ma uprawnienie do zapisu w katalogu, w którym jest przechowywany plik applicationinsights-agent-3.2.11.jar .

Jeśli usługa Application Insights nadal nie generuje pliku dziennika, sprawdź stdout dziennik z aplikacji Java pod kątem błędów. Application Insights Java 3. X powinien rejestrować wszelkie błędy, które uniemożliwiłyby rejestrowanie w zwykłej lokalizacji w dzienniku stdout .

Rozwiązywanie problemów z łącznością

Zestawy SDK usługi Application Insights i agenci wysyłają dane telemetryczne do pozyskiwania jako wywołania REST w naszych punktach końcowych pozyskiwania. Aby przetestować łączność z serwera internetowego lub komputera hosta aplikacji z punktami końcowymi usługi pozyskiwania, użyj nieprzetworzonych klientów REST z programu PowerShell lub uruchom polecenia curl. Zobacz Rozwiązywanie problemów z brakującymi danymi telemetrycznymi aplikacji w usłudze Azure Monitor Application Insights.

Jeśli agent java usługi Application Insights powoduje problem z łącznością, rozważ następujące opcje:

  • Sprawdź parametry połączenia konfiguracji usługi Application Insights.

  • Użyj usługi Application Insights Java w wersji 3.4.6 lub nowszej, aby sprawdzić, czy magazyn kluczy Java zawiera wymagany certyfikat. W tym celu włącz funkcję samodzielnej diagnostyki na TRACE poziomie. Czy w dziennikach usługi Application Insights jest widoczny następujący wpis?

    TRACE c.m.applicationinsights.agent — certyfikat główny usługi Application Insights w magazynie kluczy Java: false

    Jeśli ten wpis jest widoczny, zapoznaj się z tematem Import SSL certificates to import a root certificate in the Java keystore ( Importowanie certyfikatów SSL w celu zaimportowania certyfikatu głównego w magazynie kluczy Java).

  • Jeśli używasz -Djsse.enableSNIExtension=false tej opcji, spróbuj uruchomić agenta bez tej opcji. W usłudze Application Insights Java w wersji 3.4.5, jeśli określisz -Djsse.enableSNIExtension=false, w dziennikach zostanie wyświetlony następujący wpis o błędzie:

    WARN c.m.applicationinsights.agent — wykryto właściwość systemową -Djsse.enableSNIExtension=false. Jeśli masz problemy z połączeniem z usługą Application Insights, usuń to.

  • Jeśli żadna z poprzednich opcji nie jest przydatna, możesz użyć narzędzi do rozwiązywania problemów.

Nie można uruchomić maszyny wirtualnej Java (JVM)

Jeśli maszyna wirtualna Java (JVM) nie zostanie uruchomiona, może zwrócić komunikat "Błąd podczas otwierania pliku zip lub brak manifestu JAR". Aby rozwiązać ten problem, zobacz poniższą tabelę.

Problem Akcja
Nie można odnaleźć pliku archiwum Java (JAR) dla agenta. Upewnij się, że w argumencie JVM określono prawidłową ścieżkę jar agenta -javaagent .
Plik JAR agenta mógł zostać uszkodzony podczas transferu plików. Spróbuj ponownie pobrać plik JAR agenta.

Uruchamianie aplikacji Tomcat Java trwa kilka minut

Jeśli usługa Application Insights została włączona do monitorowania aplikacji Tomcat, może wystąpić kilkuminutowe opóźnienie w czasie potrzebnym do uruchomienia aplikacji. To opóźnienie jest spowodowane tym, że firma Tomcat próbuje przeskanować pliki JAR usługi Application Insights podczas uruchamiania aplikacji. Aby przyspieszyć czas uruchamiania aplikacji, można wykluczyć pliki JAR usługi Application Insights z listy zeskanowanych plików. Skanowanie tych plików JAR nie jest konieczne.

Uaktualnij usługę Java 2 usługi Application Insights. x zestaw SDK

Jeśli używasz już środowiska Java 2 usługi Application Insights. x zestawU SDK w aplikacji, możesz nadal z niego korzystać. Usługa Application Insights Java 3. X agent wykrywa, przechwytuje i koreluje wszelkie niestandardowe dane telemetryczne wysyłane za pośrednictwem 2. x zestaw SDK. Zapobiega to również zduplikowanym telemetrii przez pominięcie automatycznej kolekcji 2. X zestaw SDK to robi. Aby uzyskać więcej informacji, zobacz Uaktualnianie z języka Java 2.x zestaw SDK.

Uaktualnianie z wersji zapoznawczej usługi Application Insights w języku Java 3.0

Jeśli uaktualniasz wersję zapoznawczą agenta języka Java 3.0 w wersji zapoznawczej, dokładnie przejrzyj wszystkie opcje konfiguracji . Struktura JSON została zmieniona w wersji 3.0 ogólnej dostępności (GA).

Zmiany te obejmują:

  • Nazwa pliku konfiguracji została zmieniona z ApplicationInsights.json na applicationinsights.json.

  • Węzeł instrumentationSettings nie jest już obecny. Cała zawartość w programie instrumentationSettings jest przenoszona na poziom główny.

  • Węzły konfiguracji, takie jak , , i heartbeat są przenoszone poza preview poziom instrumentationgłówny. jmxMetricssampling

Niektóre rejestrowanie nie jest zbierane automatycznie

Rejestrowanie jest przechwytywane tylko wtedy, gdy spełnia następujące kryteria:

  • Spełnia on poziom skonfigurowany dla struktury rejestrowania.

  • Spełnia on poziom skonfigurowany dla usługi Application Insights.

Jeśli na przykład struktura rejestrowania jest skonfigurowana do rejestrowania WARN (lub nowszych) z com.example pakietu, a usługa Application Insights jest skonfigurowana do przechwytywania INFO (i powyżej), usługa Application Insights przechwytuje WARN tylko (i powyżej) z com.example pakietu.

Aby upewnić się, że określona instrukcja rejestrowania spełnia skonfigurowany próg struktur rejestrowania, sprawdź, czy jest ona wyświetlana w zwykłym dzienniku aplikacji (w pliku lub konsoli).

Należy również zauważyć, że jeśli obiekt wyjątku jest przekazywany do rejestratora, komunikat dziennika (i szczegóły obiektu wyjątku) pojawi się w Azure Portal w tabeli, a nie traces w exceptions tabeli. Aby wyświetlić komunikaty dziennika w traces tabelach i exceptions , uruchom następujące zapytanie Dzienniki (Kusto):

union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType

Aby uzyskać więcej informacji, zobacz konfigurację rejestrowania zbieranego automatycznie.

Importowanie certyfikatów SSL

Ta sekcja ułatwia rozwiązywanie problemów z wyjątkami związanymi z certyfikatami SSL (Secure Sockets Layer) podczas korzystania z agenta języka Java.

Istnieją dwie różne ścieżki do rozwiązania tego problemu:

  • Jeśli używasz domyślnego magazynu kluczy Java
  • Jeśli używasz niestandardowego magazynu kluczy Java

Jeśli nie masz pewności, którą ścieżkę należy wykonać, sprawdź, czy masz argument JVM, -Djavax.net.ssl.trustStore=.... Jeśli nie masz tego argumentu JVM, prawdopodobnie używasz domyślnego magazynu kluczy Java. Jeśli masz ten argument JVM, prawdopodobnie używasz niestandardowego magazynu kluczy, a argument JVM wskazuje niestandardowy magazyn kluczy.

Jeśli używasz domyślnego magazynu kluczy Java

Domyślny magazyn kluczy Java zwykle ma już wszystkie certyfikaty główne urzędu certyfikacji. Mogą jednak wystąpić pewne wyjątki. Na przykład inny certyfikat główny może podpisać certyfikat punktu końcowego pozyskiwania. Zalecamy wykonanie następujących kroków w celu rozwiązania tego problemu:

  1. Sprawdź, czy certyfikat SSL użyty do podpisania punktu końcowego usługi Application Insights jest już obecny w domyślnym magazynie kluczy. Domyślnie zaufane certyfikaty urzędu certyfikacji są przechowywane w $JAVA_HOME/jre/lib/security/cacerts. Aby wyświetlić listę certyfikatów w magazynie kluczy Java, użyj następującego polecenia:

    keytool -list -v -keystore <path-to-keystore-file>

    Dane wyjściowe można przekierować do pliku tymczasowego, aby można było łatwo wyszukiwać później:

    keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt

  2. Po utworzeniu listy certyfikatów wykonaj kroki pobierania certyfikatu SSL , który został użyty do podpisania punktu końcowego usługi Application Insights.

    Po pobraniu certyfikatu wygeneruj skrót SHA-1 na certyfikacie przy użyciu następującego polecenia:

    keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"

    Skopiuj wartość SHA-1 i sprawdź, czy ta wartość znajduje się w zapisanym wcześniej pliku temp.txt . Jeśli nie możesz znaleźć wartości SHA-1 w pliku tymczasowym, w domyślnym magazynie kluczy Java brakuje pobranego certyfikatu SSL.

  3. Zaimportuj certyfikat SSL do domyślnego magazynu kluczy Java przy użyciu następującego polecenia:

    keytool -import -file "<certificate-file>" -alias "<some-meaningful-name>" -keystore "<path-to-cacerts-file>"

    W tym przykładzie polecenie brzmi następująco:

    keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts

Jeśli używasz niestandardowego magazynu kluczy Java

Jeśli używasz niestandardowego magazynu kluczy Java, może być konieczne zaimportowanie certyfikatów SSL dla punktów końcowych usługi Application Insights do tego magazynu kluczy. Aby rozwiązać ten problem, zalecamy wykonanie następujących dwóch kroków:

  1. Wykonaj następujące kroki, aby pobrać certyfikat SSL z punktu końcowego usługi Application Insights.

  2. Uruchom następujące polecenie, aby zaimportować certyfikat SSL do niestandardowego magazynu kluczy Java:

    keytool -importcert -alias <your-ssl-certificate> -file "<your-downloaded-ssl-certificate-name>.cer" -keystore "<your-keystore-name>" -storepass "<your-keystore-password>" -noprompt

Kroki pobierania certyfikatu SSL

Uwaga

Następujące instrukcje pobierania certyfikatu SSL zostały zweryfikowane w następujących przeglądarkach:

  • Google Chrome
  • Microsoft Edge
  1. https://westeurope-5.in.applicationinsights.azure.com/api/ping Otwórz adres URL w przeglądarce internetowej.

  2. Na pasku adresu przeglądarki wybierz ikonę Wyświetl informacje o witrynie (symbol blokady obok adresu).

  3. Wybierz pozycję Połączenie jest bezpieczne.

  4. Wybierz ikonę Pokaż certyfikat .

  5. W oknie dialogowym Podgląd certyfikatów wybierz kartę Szczegóły .

  6. Na liście Hierarchia certyfikatów wybierz certyfikat, który chcesz pobrać. (Wyświetlany jest certyfikat główny urzędu certyfikacji, certyfikat pośredni i certyfikat SSL liścia).

  7. Wybierz przycisk Eksportuj .

  8. W oknie dialogowym Zapisz jako przejdź do katalogu, w którym chcesz zapisać plik certyfikatu (crt), a następnie wybierz pozycję Zapisz.

  9. Aby zamknąć okno dialogowe Podgląd certyfikatów , wybierz przycisk Zamknij (X).

Ostrzeżenie

Musisz powtórzyć te kroki, aby uzyskać nowy certyfikat przed wygaśnięciem bieżącego certyfikatu. Informacje o wygaśnięciu można znaleźć na karcie Szczegóły okna dialogowego Podgląd certyfikatów .

Po wybraniu certyfikatu na liście Hierarchia certyfikatów znajdź węzeł Ważność na liście Pola certyfikatu . Wybierz pozycję Nie przed w tym węźle, a następnie sprawdź datę i godzinę wyświetlaną w polu Wartość pola . Ten sygnatura czasowa wskazuje, kiedy nowy certyfikat staje się prawidłowy. Podobnie wybierz pozycję Nie po w węźle Ważność, aby dowiedzieć się, kiedy nowy certyfikat wygaśnie .

Understanding UnknownHostException

Jeśli ten wyjątek zostanie wyświetlony po uaktualnieniu do wersji agenta Java nowszej niż 3.2.0, możesz naprawić wyjątek, uaktualniając sieć w celu rozwiązania nowego punktu końcowego, który jest wyświetlany w wyjątku. Przyczyną różnicy między wersjami usługi Application Insights jest to, że wersje późniejsze niż 3.2.0 wskazują nowy punkt końcowy v2.1/trackpozyskiwania w porównaniu ze starszym v2/track. Nowy punkt końcowy pozyskiwania automatycznie przekierowuje cię do punktu końcowego pozyskiwania (nowego punktu końcowego wyświetlanego w wyjątku), który jest najbliżej magazynu dla zasobu usługi Application Insights.

Brakujące zestawy szyfrowania

Jeśli agent java usługi Application Insights wykryje, że nie masz żadnego z zestawów szyfrowania obsługiwanych przez punkty końcowe, z którymi się łączy, agent powiadomi Cię i udostępnia link do brakujących zestawów szyfrowania.

Tło w zestawach szyfrowania

Zestawy szyfrowania wchodzą w grę, zanim aplikacja kliencka i serwer wymieniają informacje za pośrednictwem połączenia SSL lub Transport Layer Security (TLS). Aplikacja kliencka inicjuje uzgadnianie protokołu SSL. Część tego procesu obejmuje powiadamianie serwera o obsługiwanych przez niego zestawach szyfrowania. Serwer odbiera te informacje i porównuje zestawy szyfrowania obsługiwane przez aplikację kliencką z obsługiwanymi przez nią algorytmami. Jeśli serwer znajdzie dopasowanie, powiadamia aplikację kliencką i ustanawia bezpieczne połączenie. Jeśli nie znajdzie dopasowania, serwer odmówi połączenia.

Jak określić zestawy szyfrowania po stronie klienta

W takim przypadku klient jest maszyną JVM, na której działa instrumentowana aplikacja. Począwszy od wersji 3.2.5, usługa Application Insights Java rejestruje komunikat ostrzegawczy, jeśli brakujące zestawy szyfrowania mogą powodować błędy połączenia z jednym z punktów końcowych usługi.

Jeśli używasz starszej wersji środowiska Java usługi Application Insights, skompiluj i uruchom następujący program Java, aby uzyskać listę obsługiwanych zestawów szyfrowania na maszynie JVM:

import javax.net.ssl.SSLServerSocketFactory;

public class Ciphers {
    public static void main(String[] args) {
        SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        String[] defaultCiphers = ssf.getDefaultCipherSuites();
        System.out.println("Default\tCipher");
        for (int i = 0; i < defaultCiphers.length; ++i) {
            System.out.print('*');
            System.out.print('\t');
            System.out.println(defaultCiphers[i]);
        }
    }
}

Punkty końcowe usługi Application Insights obsługują następujące zestawy szyfrowania:

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Jak określić zestawy szyfrowania po stronie serwera

W takim przypadku po stronie serwera znajduje się punkt końcowy pozyskiwania usługi Application Insights lub punkt końcowy metryk usługi Application Insights Live. Możesz użyć narzędzia online, takiego jak SSLLABS , aby określić oczekiwane zestawy szyfrowania oparte na adresie URL punktu końcowego.

Jak dodać brakujące zestawy szyfrowania

Jeśli używasz języka Java 9 lub nowszej wersji, upewnij się, że maszyna JVM zawiera jdk.crypto.cryptoki moduł w folderze jmods . Ponadto jeśli tworzysz niestandardowe środowisko uruchomieniowe Języka Java przy użyciu jlinkpolecenia , upewnij się, że dołączysz ten sam moduł.

W przeciwnym razie te zestawy szyfrowania powinny już być częścią nowoczesnych dystrybucji języka Java 8+. Zalecamy sprawdzenie źródła zainstalowanej dystrybucji języka Java w celu zbadania, dlaczego dostawcy zabezpieczeń w pliku konfiguracji java.security tej dystrybucji języka Java różnią się od standardowych dystrybucji języka Java.

Powolny czas uruchamiania w usługach Application Insights i Java 8

Język Java 8 ma znany problem związany z weryfikacją podpisu pliku JAR agentów Języka Java. Ten problem może wydłużyć czas uruchamiania w usłudze Application Insights. Aby rozwiązać ten problem, można zastosować jedną z następujących opcji:

Alternatywnie możesz wypróbować następującą funkcję eksperymentalną: zwiększenie czasu uruchamiania dla ograniczonej liczby rdzeni procesora CPU. Jeśli podczas korzystania z tej funkcji wystąpią jakiekolwiek problemy, prześlij nam opinię.

Zastrzeżenie dotyczące innych firm

Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.