Azure İzleyici Java uygulamaları için OpenTelemetry tabanlı otomatik ölçümler

Bu makalede OpenTelemetry tabanlı Java tekliflerini etkinleştirme ve Azure İzleyici açıklanmıştır. Bu makaledeki yönergeleri tamamladikten sonra, Azure İzleyici Application Analizler uygulamasını izleyebilirsiniz.

başlarken

Java otomatik araçları herhangi bir kod değişikliği olmadan etkinleştirilebilir.

Önkoşullar

Uygulama Azure İzleyici'Analizler

Bu bölümde, otomatik ölçüm jar dosyasını indirme işlemi gösterir.

Jar dosyasını indirme

applicationinsights-agent-3.2.3.jar dosyasını indirin.

Uyarı

3.0 Önizleme sürümüne yükseltıyorsanız:

  • Tüm yapılandırma seçeneklerini dikkatle gözden geçirme. JSON yapısı tamamen değişti. Dosya adı artık küçük harfle ifade edildi.

3.0.x'den yükseltıyorsanız:

  • İşlem adları ve istek telemetri adları artık ve gibi HTTP yöntemiyle önek GET olarak ektedir. POST Bu değişiklik, önceki değerlere bağlı olan özel panoları veya uyarıları etkileyebilir. Ayrıntılar için bkz. 3.1.0 sürüm notları.

3.1.x'den yükseltıyorsanız:

  • Veritabanındaki tam (sanitized) sorgu hala mevcut olduğu için veritabanı bağımlılık adları artık daha data kısadır. HTTP bağımlılık adları artık daha açıklayıcıdır. Bu değişiklik, önceki değerlere bağlı olan özel panoları veya uyarıları etkileyebilir. Ayrıntılar için bkz. 3.2.0 sürüm notları.

JVM'yi jar dosyasına işaret etmek

Uygulamanın -javaagent:path/to/applicationinsights-agent-3.2.3.jar JVM args'lerini ekleyin.

İpucu

Uygulamanın JVM args'lerini yapılandırmayla ilgili yardım için bkz. JVMargs'nizi İpuçları için bkz. .

Application Analizler dizesini ayarlama

  1. Jar dosyasını Application Analizler kaynağınıza işaret Analizler vardır:

    • Bir ortam değişkeni ayarlayabilirsiniz:

      APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...
      
    • Veya adlı bir yapılandırma dosyası applicationinsights.json oluşturabilirsiniz. Bunu aşağıdaki içerikle aynı applicationinsights-agent-3.2.3.jar dizine yer:

      {
        "connectionString": "InstrumentationKey=..."
      }
      
  2. Application Analizler kaynağında bağlantı dizesini bulun.

    Application Analizler dizesini gösteren ekran görüntüsü.

Veri akışını onaylama

Uygulamanızı çalıştırın ve uygulamanın Analizler Kaynak sekmesini Azure portal. Verilerin portalda yer almaları birkaç dakika sürebilir.

Not

Uygulamayı çalıştıra değilseniz veya verileri beklendiği gibi alasanız Sorun Giderme bölümüne bakın.

Sunucu istekleri ve sunucu yanıt Analizler vurgulanmış Uygulama Genel Bakış sekmesini gösteren ekran görüntüsü.

Önemli

Telemetri verileri aynı Application Analizler kaynağına yayın iki veya daha fazla hizmetimiz varsa, bunları uygulama haritasında düzgün şekilde temsil edecek şekilde bulut rolü adları ayarlamanız gerekir.

Application Analizler izlemesi kullanmanın bir parçası olarak, tanılama verilerini toplayıp Microsoft'a göndeririz. Bu veriler, Uygulama Verilerini çalıştırmamıza ve geliştirmemıza Analizler. Veri toplamayı devre dışı bırakma seçeneğiniz vardır. Daha fazla bilgi için bkz. Azure Application Analizler.

Yapılandırma seçenekleri

Dosyasında applicationinsights.json şu ayarları da yapılandırabilirsiniz:

  • Bulut rolü adı
  • Bulut rolü örneği
  • Örnekleme
  • JMX ölçümleri
  • Özel boyutlar
  • Telemetri işlemcileri (önizleme)
  • Otomatik olarak günlüğe kaydetme
  • Aktüatör ölçümlerini içeren otomatik olarak Spring Boot ölçümler
  • Sinyal
  • HTTP ara sunucusu
  • Kendi kendine tanılama

Daha fazla bilgi için bkz. Yapılandırma seçenekleri.

Ölçüm kitaplıkları

Java 3.x aşağıdaki ölçüm kitaplıklarını içerir.

Otomatik olarak uzan istekler

  • JMS tüketicileri
  • Kafka tüketicileri
  • Netty/WebFlux
  • Servlet
  • Spring zamanlaması

Otomatik olarak düzeltilen bağımlılıklar

Otomatik olarak dağıtılan bağımlılıklar ve aşağı akış dağıtılmış izleme yayma:

  • Apache HttpClient
  • Apache HttpAsyncClient
  • AsyncHttpClient
  • Google HttpClient
  • gRPC
  • java.net.HttpURLConnection
  • Java 11 HttpClient
  • JAX-RS istemcisi
  • Jetty HttpClient
  • JMS
  • Kafka
  • Netty istemcisi
  • OkHttp

Aşağı akış dağıtılmış izleme yayma olmadan otomatik olarak düzeltilir bağımlılıklar:

  • Cassandra
  • JDBC
  • MongoDB (zaman uyumsuz ve eşitleme)
  • Redis (Lettuce ve Jedis)

Otomatik olarak uzan günlükler

  • java.util.logging
  • MDC özelliklerini içeren Log4j
  • MDC özelliklerini içeren SLF4J/Logback

Otomatik olarak tolere olan ölçümler

  • Spring Boot Actuator ölçümlerini içeren mikrometre
  • JMX Ölçümleri

Azure SDK’ları

Bu Azure SDK'ları tarafından yayılan telemetri varsayılan olarak otomatik olarak bir aradadır:

Telemetriyi değiştirme

Bu bölümde telemetri değiştirme açıklanmış.

Span öznitelikleri ekleme

spans opentelemetry-api öznitelikleri eklemek için kullanabilirsiniz. Bu öznitelikler telemetrinize özel bir iş boyutu eklemeyi içerebilir. Ayrıca, Application Analizler şemasında Kullanıcı Kimliği veya İstemci IP'i gibi isteğe bağlı alanlar ayarlamak için öznitelikleri kullanabilirsiniz.

Özel boyut ekleme

Bir veya daha fazla özel boyut eklemek, istekler, bağımlılıklar veya özel durumlar tablosunda customDimensions alanını doldurmaktır.

Not

Bu özellik yalnızca 3.2.0 ve üzerindedir.

  1. Uygulamanıza opentelemetry-api-1.6.0.jar ekleyin:

    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-api</artifactId>
      <version>1.6.0</version>
    </dependency>
    
  2. Kodunuza özel boyutlar ekleyin:

    import io.opentelemetry.api.trace.Span;
    
    Span.current().setAttribute("mycustomdimension", "myvalue1");
    

Kullanıcı kimliğini ayarlama

İstekler, bağımlılıklar veya özel durumlar tablosunda kullanıcı kimliği alanını doldurmak.

Önemli

Kimliği Doğrulanmış Kullanıcı Kimliği ayarlamadan önce geçerli gizlilik yasalarına danışın.

Not

Bu özellik yalnızca 3.2.0 ve üzerindedir.

  1. Uygulamanıza opentelemetry-api-1.6.0.jar ekleyin:

    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-api</artifactId>
      <version>1.6.0</version>
    </dependency>
    
  2. Kodunda user_Id ayarlayın:

    import io.opentelemetry.api.trace.Span;
    
    Span.current().setAttribute("enduser.id", "myuser");
    

İzleme kimliğini veya yayılma kimliğini al

İzleme kimliğini opentelemetry-api veya span kimliğini almak için kullanabilirsiniz. Hata ayıklama ve tanılama sorunlarda bağıntıyı geliştirmek için bu tanımlayıcıları mevcut günlük telemetri verilerine eklemek için bu eylem yapılabilir.

Not

Bu özellik yalnızca 3.2.0 ve üzerindedir.

  1. Uygulamanıza opentelemetry-api-1.6.0.jar ekleyin:

    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-api</artifactId>
      <version>1.6.0</version>
    </dependency>
    
  2. Kodda istek izleme kimliğini ve span id'lerini al:

    import io.opentelemetry.api.trace.Span;
    
    String traceId = Span.current().getSpanContext().getTraceId();
    String spanId = Span.current().getSpanContext().getSpanId();
    

Özel telemetri

Application Analizler Java 3.x'te hedefimiz, standart API'leri kullanarak özel telemetri göndermenize olanak vermektir.

Şu anda Micrometer, popüler günlük çerçeveleri ve Application Analizler Java 2.x SDK'sı desteklemektedir. Uygulama Analizler Java 3.x, bu API'ler aracılığıyla gönderilen telemetriyi otomatik olarak yakalar ve otomatik olarak bir telemetri ile arasında ilişki sağlar.

Desteklenen özel telemetri

Aşağıdaki tabloda, Java 3.x aracılarını desteklemek için etkinleştirilen şu anda desteklenen özel telemetri türleri temsil eder. Özetlemek gerekirse:

  • Özel ölçümler mikro ölçümler aracılığıyla de destekler.
  • Özel özel durumlar ve izlemeler, günlük çerçeveleri aracılığıyla de destekler.
  • Özel istekler, bağımlılıklar ve özel durumlar aracılığıyla de opentelemetry-api destekler.
  • Herhangi bir özel telemetri türü, Java 2.x SDK'Analizler Application Analizler desteklemektedir.
Özel telemetri türü Micrometer Log4j, logback, JUL 2.x SDK opentelemetry-api
Özel olaylar Yes
Özel ölçümler Yes Yes
Bağımlılıklar Yes Yes
Özel durumlar Yes Yes Yes
Sayfa görünümleri Yes
İstekler Yes Yes
İzlemeler Yes Yes

Şu anda Application Analizler 3.x ile SDK'Analizler yayınlayacağız.

Uygulama Analizler Java 3.x, Java 2.x SDK'sı için Application Analizler telemetrisini zaten dinliyor. Bu işlevsellik, mevcut 2.x kullanıcıları için yükseltme hikayesinin önemli bir bölümü. Ayrıca OpenTelemetry API'si genel kullanıma açıncaya kadar özel telemetri desteğimizde önemli bir boşluğu doldurur.

Mikro ölçer kullanarak özel ölçümler gönderme

  1. Uygulamanıza MikroMetre ekleyin:

    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-core</artifactId>
      <version>1.6.1</version>
    </dependency>
    
  2. Ölçüm oluşturmak için Micrometer genel kayıt defterini kullanın:

    static final Counter counter = Metrics.counter("test_counter");
    
  3. Ölçümleri kaydetmek için sayacı kullanın:

    counter.increment();
    

Sık kullanılan günlük çerçevenizi kullanarak özel izlemeler ve özel durumlar gönderme

Log4j, Logback ve java.util.logging otomatik olarak ilerler. Bu günlük çerçeveleri aracılığıyla gerçekleştirilen günlük, izleme ve özel durum telemetrisi olarak otomatik olarak bir şekilde bir bütün olarak gerçekleştirilir.

Varsayılan olarak, günlük kaydı yalnızca günlük kaydı Bİlgİ düzeyinde veya daha yüksek bir düzeyde gerçekleştiriliyorsa toplanır. Bu düzeyi değiştirmek için yapılandırma seçeneklerine bakın.

Günlüklere özel boyutlar eklemek için Log4j 1.2 MDC,Log4j 2 MDCveya Logback MDC kullanın. Application Analizler Java 3.x, bu MDC özelliklerini izleme ve özel durum telemetrisinde özel boyutlar olarak otomatik olarak yakalar.

2.x SDK'sı kullanarak özel telemetri gönderme

  1. uygulamanıza applicationinsights-core-2.6.3.jar ekleyin. Tüm 2.x sürümleri, Application Analizler Java 3.x tarafından de desteklemektedir. Bir seçeneğiniz varsa. En son sürümü kullanmaya değer:

    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>applicationinsights-core</artifactId>
      <version>2.6.3</version>
    </dependency>
    
  2. TelemetryClient oluşturma:

    static final TelemetryClient telemetryClient = new TelemetryClient();
    
  3. Özel telemetri göndermek için istemciyi kullanın:

    Ekinlikler
    telemetryClient.trackEvent("WinGame");
    
    Ölçümler
    telemetryClient.trackMetric("queueLength", 42.0);
    
    Bağımlılıklar
    boolean success = false;
    long startTime = System.currentTimeMillis();
    try {
        success = dependency.call();
    } finally {
        long endTime = System.currentTimeMillis();
        RemoteDependencyTelemetry telemetry = new RemoteDependencyTelemetry();
        telemetry.setSuccess(success);
        telemetry.setTimestamp(new Date(startTime));
        telemetry.setDuration(new Duration(endTime - startTime));
        telemetryClient.trackDependency(telemetry);
    }
    
    Günlükler
    telemetryClient.trackTrace(message, SeverityLevel.Warning, properties);
    
    Özel durumlar
    try {
        ...
    } catch (Exception e) {
        telemetryClient.trackException(e);
    }
    

Sorun giderme

Sorun giderme hakkında yardım için bkz. Sorun giderme.

Destek

Destek almak için:

OpenTelemetry geri bildirimi

Geri bildirim sağlamak için:

Sonraki adımlar