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 instrumentowania aplikacji Java przy użyciu agenta Java dla usługi Application Insights. Application Insights to funkcja usługi platformy Azure Monitor.
Sprawdzanie pliku dziennika samoobsługowego
Domyślnie usługa Application Insights Java 3.x tworzy plik dziennika o nazwie applicationinsights.log w tym samym katalogu, który przechowuje 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 Zapis do katalogu zawierającego 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 jego 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 do punktów końcowych usługi pozyskiwania, użyj pierwotnych klientów REST z programu PowerShell lub uruchom polecenia curl. Zobacz Rozwiązywanie problemów z brakującą telemetrią 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 języka Java usługi Application Insights 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 widzisz następujący wpis?TRACE c.m.applicationinsights.agent — certyfikat główny usługi Application Insights w magazynie kluczy Java: false
Jeśli widzisz ten wpis, zapoznaj się z tematem Importowanie certyfikatów SSL w celu zaimportowania certyfikatu głównego w magazynie kluczy Java.
Jeśli używasz
-Djsse.enableSNIExtension=false
opcji, spróbuj uruchomić agenta bez tej opcji. W języku Java usługi Application Insights w wersji 3.4.5, jeśli określisz-Djsse.enableSNIExtension=false
wartość , w dziennikach pojawi się następujący wpis o błędzie:WARN c.m.applicationinsights.agent — wykryto właściwość System -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 zostać zwrócony 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 Java w usłudze Tomcat trwa kilka minut
Jeśli usługa Application Insights została włączona do monitorowania aplikacji Tomcat, może wystąpić kilka minut opóźnienia w czasie potrzebnym do uruchomienia aplikacji. To opóźnienie jest spowodowane tym, że serwer Tomcat próbuje przeskanować pliki JAR usługi Application Insights podczas uruchamiania aplikacji. Aby przyspieszyć czas rozpoczęcia aplikacji, możesz wykluczyć pliki JAR usługi Application Insights z listy zeskanowanych plików. Skanowanie tych plików JAR nie jest konieczne.
Uaktualnij środowisko Java 2 usługi Application Insights.x ZESTAW SDK
Jeśli używasz już środowiska Java 2 usługi Application Insights.Zestaw x SDK w aplikacji umożliwia korzystanie z niego. Środowisko Java 3 usługi Application Insights.Agent x wykrywa, przechwytuje i koreluje wszelkie niestandardowe dane telemetryczne wysyłane za pośrednictwem 2.x ZESTAW SDK. Zapobiega również duplikowaniu danych telemetrycznych, pomijając wszystkie automatyczne kolekcje, które mają wartość 2.Zestaw x SDK wykonuje. Aby uzyskać więcej informacji, zobacz Uaktualnianie z języka Java 2.x ZESTAW SDK.
Uaktualnianie z wersji zapoznawczej java 3.0 usługi Application Insights
Jeśli uaktualniasz agenta java 3.0 (wersja zapoznawcza), dokładnie przejrzyj wszystkie opcje konfiguracji. Struktura JSON została zmieniona w wersji ogólnie dostępnej (GA) w wersji 3.0.
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 programieinstrumentationSettings
jest przenoszona na poziom główny.Węzły konfiguracji, takie jak
sampling
,jmxMetrics
,instrumentation
iheartbeat
, są przenoszone zpreview
poziomu głównego.
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 platformy rejestrowania.
Spełnia on poziom skonfigurowany dla usługi Application Insights.
Jeśli na przykład platforma rejestrowania jest skonfigurowana do rejestrowania WARN
(i 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 struktury rejestrowania, sprawdź, czy jest ona wyświetlana w zwykłym dzienniku aplikacji (w pliku lub konsoli).
Zwróć również uwagę, że jeśli obiekt wyjątku zostanie przekazany do rejestratora, komunikat dziennika (i szczegóły obiektu wyjątku) pojawi się w witrynie Azure Portal w exceptions
tabeli zamiast traces
tabeli.
Aby wyświetlić komunikaty dziennika w tabelach i, traces
exceptions
uruchom następujące zapytanie Logs (Kusto):
union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType
Aby uzyskać więcej informacji, zobacz konfigurację rejestrowania zbieranego automatycznie.
Zaimportuj certyfikaty SSL
Ta sekcja ułatwia rozwiązywanie problemów i ewentualnie naprawianie wyjątków związanych z certyfikatami secure Sockets Layer (SSL) podczas korzystania z agenta 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óra ścieżka ma być obserwowana, 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 na niestandardowy magazyn kluczy.
Jeśli używasz domyślnego magazynu kluczy Java
Domyślny magazyn kluczy Java zazwyczaj 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, aby rozwiązać ten problem:
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 ułatwić późniejsze wyszukiwanie:
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt
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.
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 jest odczytywane w następujący sposób:
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:
Wykonaj następujące kroki, aby pobrać certyfikat SSL z punktu końcowego usługi Application Insights.
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 16.
Następujące instrukcje pobierania certyfikatu SSL zostały zweryfikowane w następujących przeglądarkach:
- Google Chrome
- Microsoft Edge
https://westeurope-5.in.applicationinsights.azure.com/api/ping Otwórz adres URL w przeglądarce internetowej.
Na pasku adresu przeglądarki wybierz ikonę Wyświetl informacje o witrynie (symbol blokady obok adresu).
Wybierz pozycję Połączenie jest bezpieczne.
Wybierz ikonę Pokaż certyfikat .
W oknie dialogowym Podgląd certyfikatów wybierz kartę Szczegóły.
Na liście Hierarchia certyfikatów wybierz certyfikat, który chcesz pobrać. (Zostanie wyświetlony certyfikat główny urzędu certyfikacji, certyfikat pośredni i certyfikat SSL liścia).
Wybierz przycisk Eksportuj.
W oknie dialogowym Zapisz jako przejdź do katalogu, w którym chcesz zapisać plik certyfikatu (crt), a następnie wybierz pozycję Zapisz.
Aby zakończyć okno dialogowe Podgląd certyfikatów, wybierz przycisk Zamknij (X).
Ostrzeżenie
Należy 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 certyfikatów. Wybierz pozycję Nie przed w tym węźle, a następnie sprawdź datę i godzinę wyświetlaną w polu Wartość pola. Sygnatura czasowa wskazuje, kiedy nowy certyfikat stanie się prawidłowy. Podobnie wybierz pozycję Nie po węźle Ważność , aby dowiedzieć się, kiedy nowy certyfikat wygaśnie.
Opis błędu UnknownHostException
Jeśli ten wyjątek zostanie wyświetlony po uaktualnieniu do wersji agenta Języka Java nowszej niż 3.2.0, może być możliwe naprawienie wyjątku przez uaktualnienie sieci w celu rozwiązania problemu z nowym punktem końcowym widocznym w wyjątku. Przyczyną różnicy między wersjami usługi Application Insights jest to, że wersje nowsze niż 3.2.0 wskazują nowy punkt końcowy v2.1/track
pozyskiwania , w porównaniu ze starszymi v2/track
wersjami . Nowy punkt końcowy pozyskiwania automatycznie przekierowuje Cię do punktu końcowego pozyskiwania (nowego punktu końcowego wyświetlanego w wyjątku) najbliższego magazynu dla zasobu usługi Application Insights.
Brak zestawów szyfrowania
Jeśli agent języka Java usługi Application Insights wykryje, że nie masz żadnych zestawów szyfrowania obsługiwanych przez punkty końcowe, z którymi się łączy, agent ostrzega Użytkownika i udostępnia link do brakujących zestawów szyfrowania.
Tło w zestawach szyfrowania
Pakiety 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 tym, które pakiety szyfrowania obsługuje. Serwer odbiera te informacje i porównuje zestawy szyfrowania obsługiwane przez aplikację kliencą z obsługiwanymi przez nią algorytmami. Jeśli serwer znajdzie dopasowanie, powiadamia aplikację kliencką i zostanie nawiązane 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ą wirtualną JVM, na której działa instrumentowana aplikacja. Począwszy od wersji 3.2.5, usługa Application Insights w języku Java rejestruje komunikat ostrzegawczy, jeśli brakujące zestawy szyfrowania mogą powodować błędy połączeń 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 w 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 na żywo usługi Application Insights. Za pomocą narzędzia online, takiego jak SSLLABS , można określić oczekiwane zestawy szyfrowania oparte na adresie URL punktu końcowego.
Jak dodać brakujące zestawy szyfrowania
Jeśli używasz środowiska Java 9 lub nowszej wersji, sprawdź, czy maszyna wirtualna JVM zawiera jdk.crypto.cryptoki
moduł w folderze jmods . Ponadto jeśli tworzysz niestandardowe środowisko uruchomieniowe Java przy użyciu polecenia jlink
, upewnij się, że dołączysz ten sam moduł.
W przeciwnym razie te zestawy szyfrowania powinny być już 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 java różnią się od standardowych dystrybucji Języka Java.
Wolny czas uruchamiania w usłudze Application Insights
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 zwiększyć czas uruchamiania w usłudze Application Insights. Aby rozwiązać ten problem, możesz zastosować jedną z następujących opcji:
Jeśli aplikacja jest oparta na środowisku Spring Boot, programowo dołącz agenta Java usługi Application Insights do maszyny wirtualnej JVM.
Użyj języka Java w wersji 11 lub nowszej.
Środowisko Java wyższe niż wersja 8
Aby rozwiązać ten problem z agentem Java usługi Application Insights, wypróbuj jedną z następujących metod:
- Użyj konfiguracji platformy Azure z większą mocą procesora CPU.
- Wyłącz niektóre instrumentacje opisane w temacie Pomiń określone autokolektowane dane telemetryczne.
- Wypróbuj tę eksperymentalną funkcję: poprawa czasu uruchamiania dla ograniczonej liczby rdzeni procesora CPU. Jeśli podczas korzystania z tej funkcji wystąpią jakiekolwiek problemy, prześlij nam opinię.
Możesz również wypróbować rozwiązania do monitorowania natywne dla języka Java, które mają zastosowanie do aplikacji opartej na maszynie JVM:
- Dzięki rozwiązaniu Spring Boot dystrybucja microsoft startowego OpenTelemetry.
- Dzięki quarkus, eksporter kwarkus Opentelemetry dla platformy Microsoft Azure.
Opis zduplikowanych identyfikatorów operacji
Logika aplikacji może spowodować ponowne użycie identyfikatora operacji przez wiele elementów telemetrii, jak pokazano w tym przykładzie. Duplikacja może również pochodzić z żądań przychodzących. Aby to zidentyfikować, użyj jednej z następujących metod:
Włącz przechwytywanie nagłówka
traceparent
w pliku applicationinsigths.json w następujący sposób:{ "preview": { "captureHttpServerHeaders": { "requestHeaders": [ "traceparent" ] } } }
Włącz samodzielną diagnostykę na poziomie DEBUGowania i uruchom ponownie aplikację.
W poniższym przykładzie dziennika identyfikator operacji pochodzi z żądania przychodzącego, a nie usługi Application Insights:
{"ver":1,"name":"Request",...,"ai.operation.id":"4e757357805f4eb18705abd24326b550)","ai.operation.parentId":"973487efc3db7d03"},"data":{"baseType":"RequestData","baseData":{...,"properties":{"http.request.header.traceparent":"00-4e757357805f4eb18705abd24326b550-973487efc3db7d03-01", ...}}}}
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 na temat platformy Azure.