Sorun giderme kılavuzu: Java için Azure İzleyici Application Insights

Bu makalede, Application Insights için Java aracısını kullanarak bir Java uygulamasını izleme sırasında oluşabilecek yaygın sorunları çözmek için sorun giderme bilgileri sağlanır. Application Insights, Azure İzleyici platform hizmetinin bir özelliğidir.

Kendi kendine tanılama günlük dosyasını denetleme

Varsayılan olarak, Application Insights Java 3. x , applicationinsights-agent-3.2.11.jar dosyasını barındıran dizinde applicationinsights.log adlı bir günlük dosyası oluşturur .

Bu günlük dosyası, karşılaştığınız sorunlarla ilgili ipuçlarının denetlenebileceği ilk yerdir.

Application Insights günlük dosyası oluşturmazsa Java uygulamanızın applicationinsights-agent-3.2.11.jar dosyasını tutan dizinde Yazma iznine sahip olduğundan emin olun.

Application Insights yine de bir günlük dosyası oluşturmuyorsa, Java uygulamanızdaki günlükte hatalar olup olmadığını denetleyin stdout . Application Insights Java 3. x , günlükteki normal konumuna stdout günlüğe kaydetmesini engelleyecek hataları günlüğe kaydetmelidir.

Bağlantı sorunlarını giderme

Application Insights SDK'ları ve aracıları, alım uç noktalarımızda REST çağrıları olarak alınması için telemetri gönderir. Web sunucunuzdan veya uygulama ana bilgisayarınızdan alma hizmeti uç noktalarına bağlantıyı test etmek için PowerShell'den ham REST istemcilerini kullanın veya curl komutlarını çalıştırın. Bkz . Azure İzleyici Application Insights'ta eksik uygulama telemetrisi sorunlarını giderme.

Application Insights Java aracısı bağlantı sorununa neden oluyorsa aşağıdaki seçenekleri göz önünde bulundurun:

  • Application Insights yapılandırması için bağlantı dizesi doğrulayın.

  • Java anahtar deposunun gerekli bir sertifika içerdiğini doğrulamak için Application Insights Java sürüm 3.4.6 veya sonraki bir sürümü kullanın. Bunu yapmak için kendi kendine tanılama özelliğiniTRACE düzeyde etkinleştirin. Application Insights günlüklerinde aşağıdaki girdiyi görüyor musunuz?

    TRACE c.m.applicationinsights.agent - Java anahtar deposunda Application Insights kök sertifikası: false

    Bu girdiyi görürseniz, Java anahtar deposundaki bir kök sertifikayı içeri aktarmak için SSL sertifikalarını içeri aktarma konusuna bakın.

  • seçeneğini kullanırsanız -Djsse.enableSNIExtension=false , aracıyı bu seçenek olmadan çalıştırmayı deneyin. Application Insights Java sürüm 3.4.5'ten belirtirseniz -Djsse.enableSNIExtension=false, günlüklerde aşağıdaki hata girdisi görüntülenir:

    WARN c.m.applicationinsights.agent - Sistem özelliği -Djsse.enableSNIExtension=false algılandı. Application Insights ile ilgili bağlantı sorunlarınız varsa lütfen bunu kaldırın.

  • Önceki seçeneklerden hiçbiri yararlı değilse sorun giderme araçlarını kullanabilirsiniz.

Java sanal makinesi (JVM) başlatılamıyor

Java sanal makinesi (JVM) başlatılmazsa , "Zip dosyası açma hatası veya JAR bildirimi eksik" iletisi döndürebilir. Bu sorunu gidermek için aşağıdaki tabloya bakın.

Sorun Eylem
Aracı için Java arşiv (JAR) dosyası bulunamadı. JVM bağımsız değişkeninde geçerli bir aracı JAR yolu belirttiğinizden -javaagent emin olun.
Aracı JAR dosyası dosya aktarımı sırasında bozulmuş olabilir. Aracı JAR dosyasını yeniden indirmeyi deneyin.

Tomcat Java uygulamalarının başlatılması birkaç dakika sürer

Application Insights'ı Tomcat uygulamanızı izlemek için etkinleştirdiyseniz, uygulamanın başlatılması için gereken birkaç dakika gecikme olabilir. Tomcat, uygulama başlatma sırasında Application Insights JAR dosyalarını taramaya çalıştığından bu gecikmeye neden oluyor. Uygulamanın başlangıç zamanını hızlandırmak için Application Insights JAR dosyalarını taranan dosyalar listesinden hariç tutabilirsiniz. Bu JAR dosyalarını taramak gerekli değildir.

Application Insights Java 2'den yükseltme. x SDK

Application Insights Java 2'yi zaten kullanıyorsanız. x SDK'yı uygulamanızda kullanmaya devam edebilirsiniz. Application Insights Java 3. x aracısı, 2 üzerinden gönderdiğiniz tüm özel telemetri verilerini algılar, yakalar ve bağıntılar. x SDK. Ayrıca, 2'nin otomatik koleksiyonunu gizleyerek yinelenen telemetriyi önler. x SDK'sı yapar. Daha fazla bilgi için bkz . Java 2'den yükseltme.x SDK.

Application Insights Java 3.0 önizlemesinden yükseltme

Java 3.0 Preview aracısından yükseltme yapıyorsanız tüm yapılandırma seçeneklerini dikkatle gözden geçirin. JSON yapısı 3.0 genel kullanılabilirlik (GA) sürümünde değiştirilir.

Bu değişiklikler şunlardır:

  • Yapılandırma dosyası adı ApplicationInsights.json applicationinsights.json olarak değiştirildi.

  • Düğüm instrumentationSettings artık yok. içindeki instrumentationSettings tüm içerik kök düzeyine taşınır.

  • , , ve gibi samplingyapılandırma düğümleri kök düzeyine taşınırpreview.heartbeatinstrumentationjmxMetrics

Bazı günlükler otomatik olarak toplanmaz

Günlüğe kaydetme yalnızca aşağıdaki ölçütleri karşılıyorsa yakalanır:

  • Günlük çerçevesi için yapılandırılan düzeyi karşılar.

  • Application Insights için yapılandırılan düzeyi karşılar.

Örneğin, günlük çerçeveniz paketten günlüğe (WARNve üzeri) kaydedilecek şekilde yapılandırıldıysa ve Application Insights (ve üzeri) yakalayacak INFO şekilde yapılandırıldıysa, Application Insights paketten com.example yalnızca (ve üzerini) yakalar WARN .com.example

Belirli bir günlük deyiminin günlük çerçevelerinin yapılandırılmış eşiğine uyduğundan emin olmak için, her zamanki uygulama günlüğünüzde (dosyada veya konsolda) göründüğünden emin olun.

Günlükçüye bir özel durum nesnesi geçirilirse, tablo yerine tablodaki Azure portal günlük iletisinin (ve özel durum nesnesi ayrıntılarının) göründüğüne exceptionstraces de dikkat edin. Hem hem exceptions de traces tablolarındaki günlük iletilerini görmek için aşağıdaki Günlükler (Kusto) sorgusunu çalıştırın:

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

Daha fazla bilgi için bkz. otomatik olarak toplanan günlük yapılandırması.

SSL sertifikalarını içeri aktarma

Bu bölüm, Java aracısını kullandığınızda Güvenli Yuva Katmanı (SSL) sertifikalarıyla ilgili özel durumları gidermenize ve düzeltmenize yardımcı olur.

Bu sorunu çözmek için iki farklı yol vardır:

  • Varsayılan java anahtar deposu kullanıyorsanız
  • Özel java anahtar deposu kullanıyorsanız

Hangi yolu izleyeceğinizi bilmiyorsanız JVM bağımsız değişkenine -Djavax.net.ssl.trustStore=...sahip olup olmadığınızı denetleyin. Bu JVM bağımsız değişkenine sahip değilseniz, büyük olasılıkla varsayılan Java keystore'unu kullanıyorsunuz demektir. Bu JVM bağımsız değişkenine sahipseniz, büyük olasılıkla özel bir anahtar deposu kullanıyorsunuz demektir ve JVM bağımsız değişkeni sizi özel anahtar deponuza gösterir.

Varsayılan Java keystore kullanıyorsanız

Varsayılan Java anahtar deposu genellikle tüm CA kök sertifikalarına sahiptir. Ancak bazı özel durumlar olabilir. Örneğin, farklı bir kök sertifika alım uç noktası sertifikasını imzalayabilir. Bu sorunu çözmek için aşağıdaki adımları izlemenizi öneririz:

  1. Application Insights uç noktasını imzalamak için kullanılan SSL sertifikasının varsayılan anahtar deposunda zaten mevcut olup olmadığını denetleyin. Varsayılan olarak, güvenilen CA sertifikaları $JAVA_HOME/jre/lib/security/cacerts içinde depolanır. Java anahtar deposundaki sertifikaları listelemek için aşağıdaki komutu kullanın:

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

    Çıkışı geçici bir dosyaya yeniden yönlendirerek daha sonra kolayca arama yapabilirsiniz:

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

  2. Sertifikaların listesini aldıktan sonra, Application Insights uç noktasını imzalamak için kullanılan SSL sertifikasını indirme adımlarını izleyin.

    Sertifikayı indirdikten sonra, aşağıdaki komutu kullanarak sertifikada bir SHA-1 karması oluşturun:

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

    SHA-1 değerini kopyalayın ve bu değerin daha önce kaydettiğiniz temp.txt dosyasında bulunup bulunmadığını denetleyin. Geçici dosyada SHA-1 değerini bulamazsanız, indirilen SSL sertifikası varsayılan Java anahtar deposunda eksiktir.

  3. Aşağıdaki komutu kullanarak SSL sertifikasını varsayılan Java anahtar deposuna aktarın:

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

    Bu örnekte komut aşağıdaki gibi okunur:

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

Özel java anahtar deposu kullanıyorsanız

Özel bir Java anahtar deposu kullanıyorsanız, Application Insights uç noktaları için SSL sertifikalarını bu anahtar deposuna aktarmanız gerekebilir. Bu sorunu çözmek için aşağıdaki iki adımı öneririz:

  1. Application Insights uç noktasından SSL sertifikasını indirmek için bu adımları izleyin.

  2. SSL sertifikasını özel Java anahtar deposuna aktarmak için aşağıdaki komutu çalıştırın:

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

SSL sertifikasını indirme adımları

Not

Aşağıdaki SSL sertifikası indirme yönergeleri aşağıdaki tarayıcılarda doğrulanmıştır:

  • Google Chrome
  • Microsoft Edge
  1. https://westeurope-5.in.applicationinsights.azure.com/api/ping URL adresini bir web tarayıcısında açın.

  2. Tarayıcının adres çubuğunda Site bilgilerini görüntüle simgesini (adresin yanındaki kilit simgesi) seçin.

  3. Bağlantı güvenli'yi seçin.

  4. Sertifikayı göster simgesini seçin.

  5. Sertifika Görüntüleyicisi iletişim kutusunda Ayrıntılar sekmesini seçin.

  6. Sertifika Hiyerarşisi listesinde, indirmek istediğiniz sertifikayı seçin. (CA kök sertifikası, ara sertifika ve yaprak SSL sertifikası gösterilir.)

  7. Dışarı Aktar düğmesini seçin.

  8. Farklı Kaydet iletişim kutusunda, sertifika (.crt) dosyasını kaydetmek istediğiniz dizine gidin ve Kaydet'i seçin.

  9. Sertifika Görüntüleyicisi iletişim kutusundan çıkmak için Kapat (X) düğmesini seçin.

Uyarı

Geçerli sertifikanın süresi dolmadan önce yeni sertifikayı almak için bu adımları yinelemeniz gerekir. Süre sonu bilgilerini Sertifika Görüntüleyicisi iletişim kutusunun Ayrıntılar sekmesinde bulabilirsiniz.

Sertifika Hiyerarşisi listesinde sertifikayı seçtikten sonra, Sertifika Alanları listesinde Geçerlilik düğümünü bulun. Bu düğümde Önceki Değil'i seçin ve alan değeri kutusunda gösterilen tarih ve saati inceleyin. Bu zaman damgası, yeni sertifikanın ne zaman geçerli olduğunu gösterir. Benzer şekilde, yeni sertifikanın süresinin ne zaman doldığını öğrenmek için Geçerlilik düğümünden Sonra Değil'i seçin.

UnknownHostException'i anlama

3.2.0'dan sonraki bir Java aracısı sürümüne yükselttikten sonra bu özel durumu görürseniz, özel durumda gösterilen yeni uç noktayı çözümlemek için ağınızı yükselterek özel durumu düzeltebilirsiniz. Application Insights sürümleri arasındaki farkın nedeni, 3.2.0'dan sonraki sürümlerin yeni alım uç noktasına v2.1/track(eskisine v2/trackgöre) işaret olmasıdır. Yeni alım uç noktası otomatik olarak Application Insights kaynağınızın depolama alanına en yakın olan alım uç noktasına (özel durumda gösterilen yeni uç nokta) yönlendirir.

Eksik şifre paketleri

Application Insights Java aracısı bağlandığı uç noktalar tarafından desteklenen şifreleme paketlerinden herhangi birine sahip olmadığınızı algılarsa, aracı sizi uyarır ve eksik şifreleme paketlerine bir bağlantı sağlar.

Şifre paketlerinin arka planı

Şifreleme paketleri, bir istemci uygulaması ve sunucu SSL veya Aktarım Katmanı Güvenliği (TLS) bağlantısı üzerinden bilgi alışverişinde bulunmadan önce devreye girer. İstemci uygulaması bir SSL el sıkışması başlatır. Bu işlemin bir bölümü, hangi şifreleme paketlerini desteklediğini sunucuya bildirmeyi içerir. Sunucu bu bilgileri alır ve istemci uygulaması tarafından desteklenen şifre paketlerini desteklediği algoritmalarla karşılaştırır. Sunucu bir eşleşme bulursa istemci uygulamasına bildirir ve güvenli bir bağlantı kurulur. Eşleşme bulamazsa, sunucu bağlantıyı reddeder.

İstemci tarafı şifreleme paketlerini belirleme

Bu durumda istemci, izlemeli uygulamanızın üzerinde çalıştığı JVM'dir. Sürüm 3.2.5'den başlayarak, eksik şifreleme paketleri hizmet uç noktalarından birine bağlantı hatalarına neden olabilirse Application Insights Java bir uyarı iletisi kaydeder.

Application Insights Java'nın önceki bir sürümünü kullanıyorsanız JVM'nizde desteklenen şifreleme paketlerinin listesini almak için aşağıdaki Java programını derleyin ve çalıştırın:

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]);
        }
    }
}

Application Insights uç noktaları aşağıdaki şifreleme paketlerini destekler:

  • 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

Sunucu tarafı şifreleme paketlerini belirleme

Bu durumda, sunucu tarafı Application Insights alım uç noktası veya Application Insights Canlı ölçümler uç noktasıdır. Uç nokta URL'sini temel alan beklenen şifreleme paketlerini belirlemek için SSLLABS gibi bir çevrimiçi araç kullanabilirsiniz.

Eksik şifreleme paketlerini ekleme

Java 9 veya sonraki bir sürümü kullanıyorsanız, JVM'nin modülü jmods klasörüne dahil jdk.crypto.cryptoki olduğundan emin olun. Ayrıca kullanarak özel bir Java çalışma zamanı jlinkoluşturuyorsanız aynı modülü eklediğinizden emin olun.

Aksi takdirde, bu şifre paketleri zaten modern Java 8+ dağıtımlarının bir parçası olmalıdır. Bu Java dağıtımının java.security yapılandırma dosyasındaki güvenlik sağlayıcılarının standart Java dağıtımlarından neden farklı olduğunu araştırmak için yüklü Java dağıtımınızın kaynağını denetlemenizi öneririz.

Application Insights ve Java 8'de yavaş başlatma süresi

Java 8'de Java aracılarının JAR dosya imzası doğrulamasıyla ilgili bilinen bir sorun vardır. Bu sorun Application Insights'ta başlangıç süresini artırabilir. Bu sorunu düzeltmek için aşağıdaki seçeneklerden birini uygulayabilirsiniz:

Alternatif olarak, şu deneysel özelliği deneyebilirsiniz: Sınırlı sayıda CPU çekirdeği için başlangıç süresi iyileştirmesi. Bu özelliği kullanırken herhangi bir sorunla karşılaşırsanız bize geri bildirim gönderin.

Üçüncü taraf bilgileri hakkında yasal uyarı

Bu makalede adı geçen üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.