Java 2.x için Application Insights

Dikkat

Bu makale, artık önerilmemiş olan Application Insights Java 2.x için geçerlidir.

En son sürüme ilişkin belgeler Application Insights Java 3.x'te bulunabilir.

Bu makalede Application Insights Java 2.x'i kullanmayı öğreneceksiniz. Bu makale, şunları nasıl yapacağınızı gösterir:

  • Başlarken istekleri izlemeyi, bağımlılıkları izlemeyi, performans sayaçlarını toplamayı, performans sorunlarını ve özel durumlarını tanılamayı ve kullanıcıların uygulamanızla ne yaptığını izlemek için kod yazmayı öğrenin.
  • İzleme günlüklerini Application Insights'a gönderin ve Application Insights portalını kullanarak bunları keşfedin.
  • Java web uygulamalarında bağımlılıkları, yakalanan özel durumları ve yöntem yürütme sürelerini izleyin.
  • Java web uygulamanızda telemetriyi filtreleyin.
  • kullanarak collectdApplication Insights'ta Linux sistem performansı ölçümlerini keşfedin.
  • Java sanal makinesi (JVM) tabanlı uygulama kodu için ölçümleri ölçün. Mikrometre uygulama izlemesini kullanarak verileri sık kullandığınız izleme sistemlerine aktarın.

Not

31 Mart 2025’te izleme anahtarı alımı desteği sona erecektir. İzleme anahtarı alımı çalışmaya devam edecek, ancak artık özellik için güncelleştirmeler veya destek sağlamayacağız. Yeni özelliklerden yararlanmak için bağlantı dizelerine geçiş.

Java web projesinde Application Insights ile başlarken

Bu bölümde Application Insights SDK'sını istekleri izlemek, bağımlılıkları izlemek, performans sayaçlarını toplamak, performans sorunlarını ve özel durumlarını tanılamak ve kullanıcıların uygulamanızla ne yaptığını izlemek için kod yazmak için kullanırsınız.

Application Insights, web geliştiricileri için canlı uygulamanızın performansını ve kullanımını anlamanıza yardımcı olan genişletilebilir bir analiz hizmetidir. Application Insights; Linux, Unix veya Windows üzerinde çalışan Java uygulamalarını destekler.

Ön koşullar

Gerekenler:

Application Insights izleme anahtarı edinme

  1. Azure Portal’ında oturum açın.

  2. Azure portalındabir Application Insights kaynağı oluşturun. Uygulama türünü Java web uygulaması olarak ayarlayın.

  3. Yeni kaynağın izleme anahtarını bulun. Bu anahtarı hemen kod projenize yapıştırmalısınız.

    İzleme anahtarının vurgulandığı Azure portal application insights kaynağının Genel Bakış bölmesinin ekran görüntüsü.

Projenize Java için Application Insights SDK’sı ekleme

Proje türünüzü seçin.

Projeniz derleme için Maven kullanacak şekilde ayarlanmışsa aşağıdaki kodu pom.xml dosyanızla birleştirin. Daha sonra, proje bağımlılıklarını ikili dosyaları indirmek için yenileyin.

    <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>

Sık sorulan sorular

  • , -webve -core bileşenleri arasındaki -web-autoilişki nedir?

    • applicationinsights-web-auto , Application Insights servlet filtresini çalışma zamanında otomatik olarak kaydederek HTTP servlet istek sayılarını ve yanıt sürelerini izleyen ölçümler sağlar.
    • applicationinsights-web ayrıca HTTP servlet istek sayılarını ve yanıt sürelerini izleyen ölçümler sağlar. Ancak uygulamanızda Application Insights servlet filtresinin el ile kaydedilmesi gerekir.
    • applicationinsights-core , örneğin uygulamanız servlet tabanlı değilse size çıplak API'yi verir.
  • SDK’yı en son sürüme nasıl güncelleştirmeliyim?

    • Kasım 2020 itibarıyla Java uygulamalarını izlemek için Application Insights Java 3.x kullanmanızı öneririz. Kullanmaya başlama hakkında daha fazla bilgi için bkz. Application Insights Java 3.x.

ApplicationInsights.xml dosyası ekleme

projenizdeki resources klasörüneApplicationInsights.xmlekleyin veya projenizin dağıtım sınıfı yoluna eklendiğinden emin olun. Aşağıdaki XML dosyasını buraya kopyalayın.

ölçümlü izleme anahtarını, Azure portal alınanla değiştirin.

<?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>

İsteğe bağlı olarak, yapılandırma dosyası uygulamanızın erişebileceği herhangi bir konumda olabilir. sistem özelliği -Dapplicationinsights.configurationDirectory ,ApplicationInsights.xmliçeren dizini belirtir. Örneğin, E:\myconfigs\appinsights\ApplicationInsights.xml konumunda bulunan bir yapılandırma dosyası özelliğiyle -Dapplicationinsights.configurationDirectory="E:\myconfigs\appinsights"yapılandırılabilir.

  • İzleme anahtarı telemetrinin her öğesiyle birlikte gönderilir ve Application Insights’ın bunu kaynağınızda görüntülemesini isteyin.
  • HTTP isteği bileşeni isteğe bağlıdır. İstek ve yanıt süreleri hakkında telemetriyi otomatik olarak portala gönderir.
  • Olay bağıntısı, HTTP isteği bileşenine bir ektir. Sunucu tarafından alınan her isteğe bir tanımlayıcı atar. Ardından bu tanımlayıcıyı telemetrinin her öğesine özelliği Operation.Idolarak ekler. Tanılama aramasında bir filtre ayarlayarak her istekle ilişkili telemetriyi ilişkilendirmenizi sağlar.

İzleme anahtarını ayarlamak için alternatif yollar

Application Insights SDK’sı anahtarı şu sırayla arar:

  • Sistem özelliği: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
  • Ortam değişkeni: APPINSIGHTS_INSTRUMENTATIONKEY
  • Yapılandırma dosyası: ApplicationInsights.xml

Ayrıca kod içinde ayarlayabilirsiniz:

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

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

Aracı ekleme

Giden HTTP çağrılarını, JDBC sorgularını, uygulama günlüğünü ve daha iyi işlem adlandırmasını yakalamak için Java aracısını yükleyin.

Uygulamanızı çalıştırma

Geliştirme makinenizde hata ayıklama modunda çalıştırın veya sunucunuzda yayımlayın.

Application Insights'da telemetrinizi görüntüleme

Azure portal Application Insights kaynağınıza dönün.

HTTP istekleri verileri genel bakış bölmesinde görüntülenir. Orada değilse, birkaç saniye bekleyin ve yenile'yi seçin.

Örnek verilere genel bakış gösteren ekran görüntüsü.

Ölçümler hakkında daha fazla bilgi edinin.

Daha ayrıntılı derlenmiş ölçümler görmek için herhangi bir grafiğe tıklayın.

Grafikler içeren Application Insights hataları bölmesini gösteren ekran görüntüsü.

Örnek veriler

Ayrı ayrı örnekleri görmek için belirli bir istek türüne tıklayın.

Belirli bir örnek görünümde detaya gitme adımlarını gösteren ekran görüntüsü.

Log Analytics: Güçlü sorgu dili

Daha fazla veri biriktirdikçe, verileri toplamak ve tek tek örnekleri bulmak için sorgular çalıştırabilirsiniz. Log Analytics , performansı ve kullanımı anlamak ve tanılama amacıyla kullanmak için güçlü bir araçtır.

Azure portal Log Analytics örneğini gösteren ekran görüntüsü.

Uygulamanızı sunucuya yükleme

Şimdi uygulamanızı sunucuda yayımlayın, kullanıcıların bunu kullanmasına izin verin ve telemetrinin portalda gösterilmesini izleyin.

  • Güvenlik duvarınızın, uygulamanıza şu bağlantı noktalarına telemetri göndermesine izin verdiğinden emin olun:

    • dc.services.visualstudio.com:443
    • f5.services.visualstudio.com:443
  • Giden trafiğin bir güvenlik duvarı üzerinden yönlendirilmesi gerekiyorsa ve sistem özelliklerini http.proxyHosthttp.proxyPorttanımlayın.

  • Windows sunucularda yüklenecekler:

Azure App Service, Azure Kubernetes Service, VM yapılandırması

Herhangi bir Azure kaynak sağlayıcısında çalışan uygulamalarınızı izlemek için en iyi ve en kolay yaklaşım Application Insights Java 3.x'i kullanmaktır.

Özel durumlar ve istek hataları

İşlenmeyen özel durumlar ve istek hataları Application Insights web filtresi tarafından otomatik olarak toplanır.

Diğer özel durumlarla ilgili veri toplamak için, kodunuzda trackException() çağrısı ekleyebilirsiniz.

Yöntem çağrılarını ve dış bağımlılıkları izleme

Java aracısını yükleyip belirtilen iç yöntemleri ve JDBC aracılığıyla yapılan çağrıları zamanlama verileriyle ve otomatik işlem adlandırma için günlüğe yükleyin.

W3C dağıtılmış izleme

Application Insights Java SDK'sı artık W3C dağıtılmış izlemeyi destekliyor.

Gelen SDK yapılandırması , Application Insights'ta Telemetri bağıntısında daha ayrıntılı olarak açıklanmıştır.

Giden SDK yapılandırması AI-Agent.xml dosyasında tanımlanır.

Performans sayaçları

Çeşitli performans sayaçlarını görmek için Ölçümleri Araştır'ı> seçin.

İşlem özel baytlarının seçili olduğu Azure portal application insights kaynağının Ölçümler bölmesini gösteren ekran görüntüsü.

Performans sayacı koleksiyonunu özelleştirme

Standart performans sayaçları kümesinin toplanmasını devre dışı bırakmak için, ApplicationInsights.xml dosyasının kök düğümü altına aşağıdaki kodu ekleyin:

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

Daha fazla performans sayacı toplama

Toplanacak daha fazla performans sayacı belirtebilirsiniz.

JMX sayaçları (Java sanal makinesi tarafından kullanıma sunulur)
    <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: Application Insights portalında görüntülenen ad.
  • objectName: JMX nesne adı.
  • attribute: Getirilecek JMX nesne adının özniteliği.
  • type (isteğe bağlı): JMX nesnesinin özniteliğinin türü:
    • Varsayılan: Int veya long gibi basit bir tür.
    • composite: Performans sayacı verileri biçimindedir Attribute.Data.
    • tabular: Performans sayacı verileri tablo satırı biçimindedir.
Windows performans sayaçları

Her Windows performans sayacı bir kategorinin üyesidir (alanın bir sınıf üyesi olması gibi). Kategoriler genel olabilir veya numaralandırılmış veya adlandırılmış örneklere sahip olabilir.

    <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: Application Insights portalında görüntülenen ad.
  • categoryName: Bu performans sayacının ilişkilendirildiği performans sayacı kategorisi (performans nesnesi).
  • counterName: Performans sayacının adı.
  • instanceName: Kategori tek bir örnek içeriyorsa performans sayacı kategorisi örneğinin adı veya boş bir dize (""). ise categoryNameProcess ve toplamak istediğiniz performans sayacı uygulamanızın üzerinde çalıştığı geçerli JVM işlemindense belirtin "__SELF__".

Unix Performans sayaçları

Çok çeşitli sistem ve ağ verilerini almak için Application Insights eklentisiyle birlikte toplanan'ı yükleyin.

Kullanıcı ve oturum verilerini alma

Şimdi web sunucunuzdan telemetri gönderiyorsunuz. Uygulamanızın 360 derecelik tam görünümünü elde etmek için daha fazla izleme ekleyebilirsiniz:

Kendi telemetrinizi gönderme

SDK'yı yüklediğinize göre api'yi kullanarak kendi telemetrinizi gönderebilirsiniz:

Kullanılabilirlik web testleri

Kullanıma hazır ve düzgün yanıt verdiğini denetlemek için Application Insights belirli aralıklarla web sitenizi test edebilir.

Kullanılabilirlik web testlerini ayarlama hakkında daha fazla bilgi edinin.

Sorun giderme

Özel sorun giderme makalesine bakın.

Uygulama konağınızla alma hizmeti arasındaki bağlantıyı test etme

Application Insights SDK'ları ve aracıları, alma uç noktalarımıza REST çağrıları olarak almak için telemetri gönderir. PowerShell veya curl komutlarından ham REST istemcilerini kullanarak web sunucunuzdan veya uygulama konak makinenizden alım hizmeti uç noktalarına bağlantıyı test edebilirsiniz. Bkz . Azure İzleyici Application Insights'ta eksik uygulama telemetrisi sorunlarını giderme.

Application Insights'ta Java izleme günlüklerini keşfetme

İzleme için Logback veya Log4J (v1.2 veya v2.0) kullanıyorsanız, izleme günlüklerinizin otomatik olarak Application Insights'a gönderilmesini sağlayabilir ve burada bunları inceleyebilir ve arayabilirsiniz.

İpucu

Application Insights izleme anahtarınızı uygulamanız için yalnızca bir kez ayarlamanız gerekir. Java Spring gibi bir çerçeve kullanıyorsanız anahtarı uygulamanızın yapılandırmasının başka bir yerine zaten kaydetmiş olabilirsiniz.

Application Insights Java aracısını kullanma

Varsayılan olarak, Application Insights Java aracısı, gerçekleştirilen WARN günlüğü otomatik olarak düzeyinde ve üstünde yakalar.

AI-Agent.xml dosyasını kullanarak yakalanan günlük kaydının eşiğini değiştirebilirsiniz:

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

AI-Agent.xml dosyasını kullanarak Java aracısının günlük yakalamasını devre dışı bırakabilirsiniz:

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

Alternatifler

Java aracısını kullanmak yerine bu yönergeleri izleyebilirsiniz.

Java SDK'sını yükleme

Henüz yapmadıysanız Java için Application Insights SDK'sını yüklemek için yönergeleri izleyin.

Projenize günlük kitaplıkları ekleme

Projeniz için uygun yolu seçin.

Maven

Projeniz derleme için Maven kullanacak şekilde ayarlanmışsa, aşağıdaki kod parçacıklarından birini pom.xml dosyanızla birleştirin. Daha sonra, proje bağımlılıklarını ikili dosyaları indirmek için yenileyin.

Geri Kaydetme


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

Log4J v2.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

Projeniz derleme için Gradle kullanacak şekilde ayarlanmışsa, build.gradle dosyanızdaki gruba aşağıdaki satırlardan dependencies birini ekleyin. Daha sonra, proje bağımlılıklarını ikili dosyaları indirmek için yenileyin.

Geri Kaydetme


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

Log4J v2.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.+'

Application Insights Java SDK'sını el ile yüklemek ve jar dosyasını indirmek için yönergeleri izleyin. Maven Central sayfasında, uygun ekleyicinin jar indirme bölümündeki bağlantıyı seçin. İndirilen ekleyici jar dosyasını projeye ekleyin.

Günlükçü İndir Kitaplık
Geri Kaydetme Günlük geri ekleme Jar applicationinsights-logging-logback
Log4J v2.0 Log4J v2 ekleyici Jar applicationinsights-logging-log4j2
Log4j v1.2 Log4J v1.2 ekleyici Jar applicationinsights-logging-log4j1_2

Ekleyiciyi günlük çerçevenize ekleme

İzlemeleri almaya başlamak için ilgili kod parçacığını Logback veya Log4J yapılandırma dosyasıyla birleştirin.

Geri Kaydetme


    <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>

Application Insights ekleyicilerine, yukarıdaki kod örneklerinde gösterildiği gibi yapılandırılmış günlükçüler tarafından başvurulabilir ve kök günlükçü tarafından başvurulamamalıdır.

Application Insights portalında izlemelerinizi keşfetme

Projenizi Application Insights'a izleme gönderecek şekilde yapılandırdığınıza göre, bu izlemeleri Arama bölmesindeki Application Insights portalında görüntüleyebilir ve arayabilirsiniz.

Günlükçüler aracılığıyla gönderilen özel durumlar portalda Özel durum telemetrisi olarak görüntülenir.

Azure portal application insights kaynağının Arama bölmesini gösteren ekran görüntüsü.

Java web uygulamalarında bağımlılıkları, yakalanan özel durumları ve yöntem yürütme sürelerini izleme

Java web uygulamanızı Application Insights SDK'sı ile izlemeniz durumunda kod değişikliği yapmadan daha ayrıntılı içgörüler elde etmek için Java aracısını kullanabilirsiniz:

  • Bağımlılıklar: Uygulamanızın diğer bileşenlere yaptığı çağrılar hakkında veriler, örneğin:

    • Giden HTTP çağrıları: , OkHttpve java.net.HttpURLConnection aracılığıyla Apache HttpClientyapılan çağrılar yakalanır.
    • Redis çağrıları: Jedis istemcisi aracılığıyla yapılan çağrılar yakalanır.
    • JDBC sorguları: MySQL ve PostgreSQL için çağrı 10 saniyeden uzun sürerse aracı sorgu planını bildirir.
  • Uygulama günlüğü: Uygulama günlüklerinizi yakalayın ve HTTP istekleri ve diğer telemetri verileriyle ilişkilendirin:

    • Log4j 1.2
    • Log4j2
    • Geri Dönme
  • Daha iyi işlem adlandırma: Portalda isteklerin toplanması için kullanılır.

    • İlkbahar: temel alınmaktadır @RequestMapping.
    • JAX-RS: tabanlı @Path.

Java aracısını kullanmak için sunucunuza yüklersiniz. Web uygulamalarınız Application Insights Java SDK'sı ile izlenmelidir.

Java için Application Insights aracısını yükleme

  1. Java sunucunuzu çalıştıran makinede 2.x aracısını indirin. Kullandığınız 2.x Java aracısının sürümünün, kullandığınız 2.x Application Insights Java SDK'sının sürümüyle eşleştiğinden emin olun.

  2. Uygulama sunucusu başlangıç betiğini düzenleyin ve aşağıdaki JVM bağımsız değişkenini ekleyin:

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

    Örneğin, Linux makinesindeki Tomcat'te:

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

  3. Uygulama sunucunuzu yeniden başlatın.

Configure the agent

AI-Agent.xml adlı bir dosya oluşturun ve aracı jar dosyasıyla aynı klasöre yerleştirin.

XML dosyasının içeriğini ayarlayın. aşağıdaki örneği düzenleyerek istediğiniz özellikleri ekleyin veya atlayın.

<?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>

Daha fazla yapılandırma (Spring Boot)

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

Azure App Service için şu adımları izleyin:

  1. Ayarlar>Uygulama Ayarları'nı seçin.

  2. Uygulama Ayarları'nın altında yeni bir anahtar değer çifti ekleyin:

    • Anahtar: JAVA_OPTS
    • Değer: -javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar

    Aracının D:/home/site/wwwroot/ dizininde bitmesi için projenizde bir kaynak olarak paketlenmiş olması gerekir. Aracınızın doğru App Service dizininde olduğunu doğrulamak için Geliştirme Araçları>Gelişmiş Araçlar>Hata Ayıklama Konsolu'na gidin ve site dizininin içeriğini inceleyin.

  3. Ayarları kaydedin ve uygulamanızı yeniden başlatın. Bu adımlar yalnızca Windows üzerinde çalışan uygulama hizmetleri için geçerlidir.

Not

AI-Agent.xml ve aracı jar dosyası aynı klasörde olmalıdır. Bunlar genellikle projenin /resources klasöründe bir araya getirilir.

W3C dağıtılmış izlemeyi etkinleştirme

aşağıdaki kod parçacığını AI-Agent.xmlekleyin:

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

Not

Geriye dönük uyumluluk modu varsayılan olarak etkindir. enableW3CBackCompat parametresi isteğe bağlıdır ve yalnızca kapatmak istediğinizde kullanılmalıdır.

İdeal olan, tüm hizmetlerinizin W3C protokolünü destekleyen SDK'ların daha yeni sürümlerine güncelleştirilmiş olmasıdır. W3C desteğine sahip SDK'ların en yeni sürümlerine en kısa sürede geçmenizi öneririz.

Hem gelen hem de giden (aracı) yapılandırmalarının tam olarak aynı olduğundan emin olun.

Verileri görüntüleme

Application Insights kaynağında, toplanan uzak bağımlılık ve yöntem yürütme süreleri Performans kutucuğu altında görünür.

Bağımlılık, özel durum ve yöntem raporlarının tek tek örneklerini aramak için Arama'yı açın.

Bağımlılık sorunlarını tanılama hakkında daha fazla bilgi edinin.

Sorularınız veya sorunlarınız mı var?

Aşağıdaki kaynakları kullanın:

Java web uygulamanızda telemetriyi filtreleme

Filtreler , Java web uygulamanızın Application Insights'a gönderdiği telemetriyi seçmek için bir yol sağlar. Kullanabileceğiniz bazı kullanıma dışı filtreler vardır. Kendi özel filtrelerinizi de yazabilirsiniz.

Kullanıma açılan filtreler şunlardır:

  • İzleme önem düzeyi.
  • Belirli URL'ler, anahtar sözcükler veya yanıt kodları.
  • Hızlı yanıtlar. Başka bir deyişle, uygulamanızın hızla yanıt verdiği istekler.
  • Belirli olay adları.

Not

Filtreler uygulamanızın ölçümlerini çarpıtır. Örneğin, yavaş yanıtları tanılamak için hızlı yanıt sürelerini atacak bir filtre ayarlayabilirsiniz. Ancak Application Insights tarafından bildirilen ortalama yanıt sürelerinin gerçek hızdan daha yavaş olacağını bilmeniz gerekir. Ayrıca, isteklerin sayısı gerçek sayıdan daha küçük olacaktır.

Sorun buysa, bunun yerine Örnekleme'yi kullanın.

Filtreleri ayarlama

ApplicationInsights.xmliçinde, aşağıdaki örneğe benzer bir TelemetryProcessors bölüm ekleyin:


    <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>

Yerleşik işlemcilerin tam kümesini inceleyin.

Yerleşik filtreler

Bu bölümde, kullanılabilen yerleşik filtreler ele alınmaktadır.

Ölçüm Telemetri filtresi


           <Processor type="MetricTelemetryFilter">
                  <Add name="NotNeeded" value="metric1,metric2"/>
           </Processor>
  • NotNeeded: Özel ölçüm adlarının virgülle ayrılmış listesi

Sayfa Görünümü Telemetri filtresi


           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="500"/>
                  <Add name="NotNeededNames" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>
  • DurationThresholdInMS: Süre, sayfayı yüklemek için geçen süreyi ifade eder. Bu parametre ayarlanırsa, bu süreden daha hızlı yüklenen sayfalar bildirilir.
  • NotNeededNames: Sayfa adlarının virgülle ayrılmış listesi.
  • NotNeededUrls: URL parçalarının virgülle ayrılmış listesi. Örneğin, "home" URL'de "home" bulunan tüm sayfaları filtreler.

telemetri filtresi isteme


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

Yapay Kaynak filtresi

özelliğinde değerleri olan tüm telemetri verilerini SyntheticSource filtreler. Botlardan, örümceklerden ve kullanılabilirlik testlerinden gelen istekler dahildir.

Tüm yapay istekler için telemetri verilerini filtreler:


           <Processor type="SyntheticSourceFilter" />

Belirli yapay kaynaklar için telemetri verilerini filtreler:


           <Processor type="SyntheticSourceFilter" >
                  <Add name="NotNeeded" value="source1,source2"/>
           </Processor>
  • NotNeeded: Yapay kaynak adlarının virgülle ayrılmış listesi

Telemetri Olay filtresi

TrackEvent() kullanılarak günlüğe kaydedilen özel olayları filtreler:


           <Processor type="TelemetryEventFilter" >
                  <Add name="NotNeededNames" value="event1, event2"/>
           </Processor>
  • NotNeededNames: Olay adlarının virgülle ayrılmış listesi

Telemetri filtrelerini izleme

TrackTrace() veya günlük çerçevesi toplayıcısı kullanılarak günlüğe kaydedilen günlük izlemelerini filtreler:


           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>
  • Geçerli FromSeverityLevel değerler şunlardır:

    • KAPALI: Tüm izlemeleri filtreler.
    • İzleme: Filtreleme yok. trace düzeyine eşittir.
    • BİlGİ: İzleme düzeyini filtreler.
    • UYARI: İZLEME ve BİlGİlerİ filtreler.
    • HATA: UYARI, BİlGİ ve İzleme filtrelerini çıkarır.
    • KRİtİk: KRİtİk dışında tümünü filtreler.

Özel filtreler

Aşağıdaki bölümlerde kendi özel filtrelerinizi oluşturma adımları gösterilmektedir.

Filtrenizi kodlayın

Kodunuzda uygulayan TelemetryProcessorbir sınıf oluşturun:


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

Yapılandırma dosyasında filtrenizi çağırma

Şimdi ApplicationInsights.xml:



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

Filtrenizi çağırma (Java Spring)

Spring çerçevesini temel alan uygulamalar için özel telemetri işlemcilerinin ana uygulama sınıfınızda fasulye olarak kaydedilmesi gerekir. Daha sonra uygulama başlatıldığında otomatik olarak kablolanacaklar.

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

içinde application.propertieskendi filtre parametrelerinizi oluşturursunuz. Ardından, bu parametreleri özel filtrenize geçirmek için Spring Boot'un dışlaştırılmış yapılandırma çerçevesini kullanırsınız.

Sorun giderme

Bu bölümde bir sorun giderme ipucu sunulmaktadır.

Filtrem çalışmıyor

Geçerli parametre değerleri sağladığınızı denetleyin. Örneğin, süreler tamsayılar olmalıdır. Geçersiz değerler filtrenin yoksayılmasına neden olur. Özel filtreniz bir oluşturucudan veya küme yönteminden bir özel durum oluşturursa, yoksayılır.

toplanan: Application Insights'ta Linux performans ölçümleri (kullanım dışı)

Application Insights'ta Linux sistem performansı ölçümlerini keşfetmek için, Application Insights eklentisiyle birlikte toplanmış yükleyin. Bu açık kaynak çözüm, çeşitli sistem ve ağ istatistiklerini toplar.

Genellikle, Java web hizmetinizi Application Insights ile önceden izlemediyseniz kullanırsınızcollectd. Uygulamanızın performansını artırmanıza veya sorunları tanılamanıza yardımcı olacak daha fazla veri sağlar.

İzleme anahtarınızı alma

Azure portal, verilerin görünmesini istediğiniz Application Insights kaynağını açın. İsterseniz yeni bir kaynak da oluşturabilirsiniz.

Kaynağı tanımlayan İzleme Anahtarının bir kopyasını alın.

Azure portal bir Application Insights kaynağının izleme anahtarının vurgulandığı genel bakış bölmesini gösteren ekran görüntüsü.

Toplanan ve eklentiyi yükleme

Linux sunucu makinelerinizde:

  1. Toplanan sürüm 5.4.0 veya üzerini yükleyin.
  2. Application Insights tarafından toplanan yazar eklentisini indirin. Sürüm numarasını not edin.
  3. Eklenti jar dosyasını içine /usr/share/collectd/javakopyalayın.
  4. Düzenle /etc/collectd/collectd.conf:
    • Java eklentisinin etkinleştirildiğinden emin olun.

    • için JVMArg'yi java.class.path aşağıdaki jar dosyasını içerecek şekilde güncelleştirin. Sürüm numarasını indirdiğiniz sürümle eşleşecek şekilde güncelleştirin:

      • /usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
    • Kaynağınızdaki izleme anahtarını kullanarak bu kod parçacığını ekleyin:

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

      Örnek yapılandırma dosyasının bir bölümü aşağıda verilmişti:

      
          ...
          # 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>
          ...
      

Farklı kaynaklardan çeşitli veriler toplayan diğer toplanan eklentileri yapılandırın.

El kitabına göre yeniden başlatıncollectd.

Application Insights'ta verileri görüntüleme

Application Insights kaynağınızda Ölçümler'i açın ve grafikler ekleyin. Özel kategorisinden görmek istediğiniz ölçümleri seçin.

Varsayılan olarak ölçümler, ölçümlerin toplandığı tüm konak makinelerinde toplanır. Konak başına ölçümleri görüntülemek için , Grafik ayrıntıları bölmesinde Gruplandırma'yı açın ve ardından CollectD-Host'a göre gruplandırmayı seçin.

Belirli istatistiklerin karşıya yüklenmesini dışlama

Varsayılan olarak, Application Insights eklentisi tüm etkin collectd read eklentiler tarafından toplanan tüm verileri gönderir.

Verileri belirli eklentilerden veya veri kaynaklarından dışlamak için:

  • Yapılandırma dosyasını düzenleyin.

  • içinde <Plugin ApplicationInsightsWriter>, aşağıdaki tabloda yer alanlara benzer yönerge satırları ekleyin:

    Yönergesi Etki
    Exclude disk Eklenti tarafından disk toplanan tüm verileri hariç tutun.
    Exclude disk:read,write ve write adlı read kaynakları eklentinin disk dışında tutun.

Yönergeleri yeni satırla ayırın.

Sorunlarınız mı var?

Bu bölümde sorun giderme ipuçları sunulmaktadır.

Portalda veri görmüyorum

Şu seçenekleri deneyin:

  • Ham olayların ulaşılıp ulaşmadığını görmek için Arama'yı açın. Bazen ölçüm gezgininde görünmeleri daha uzun sürebilir.
  • Giden veriler için güvenlik duvarı özel durumları ayarlamanız gerekebilir.
  • Application Insights eklentisinde izlemeyi etkinleştirin. Bu satırı içine <Plugin ApplicationInsightsWriter>ekleyin:
    • SDKLogger true
  • Bildirdiğini görmek için bir terminal açın ve ayrıntılı modda başlayın collectd :
    • sudo collectd -f

Bilinen sorun

Application Insights yazma eklentisi belirli okuma eklentileriyle uyumsuzdur. Bazı eklentiler bazen gönderir NaN, ancak Application Insights eklentisi kayan noktalı bir sayı bekler.

  • Belirti: Günlükte collectd "AI: ... SyntaxError: Beklenmeyen belirteç N."
  • Geçici çözüm: Sorun yazma eklentileri tarafından toplanan verileri hariç tutun.

Mikrometre uygulaması izleme, JVM tabanlı uygulama kodu için ölçümleri ölçer ve verileri sık kullandığınız izleme sistemlerine dışarı aktarmanıza olanak tanır. Bu bölümde hem Spring Boot hem de Spring Boot dışı uygulamalar için Application Insights ile Micrometer'ın nasıl kullanılacağı öğretildi.

Spring Boot 1.5x kullanma

pom.xml veya build.gradle dosyanıza aşağıdaki bağımlılıkları ekleyin:

Şu adımları izleyin:

  1. Spring Boot uygulamanızın pom.xml dosyasını güncelleştirin ve içine aşağıdaki bağımlılıkları ekleyin:

    <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. Aşağıdaki özelliği kullanarak application.properties veya YML dosyasını Application Insights izleme anahtarıyla güncelleştirin:

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

  3. Uygulamanızı derleyin ve çalıştırın.

Önceki adımlar, Azure İzleyici'de otomatik olarak toplanmış önceden toplanmış ölçümlerle çalışmaya başlamanızı sağlamalıdır.

Spring 2.x kullanma

pom.xml veya build.gradle dosyanıza aşağıdaki bağımlılıkları ekleyin:

Şu adımları izleyin:

  1. Spring Boot uygulamanızın pom.xml dosyasını güncelleştirin ve içine aşağıdaki bağımlılığı ekleyin:

    <dependency> 
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-spring-boot-metrics-starter</artifactId>
          <version>2.0.7</version>
    </dependency>
    
  2. Aşağıdaki özelliği kullanarak application.properties veya YML dosyasını Application Insights izleme anahtarıyla güncelleştirin:

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

  3. Uygulamanızı derleyin ve çalıştırın.

Yukarıdaki adımlar, Azure İzleyici'de otomatik olarak toplanmış önceden toplanmış ölçümlerle çalışmanızı sağlamalıdır. Application Insights Spring Boot starter'da ince ayar yapma hakkında daha fazla bilgi için GitHub'da benioku dosyasına bakın.

Varsayılan ölçümler:

  • Tomcat, JVM, Logback Ölçümleri, Log4J Ölçümleri, Çalışma Süresi Ölçümleri, İşlemci Ölçümleri ve FileDescriptorMetrics için otomatik olarak yapılandırılan ölçümler.
  • Örneğin, sınıf yolunda Netflix Hystrix varsa bu ölçümleri de alacağız.
  • İlgili çekirdekler eklenerek aşağıdaki ölçümler kullanılabilir:
    • CacheMetrics (CaffeineCache, EhCache2, GuavaCache, HazelcastCacheve JCache)
    • DataBaseTableMetrics
    • HibernateMetrics
    • JettyMetrics
    • OkHttp3 Ölçümleri
    • Kafka Ölçümleri

Otomatik ölçüm toplamayı kapatın:

  • JVM Ölçümleri:
    • management.metrics.binders.jvm.enabled=false
  • Geri Kayıt Ölçümleri:
    • management.metrics.binders.logback.enabled=false
  • Çalışma Süresi Ölçümleri:
    • management.metrics.binders.uptime.enabled=false
  • İşlemci Ölçümleri:
    • management.metrics.binders.processor.enabled=false
  • FileDescriptorMetrics:
    • management.metrics.binders.files.enabled=false
  • Üzerinde kitaplık classpathvarsa Hystrix Ölçümleri:
    • management.metrics.binders.hystrix.enabled=false
  • üzerinde classpathkitaplık varsa AspectJ Ölçümleri:
    • spring.aop.enabled=false

Not

Spring Boot uygulamanızın application.properties veya application.yml dosyasındaki önceki özellikleri belirtin.

Spring Boot olmayan web uygulamalarıyla Mikrometre kullanma

pom.xml veya build.gradle dosyanıza aşağıdaki bağımlılıkları ekleyin:

Şu adımları izleyin:

  1. pom.xml veya build.gradle dosyanıza aşağıdaki bağımlılıkları ekleyin:

        <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. Henüz yapmadıysanız ,ApplicationInsights.xml dosyasını resources klasörüne ekleyin. Daha fazla bilgi için bkz. ApplicationInsights.xml dosyası ekleme.

  3. Örnek Servlet sınıfı (zamanlayıcı ölçümü yayar):

        @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. Örnek yapılandırma sınıfı:

         @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) {
    
           }
         }
    

Ölçümler hakkında daha fazla bilgi edinmek için Mikrometre belgelerine bakın.

Farklı ölçüm türlerinin nasıl oluşturulacağını gösteren diğer örnek kodlar resmi Micrometer GitHub deposunda bulunabilir.

Daha fazla ölçüm koleksiyonu bağlama

Aşağıdaki bölümlerde daha fazla ölçümü nasıl toplayacağınız gösterilir.

SpringBoot/Spring

İlgili ölçüm kategorisinden bir fasulye oluşturun. Örneğin, Guava Önbelleği ölçümlerine ihtiyacınız olduğunu varsayalım:

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

Bazı ölçümler varsayılan olarak etkin değildir, ancak önceki şekilde bağlanabilir. Tam liste için bkz. Micrometer GitHub deposu.

Spring dışı uygulamalar

Yapılandırma dosyasına aşağıdaki bağlama kodunu ekleyin:

    New GuavaCacheMetrics().bind(registry);

Sonraki adımlar