Azure Izleyici Java uygulamaları için Opentelemetri tabanlı otomatik izleme

Bu makalede, Opentelemetri tabanlı Azure Izleyici Java teklifini etkinleştirme ve yapılandırma açıklanmaktadır. bu makaledeki yönergeleri tamamladıktan sonra, uygulamanızı izlemek için Azure izleyici Application Insights kullanabilirsiniz.

başlarken

Java otomatik izleme, herhangi bir kod değişikliği yapılmadan etkinleştirilebilir.

Önkoşullar

Azure izleyici Application Insights etkinleştirme

Bu bölümde, otomatik izleme jar dosyasının nasıl indirileceği gösterilmektedir.

Jar dosyasını indirin

Applicationinsights-Agent-3.2.3. jar dosyasını indirin.

Uyarı

3,0 Preview sürümünden yükseltme yapıyorsanız:

  • Tüm yapılandırma seçeneklerini dikkatle gözden geçirin. JSON yapısı tamamen değişti. Dosya adı artık tümü küçük harfle yazılmalıdır.

3.0. x sürümünden yükseltme yapıyorsanız:

  • İşlem adlarına ve istek telemetri adlarına artık, ve gibi HTTP yöntemi ön eki eklenir GET POST . Bu değişiklik, önceki değerlere güveniyorsa özel panoları veya uyarıları etkileyebilir. Ayrıntılar için bkz. 3.1.0 sürüm notları.

3.1. x sürümünden yükseltme yapıyorsanız:

  • Veritabanı bağımlılığı adları artık alanında hala mevcut olan tam (ayıklanmış) sorgu ile daha kısa data . HTTP bağımlılığı adları artık daha açıklayıcı. Bu değişiklik, önceki değerlere güveniyorsa ö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 edin

-javaagent:path/to/applicationinsights-agent-3.2.3.jarUygulamanızın JVM args öğesine ekleyin.

İpucu

uygulamanızın jvm bağımsız değişkenlerini yapılandırmayla ilgili yardım için bkz. jvm bağımsız değişkenlerini güncelleştirmek için İpuçları.

Application Insights bağlantı dizesini ayarla

  1. jar dosyasını Application Insights kaynağına iki şekilde işaret edebilirsiniz:

    • Bir ortam değişkeni ayarlayabilirsiniz:

      APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...
      
    • İsterseniz adlı bir yapılandırma dosyası da oluşturabilirsiniz applicationinsights.json . Aşağıdaki içerikle aynı dizine yerleştirin applicationinsights-agent-3.2.3.jar :

      {
        "connectionString": "InstrumentationKey=..."
      }
      
  2. Application Insights kaynağınızın bağlantı dizesini bulun.

    Application Insights bağlantı dizesini gösteren ekran görüntüsü.

Verilerin akışını Onayla

uygulamanızı çalıştırın ve Azure portal Application Insights kaynak sekmelerinizi açın. Verilerin portalda gösterilmesi birkaç dakika sürebilir.

Not

Uygulamayı çalıştıramıyorum veya verileri beklenen şekilde alamıyorsanız, sorun giderme bölümüne bakın.

sunucu istekleri ve sunucu yanıt süresi vurgulandığı Application Insights genel bakış sekmesini gösteren ekran görüntüsü.

Önemli

aynı Application Insights kaynağına telemetri sunan iki veya daha fazla hizmet varsa, bulut rolü adlarını uygulama eşlemesinde doğru şekilde temsil edecek şekilde ayarlamanız gerekir.

Application Insights izleme kullanmanın bir parçası olarak, tanılama verilerini toplayıp Microsoft 'a göndereceğiz. bu veriler Application Insights çalıştırıp iyileştirmemize yardımcı olur. Gereksiz veri toplamayı devre dışı bırakma seçeneğiniz vardır. daha fazla bilgi için bkz. Azure Application Insights 'de hazırlama.

Yapılandırma seçenekleri

applicationinsights.jsonDosyasında, bu ayarları da yapılandırabilirsiniz:

  • Bulut rolü adı
  • Bulut rolü örneği
  • Örnekleme
  • JMX ölçümleri
  • Özel boyutlar
  • Telemetri işlemcileri (Önizleme)
  • Oto toplanan günlüğe kaydetme
  • Spring Boot çalıştırıcı ölçümlerini içeren, oto toplanmış mikro ölçüm ölçümleri
  • Sinyal
  • HTTP proxy 'si
  • Kendi kendine tanılama

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

İzleme kitaplıkları

Java 3. x, aşağıdaki izleme kitaplıklarını içerir.

Oto toplanan istekler

  • JMS tüketicileri
  • Kafka tüketicileri
  • Netty/Webflox
  • Servi sağlar
  • Yay zamanlaması

Oto toplanan bağımlılıklar

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

Yukarı akış dağıtılmış izleme yayma olmadan oto toplanan Bağımlılıklar:

  • Cassandra
  • JDBC
  • MongoDB (Async ve Sync)
  • Redsıs (Lettuce ve Jedsıs)

Oto toplanan Günlükler

  • Java. util. Logging
  • Log4J, MDC özelliklerini içerir
  • MDC özelliklerini içeren DOLAYıSıYLA SLF4J/Logback

Oto toplanan ölçümler

  • Spring Boot çalıştırıcı ölçümlerini içeren mikro ölçüm
  • JMX ölçümleri

Azure SDK’ları

Bu Azure SDK 'Ları tarafından yayılan telemetri varsayılan olarak tekrar toplanır:

Telemetriyi değiştirme

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

Span öznitelikleri ekleme

opentelemetry-apiYayılmaları öznitelikleri eklemek için ' i kullanabilirsiniz. Bu öznitelikler, telemetrinize özel bir iş boyutu eklemeyi içerebilir. ayrıca, Application Insights şemasında, kullanıcı kimliği veya istemci ıp 'si gibi isteğe bağlı alanlar ayarlamak için özniteliklerini de kullanabilirsiniz.

Özel boyut ekleyin

Bir veya daha fazla özel boyut eklendiğinde, istekler, bağımlılıklar veya özel durumlar tablosundaki Customdimensions alanı doldurulur.

Not

Bu özellik yalnızca 3.2.0 ve üzeri sürümlerde bulunur.

  1. opentelemetry-api-1.6.0.jarUygulamanıza ekleyin:

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

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

Kullanıcı KIMLIĞINI ayarlama

İstek, bağımlılıklar veya özel durumlar tablosundaki Kullanıcı kimliği alanını doldurun.

Önemli

Kimliği doğrulanmış kullanıcı KIMLIĞINI ayarlamadan önce ilgili gizlilik yasaları 'na başvurun.

Not

Bu özellik yalnızca 3.2.0 ve üzeri sürümlerde bulunur.

  1. opentelemetry-api-1.6.0.jarUygulamanıza ekleyin:

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

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

İzleme KIMLIĞINI veya yayılma KIMLIĞINI al

opentelemetry-apiIzleme kimliğini veya YAYıLMA kimliğini almak için kullanabilirsiniz. Bu işlem, sorunları ayıklarken ve tanılamak için bu tanımlayıcıları mevcut günlüğe kaydetme telemetrisine eklemek üzere yapılabilir.

Not

Bu özellik yalnızca 3.2.0 ve üzeri sürümlerde bulunur.

  1. opentelemetry-api-1.6.0.jarUygulamanıza ekleyin:

    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-api</artifactId>
      <version>1.6.0</version>
    </dependency>
    
  2. Kodunuzda istek izleme KIMLIĞINI ve yayılma KIMLIĞINI alın:

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

Özel telemetri

Application Insights Java 3. x içindeki amacınız, standart apı 'leri kullanarak özel telemetrinizi göndermenizi sağlamaktır.

şu anda mikro ölçer, popüler günlük çerçeveleri ve Java 2. x SDK Application Insights destekliyoruz. Application Insights Java 3. x, bu apı 'ler aracılığıyla gönderilen telemetriyi otomatik olarak yakalar ve otomatik toplanan telemetriyle ilişkilendirir.

Desteklenen özel telemetri

Aşağıdaki tablo, Java 3. x aracısını tamamlamak için etkinleştirebileceğiniz, şu anda desteklenen özel telemetri türlerini temsil eder. Özetlemek gerekirse:

  • Özel ölçümler mikro ölçüm aracılığıyla desteklenir.
  • Özel özel durumlar ve izlemeler günlüğe kaydetme çerçeveleri aracılığıyla desteklenir.
  • Özel İstekler, bağımlılıklar ve özel durumlar aracılığıyla desteklenir opentelemetry-api .
  • herhangi bir özel telemetri türü, Java 2. x SDK Application Insightsaracılığıyla desteklenir.
Özel telemetri türü Micrometer Log4J, logback, Tem 2. x SDK opentelemetri-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 bir SDK 'yı Application Insights 3. x ile yayınlama planlanıyoruz.

Application Insights java 3. x, Application Insights java 2. x SDK 'sına gönderilen telemetriyi zaten dinliyor. Bu işlevsellik, var olan 2. x kullanıcıları için yükseltme hikayesinin önemli bir parçasıdır. Ayrıca, Opentelemetri API 'SI genel kullanıma sunulduğunda özel telemetri desteğimizde önemli bir boşluğu doldurur.

Mikro ölçüm kullanarak özel ölçümleri gönderme

  1. Uygulamanıza mikro ölçüm ekleyin:

    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-core</artifactId>
      <version>1.6.1</version>
    </dependency>
    
  2. Bir ölçüm oluşturmak için mikro ölçüm genel kayıt defteri 'ni kullanın:

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

    counter.increment();
    

En sevdiğiniz günlük çerçevesini kullanarak özel izlemeler ve özel durumlar gönderin

Log4J, Logback ve Java. util. Logging otomatik olarak işaretlenir. Bu günlüğe kaydetme çerçeveleri aracılığıyla gerçekleştirilen günlüğe kaydetme, izleme ve özel durum telemetrisi olarak toplanır.

Varsayılan olarak günlük kaydı yalnızca BILGI düzeyinde veya yukarıdaki günlüğe kaydetme gerçekleştirildiğinde toplanır. Bu düzeyi değiştirmek için yapılandırma seçeneklerinebakın.

Günlükleriniz için özel boyutlar eklemek istiyorsanız, Log4j 1,2 MDC, Log4J 2 MDCveya logback MDCkullanın. Application Insights Java 3. x, bu mdc özelliklerini, izleme ve özel durum telemetrinizde özel boyutlar olarak otomatik olarak yakalar.

2. x SDK kullanarak özel telemetri gönderme

  1. applicationinsights-core-2.6.3.jarUygulamanıza ekleyin. tüm 2. x sürümleri Application Insights Java 3. x tarafından desteklenir. 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şturun:

    static final TelemetryClient telemetryClient = new TelemetryClient();
    
  3. Özel telemetri göndermek için istemcisini 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 konusunda yardım için bkz. sorun giderme.

Destek

Destek almak için:

Opentelemetri geri bildirimi

Geri bildirim sağlamak için:

Sonraki adımlar