Aracılığıyla paylaş


Java için Azure İzleyici Application Insights'ı yapılandırma

Bu makalede, Java için Azure İzleyici Application Insights'ı yapılandırma gösterilmektedir. Daha fazla bilgi için bkz. OpenTelemetry kullanmaya başlama.

Java aracısını yapılandırma

JSON yapılandırma kaynağı

Varsayılan olarak, Application Insights Java 3, yapılandırma dosyasının applicationinsights.json olarak adlandırılıp applicationinsights-agent-3.7.8.jar ile aynı dizinde olmasını bekler.

Özel boyutlar

Not

Java aracısı sürüm 3.0.2'den başlayarak, service.version adlı özel bir boyut eklerseniz, değer özel boyut olarak değil Application Insights Günlükleri tablosundaki application_Version sütununda depolanır.

Tüm telemetrinize özel boyutlar eklemek istiyorsanız:

{
  "customDimensions": {
    "mytag": "my value",
    "anothertag": "${ANOTHER_VALUE}"
  }
}

Başlangıçta belirtilen ortam değişkeninden değeri okumak için kullanabilirsiniz ${...} .

Devralınan öznitelikler (önizleme)

Not

Bu özellik, Java aracısı 3.2.0 sürümünden itibaren kullanılabilir.

İstek telemetrinizde program aracılığıyla özel bir boyut ayarlayabilirsiniz. Bağımlılıklar ve günlük telemetrisi aracılığıyla devralmayı garanti eder. Tümü bu istek bağlamında yakalanır.

{
  "preview": {
    "inheritedAttributes": [
      {
        "key": "mycustomer",
        "type": "string"
      }
    ]
  }
}

Ardından her isteğin başında şunları çağırın:

Span.current().setAttribute("mycustomer", "xyz");

Ayrıca bkz. Span'a özel özellik ekleme.

Örnekleme aşmalarını yapılandırma

Not

Bu özellik, Java aracısı sürüm 3.5.0 ile başlayan GA'dır.

Örnekleme geçersiz kılmaları, varsayılan örnekleme yüzdesini geçersiz kılmanıza olanak sağlar. Örneğin, şunları yapabilirsiniz:

  • Gürültülü sistem durumu denetimleri için örnekleme yüzdesini 0 veya küçük bir değer olarak ayarlayın.
  • Gürültülü bağımlılık çağrıları için örnekleme yüzdesini 0 veya küçük bir değer olarak ayarlayın.
  • Önemli bir istek türü için örnekleme yüzdesini 100 olarak ayarlayın. Örneğin, varsayılan örneklemeyi daha düşük bir değere yapılandırmış olsanız bile kullanabilirsiniz /login .

Örnekleme terminolojisini geçersiz kılar

Örnekleme geçersiz kılmaları hakkında bilgi edinmeden önce span terimini anlamanız gerekir.

Span, aşağıdakilerden birini temsil eden bir telemetri türüdür:

  • Gelen bir istek.
  • Giden bağımlılık (örneğin, başka bir hizmete uzaktan çağrı).
  • İşlem içi bağımlılık (örneğin, hizmetin alt bileşenleri tarafından yapılan çalışma).

Örnekleme ayarlarını geçersiz kılmak için bu aralık bileşenleri önemlidir.

  • Öznitelikler

Span öznitelikleri, belirli bir isteğin veya bağımlılığın hem standart hem de özel özelliklerini temsil eder.

Örnekleme geçersiz kılmalarını kullanmaya başlama

Başlamak için applicationinsights.json adlı bir yapılandırma dosyası oluşturun. Bunu applicationinsights-agent-*.jar ile aynı dizine kaydedin. Aşağıdaki şablonu kullanın.

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10,
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 0
      },
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 100
      }
    ]
  }
}

Örnekleme geçersiz kılmaları nasıl çalışır?

telemetryType (telemetryKind Application Insights 3.4.0'da) request, dependency, trace (günlük) veya exception öğelerinden biri olmalıdır.

Bir aralık başlatıldığında, örnekleme geçersiz kılma ayarlarından herhangi birinin eşleşip eşleşmediğini denetlemek için aralık türü ve o anda mevcut olan öznitelikler kullanılır. Eşleşmeler strict veya regexp olabilir. Normal ifade eşleşmeleri öznitelik değerinin tamamıyla gerçekleştirilir, bu nedenle içinde herhangi bir yeri içeren abc bir değerle eşleştirmek istiyorsanız kullanmanız .*abc.*gerekir.

Örnekleme geçersiz kılma, birden çok öznitelik kriteri belirleyebilir; bu durumda örnekleme geçersiz kılmanın uyum sağlaması için bunların hepsinin aynı olması gerekir. Örnekleme geçersiz kılmalarından biri eşleşiyorsa, örnekleme yüzdesi, yayılma alanının örneklenip örneklenmeyeceğine karar vermek için kullanılır.

Yalnızca eşleşen ilk örnekleme geçersiz kılma kullanılır. Eğer örnekleme geçersiz kılmaları eşleşmiyorsa:

  • İzlemedeki ilk yayılma alanıysa en üst düzey örnekleme yapılandırması kullanılır.
  • İzlemdeki ilk span değilse, ebeveyn örnekleme kararı kullanılır.

Örnekleme için kullanılabilen span öznitelikleri

OpenTelemetry span öznitelikleri otomatik olarak ve OpenTelemetry semantik kurallarına göre oluşturulur.

Ayrıca program aracılığıyla span öznitelikleri ekleyebilir ve örnekleme için kullanabilirsiniz.

Not

  • Uygulamanız için Application Insights Java tarafından yakalanan özniteliklerin tam kümesini görmek için self-diagnostics düzeyini hata ayıklama olarak ayarlayın ve "yayılma alanını dışarı aktarma" metniyle başlayan hata ayıklama iletilerini arayın.

  • Yalnızca yayılma alanının başında ayarlanan öznitelikler örnekleme için kullanılabilir, bu nedenle daha sonra yakalanan http.response.status_code veya istek süresi gibi öznitelikler OpenTelemetry Java uzantıları üzerinden filtrelenebilir. burada, istek süresine göre aralıkları filtreleyen bir örnek uzantı yer alır.

  • Telemetri işlemcisi ile eklenen öznitelikler örnekleme için kullanılamaz.

Örnekleme geçersiz kılma kullanım örnekleri

Örnek yapılandırmayı görüntülemek için aşağıdaki kullanım örneklerinden herhangi birini genişletin.


Sistem durumu denetimleri için telemetrinin toplanmasını engelleme

Bu örnek, /health-checks öğesine yapılan tüm istekler için telemetrinin toplanmasını bastırır.

Bu örnek, /health-checks altında normalde toplanacak aşağı akıştaki aralıkların (bağımlılıklar) toplanmasını engeller.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
        {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/health-check",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

Gürültülü bir bağımlılık çağrısının telemetri toplamasını engelle

Bu örnek, tüm GET my-noisy-key redis çağrıları için telemetrinin toplanmasını bastırır.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "dependency",
        "attributes": [
          {
            "key": "db.system",
            "value": "redis",
            "matchType": "strict"
          },
          {
            "key": "db.statement",
            "value": "GET my-noisy-key",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

Önemli bir istek türü için 100% telemetri toplayın

Bu örnek için /logintelemetri verilerinin %100'lerini toplar.

Aşağı akış span'ları (bağımlılıklar), üst öğenin örnekleme kararına uygun hareket ettiğinden (bu aşağı akış span'ı için herhangi bir örnekleme üstün gelme durumu olmadığı sürece), tüm '/login' istekleri için de toplanırlar.

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
  },
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/login",
            "matchType": "strict"
          }
        ],
        "percentage": 100
      }
    ]
  }
}

SQL bağımlılık çağrılarını engellemek için span özniteliklerini gösterme

Bu örnekte, gürültülü SQL çağrılarını engellemek için kullanılabilir özniteliklerin nasıl tanımleneceği gösterilmektedir. Aşağıdaki sorguda, son 30 gün içindeki farklı SQL çağrıları ve ilişkili kayıt sayıları gösterilir:

dependencies
| where timestamp > ago(30d)
| where name == 'SQL: DB Query'
| summarize count() by name, operation_Name, data
| sort by count_ desc
SQL: DB Query    POST /Order             DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Hello World');SET CONTEXT_INFO @MyVar;    36712549
SQL: DB Query    POST /Receipt           DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Hello World');SET CONTEXT_INFO @MyVar;    2220248
SQL: DB Query    POST /CheckOutForm      DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Hello World');SET CONTEXT_INFO @MyVar;    554074
SQL: DB Query    GET /ClientInfo         DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Hello World');SET CONTEXT_INFO @MyVar;    37064

Sonuçlardan, tüm işlemlerin data alanında aynı değeri paylaştığı gözlemlenebilir: DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Merhaba Dünya');SET CONTEXT_INFO @MyVar;. Tüm bu kayıtlar arasındaki ortaklık, örnekleme geçersiz kılma için uygun olmasını sağlar.

Kendi kendine tanılamayı hata ayıklamak için ayarlayarak, aşağıdaki günlük girdileri çıktıda görünür hale gelir:

2023-10-26 15:48:25.407-04:00 DEBUG c.m.a.a.i.exporter.AgentSpanExporter - exporting span: SpanData{spanContext=ImmutableSpanContext...

Bu günlüklerin ilgilendiği alan "öznitelikler" bölümüdür:

{
  "attributes": {
    "data": {
      "thread.name": "DefaultDatabaseBroadcastTransport: MessageReader thread",
      "thread.id": 96,
      "db.connection_string": "apache:",
      "db.statement": "DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Hello World');SET CONTEXT_INFO @MyVar;",
      "db.system": "other_sql",
      "applicationinsights.internal.item_count": 1
    }s
  }
}

Bu çıktıyı kullanarak, gürültülü SQL çağrılarını filtrelemek için aşağıdaki örneğe benzer bir örnekleme geçersiz kılma yapılandırabilirsiniz.

{
  "connectionString": "...",
  "preview": {
    "sampling": {
      "overrides": [
        {
          "telemetryType": "dependency",
          "attributes": [
            {
              "key": "db.statement",
              "value": "DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Hello World');SET CONTEXT_INFO @MyVar;",
              "matchType": "strict"
            }
          ],
          "percentage": 0
        }
      ]
    }
  }
}

Değişiklikler uygulandıktan sonra aşağıdaki sorgu, bu bağımlılıkların Application Insights'a en son ne zaman alındığını belirlememize olanak tanır:

dependencies
| where timestamp > ago(30d)
| where data contains 'DECLARE @MyVar'
| summarize max(timestamp) by data
| sort by max_timestamp desc
DECLARE @MyVar varbinary(20); SET @MyVar = CONVERT(VARBINARY(20), 'Hello World');SET CONTEXT_INFO @MyVar;    11/13/2023 8:52:41 PM 

Günlük için telemetri toplama işlemini engelle

SLF4J ile kayıt özelliklerini ekleyebilirsiniz:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class MdcClass {

  private static final Logger logger = LoggerFactory.getLogger(MdcClass.class);

  void method() {
    MDC.put("key", "value");
    try {
      logger.info(...); // Application log to remove
    } finally {
      MDC.remove("key"); // In a finally block in case an exception happens with logger.info
    }
  }
}

Ardından, eklenen özniteliği içeren günlüğü kaldırabilirsiniz:

{
  "sampling": {
    "overrides": [
      {
        "telemetryType": "trace",
        "percentage": 0,
        "attributes": [
          {
            "key": "key",
            "value": "value",
            "matchType": "strict"
          }
        ]
      }
    ]
  }
}

Bir Java yöntemi için telemetri toplama işlemini engelleme

Aşağıdaki örnekler bir Java yöntemine bir span ekler ve bir örnekleme geçersiz kılma ile yayılmayı kaldırır.

İlk olarak bağımlılığı ekleyin opentelemetry-instrumentation-annotations :

<dependency>
  <groupId>io.opentelemetry.instrumentation</groupId>
  <artifactId>opentelemetry-instrumentation-annotations</artifactId>
</dependency>

Ardından sql isteklerini yürüten bir Java yöntemine WithSpan ek açıklamasını ekleyin:

package org.springframework.samples.petclinic.vet;

@Controller
class VetController {

  private final VetRepository vetRepository;

  public VetController(VetRepository vetRepository) {
    this.vetRepository = vetRepository;
  }

  @GetMapping("/vets.html")
  public String showVetList(@RequestParam(defaultValue = "1") int page, Model model) {
    Vets vets = new Vets();
    Page<Vet> paginated = findPaginated(page);
    vets.getVetList().addAll(paginated.toList());
    return addPaginationModel(page, paginated, model);
  }

  @WithSpan
  private Page<Vet> findPaginated(int page) {
    int pageSize = 5;
    Pageable pageable = PageRequest.of(page - 1, pageSize);
    return vetRepository.findAll(pageable); // Execution of SQL requests
  }
}

Aşağıdaki örnekleme geçersiz kılma yapılandırması, WithSpan açıklaması ile eklenen kapsamı kaldırır.

"sampling": {
  "overrides": [
    {
      "telemetryType": "dependency",
      "attributes": [
        {
          "key": "code.function",
          "value": "findPaginated",
          "matchType": "strict"
        }
      ],
      "percentage": 0
    }
  ]
}

Öznitelik değeri, Java yönteminin adıdır.

Bu yapılandırma yönteminden findPaginated oluşturulan tüm telemetri verilerini kaldırır. yönteminden findPaginated gelen SQL yürütmeleri için SQL bağımlılıkları oluşturulmaz.

Aşağıdaki yapılandırma, ek açıklamaya sahip VetController sınıfın WithSpan yöntemlerinden yayılan tüm telemetri verilerini kaldırır:

"sampling": {
  "overrides": [
    {
      "telemetryType": "dependency",
      "attributes": [
        {
          "key": "code.namespace",
          "value": "org.springframework.samples.petclinic.vet.VetController",
          "matchType": "strict"
        }
      ],
      "percentage": 0
    }
  ]
}

Örnekleme önceliklerini değiştirme sorunlarını giderme

Ayrılmış sorun giderme makalesine bakın.

Örnekleme geçersiz kılma işlemleri hakkında SSS

Sık Sorulan Sorular'ı (SSS) gözden geçirmek için Örnekleme Geçersiz Kılmaları Hakkında SSS bölümüne bakın.

Telemetri koleksiyonunu yapılandırma

Bu bölümde:

JMX ölçümlerini yapılandırma

Ek JMX ölçümleri nasıl toplanır

Application Insights Java 3.x, Java Yönetim Uzantıları (JMX) ölçümlerinden bazılarını varsayılan olarak toplar, ancak çoğu durumda yeterli değildir. Bu bölümde JMX yapılandırma seçeneği ayrıntılı olarak açıklanmaktadır.

JMX ölçüm toplama, "jmxMetrics" dosyasına bir bölümü ekleyerek yapılandırılabilir. Application Insights kaynağınızdaki Azure portalında görünmesini istediğiniz ölçüm için bir ad girin. Toplanmasını istediğiniz ölçümlerin her biri için nesne adı ve öznitelik gereklidir. Glob stili joker karakter için nesne adlarında kullanabilirsiniz * .

Hangi ölçümlerin yapılandırılabilir olduğunu öğrenme

Nesne adları ve öznitelikleri gibi özellikler çeşitli kitaplıklar, çerçeveler ve uygulama sunucuları için farklıdır ve genellikle iyi belgelenmez.

Belirli bir ortamınız için kullanılabilir JMX ölçümlerini görüntülemek için kendi kendine tanılama düzeyini DEBUG yapılandırma dosyanızda applicationinsights.json olarak ayarlayın, örneğin:

{
  "selfDiagnostics": {
    "level": "DEBUG"
  }
}

Nesne adları ve öznitelik adları içeren kullanılabilir JMX ölçümleri Application Insights günlük dosyanızda görünür.

Günlük dosyası çıkışı bu örneklere benzer. Bazı durumlarda, kapsamlı olabilir.

Günlük dosyasındaki kullanılabilir JMX ölçümlerinin ekran görüntüsü.

Kullanılabilir JMX ölçümlerini denetlemek için koşul satırı aracı da kullanabilirsiniz.

JMX yapılandırma örneği

Hangi ölçümlerin kullanılabilir olduğunu bilerek aracıyı bunları toplayacak şekilde yapılandırabilirsiniz.

Aşağıdaki Java 8 yapılandırma örneğinde, ilki birkaç özelliğe sahip LastGcInfo iç içe yerleştirilmiş bir ölçümdür ve GcThreadCount yakalamak istiyoruz:

"jmxMetrics": [
  {
    "name": "Demo - GC Thread Count",
    "objectName": "java.lang:type=GarbageCollector,name=PS MarkSweep",
    "attribute": "LastGcInfo.GcThreadCount"
  },
  {
    "name": "Demo - GC Collection Count",
    "objectName": "java.lang:type=GarbageCollector,name=PS MarkSweep",
    "attribute": "CollectionCount"
  },
  {
    "name": "Demo - Thread Count",
    "objectName": "java.lang:type=Threading",
    "attribute": "ThreadCount"
  }
]

Diğer Java Yönetim Uzantıları (JMX) ölçümlerini toplamak istiyorsanız:

{
  "jmxMetrics": [
    {
      "name": "JVM uptime (millis)",
      "objectName": "java.lang:type=Runtime",
      "attribute": "Uptime"
    },
    {
      "name": "MetaSpace Used",
      "objectName": "java.lang:type=MemoryPool,name=Metaspace",
      "attribute": "Usage.used"
    }
  ]
}

Yukarıdaki yapılandırma örneğinde:

  • name , bu JMX ölçümüne atanan ölçüm adıdır (herhangi bir şey olabilir).
  • objectName, toplamak istediğiniz 'nin JMX MBean. Joker karakter yıldız işareti (*) desteklenir.
  • attribute içinde toplamak istediğiniz öznitelik adı JMX MBean'dır.

Sayısal ve boole JMX ölçüm değerleri desteklenir. Boolean JMX ölçümleri false için 0 ve true için 1 ile eşlenir.

Application Insights'ta JMX ölçümlerini bulma

Uygulamanız çalışırken toplanan JMX ölçümlerini, Azure portalında Application Insights kaynağınıza giderek görüntüleyebilirsiniz. Ölçümler bölmesinde, ölçümleri görüntülemek için gösterildiği gibi açılan listeyi seçin.

Azure portaldaki Ölçümler bölmesinin ekran görüntüsü.

Otomatik toplama kaydı

Log4j, Logback, JBoss Logging ve java.util.logging otomatik olarak enstrümante edilir. Bu günlük çerçeveleri aracılığıyla gerçekleştirilen günlükler otomatik olarak toplanır.

Günlüğe kaydetme yalnızca şu durumda kaydedilir:

  • Loglama çerçevesi için yapılandırılmış düzeyi karşılar.
  • Ayrıca Application Insights için yapılandırılmış düzeyi de karşılar.

Örneğin, günlük çerçeveniz, paket WARN'den com.example günlüğe kaydedilecek şekilde yapılandırıldıysa (ve bunu daha önce açıklandığı gibi yaptıysanız) ve Application Insights, INFO yakalamak üzere yapılandırıldıysa (ve açıklandığı şekilde yapılandırdıysanız), Application Insights, yalnızca paket WARN'den com.example'ü (ve daha ciddi olanları) yakalar.

Application Insights için yapılandırılan varsayılan düzey: INFO. Bu düzeyi değiştirmek istiyorsanız:

{
  "instrumentation": {
    "logging": {
      "level": "WARN"
    }
  }
}

Ortam değişkenini APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVELkullanarak da düzeyi ayarlayabilirsiniz. Ardından JSON yapılandırmasında belirtilen seviyenin önüne geçer.

Dosyada level belirtmek için bu geçerli applicationinsights.json değerleri kullanabilirsiniz. Farklı kayıt çerçevelerindeki kayıt seviyelerine nasıl karşılık geldiklerini tablo göstermektedir.

Seviye Log4j Geri Dönme JBoss TEMMUZ
KAPALI KAPALI KAPALI KAPALI KAPALI
ÖLÜMCÜL ÖLÜMCÜL HATA ÖLÜMCÜL AĞIR
HATA (veya AĞIR) HATA HATA HATA AĞIR
UYARI (veya İKAZ) UYARMAK UYARMAK UYARMAK UYARI
BİLGİ BİLGİ BİLGİ BİLGİ BİLGİ
Yapılandırma HATA AYIKLAMA HATA AYIKLAMA HATA AYIKLAMA Yapılandırma
HATA AYıKLAMA (veya İNCE) HATA AYIKLAMA HATA AYIKLAMA HATA AYIKLAMA İYİ
DAHA HASSAS HATA AYIKLAMA HATA AYIKLAMA HATA AYIKLAMA DAHA HASSAS
TRACE (veya FINEST) İzlemek İzlemek İzlemek EN İYİ
TÜMÜ TÜMÜ TÜMÜ TÜMÜ TÜMÜ

Not

Günlükçüye bir özel durum nesnesi geçirilirse, günlük iletisi (ve özel durum nesnesi ayrıntıları) Azure portalında exceptions tablosu yerine traces tablosunun altında gösterilir. Hem traces hem de exceptions tablolarındaki günlük iletilerini görmek istiyorsanız, bunlar arasında union yapmak için bir Günlükler (Kusto) sorgusu yazabilirsiniz. Örneğin:

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

Kayıt işaretçileri (önizleme)

3.4.2'den başlayarak Logback ve Log4j 2 için günlük işaretçilerini yakalayabilirsiniz:

{
  "preview": {
    "captureLogbackMarker": true,
    "captureLog4jMarker": true
  }
}

Logback için diğer log öznitelikleri (önizleme)

Sürüm 3.4.3'ten itibaren, Logback için FileName, ClassName, MethodName ve LineNumber'yi yakalayabilirsiniz.

{
  "preview": {
    "captureLogbackCodeAttributes": true
  }
}

Uyarı

Kod özniteliklerinin yakalanması bir performans yüküne neden olabilir.

Günlük kaydetme düzeyini özel boyut olarak ayarlama

Java aracısı sürüm 3.3.0'dan başlayarak, veriler LoggingLevel alanında zaten yakalandığından, SeverityLevel İzlemeler özel boyutunun bir parçası olarak varsayılan olarak yakalanmaz.

Gerekirse, önceki davranışı geçici olarak yeniden etkinleştirebilirsiniz:

{
  "preview": {
    "captureLoggingLevelAsCustomDimension": true
  }
}

Otomatik olarak alınan Mikrometre ölçümleri (Spring Boot Aktüatör ölçümleri dahil)

Uygulamanız Micrometer kullanıyorsa, Micrometer genel kayıt defterine gönderilen ölçümler otomatik olarak bir araya eklenir.

Uygulamanız Spring Boot Aktüatörünü kullanıyorsa, Spring Boot Aktüatör tarafından yapılandırılan ölçümler de otomatik olarak alınır.

Mikrometre kullanarak özel ölçümler gönderme

  1. Aşağıdaki örnekte gösterildiği gibi uygulamanıza Mikrometre ekleyin.

    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-core</artifactId>
      <version>1.6.1</version>
    </dependency>
    
  2. Aşağıdaki örnekte gösterildiği gibi bir ölçüm oluşturmak için Micrometer genel kayıt defterini kullanın.

    static final Counter counter = Metrics.counter("test.counter");
    
  3. Aşağıdaki komutu kullanarak ölçümleri kaydetmek için sayacı kullanın.

    counter.increment();
    
  4. Ölçümler customMetrics tablosuna alınır ve etiketler customDimensions sütununda yakalanır. Ölçümleri ölçüm ad alanının altındaki Log-based metrics de görüntüleyebilirsiniz.

    Not

    Application Insights Java, Mikrometre ölçüm adındaki tüm sayısal olmayan karakterleri (tireler hariç) alt çizgilerle değiştirir. Sonuç olarak, önceki test.counter ölçüm olarak test_countergösterilir.

Ölçümleri otomatik toplamayı devre dışı bırakma

Mikrometre ölçümlerinin ve Spring Boot Aktüatör ölçümlerinin otomatik toplamasını devre dışı bırakmak için:

{
  "instrumentation": {
    "micrometer": {
      "enabled": false
    }
  }
}

Not

Özel ölçümler ayrı olarak faturalandırılır ve ek maliyetler oluşturabilir. Fiyatlandırma bilgilerini denetlediğinden emin olun. Mikrometre ve Spring Boot Aktüatör ölçümlerini devre dışı bırakmak için yapılandırma dosyanıza aşağıdaki yapılandırmayı ekleyin.

InProc bağımlılıklarını otomatik toplama (önizleme)

Not

Bu özellik, Java aracısı 3.2.0 sürümünden itibaren kullanılabilir.

Denetleyici "InProc" bağımlılıklarını yakalamak istiyorsanız aşağıdaki yapılandırmayı kullanın:

{
  "preview": {
    "captureControllerSpans": true
  }
}

Tarayıcı SDK Yükleyicisi (önizleme)

Bu özellik, uygun Bağlantı Dizesini yapılandırmak da dahil olmak üzere tarayıcınızın HTML sayfalarına Tarayıcı SDK Yükleyicisi'ni otomatik olarak ekler.

Örneğin, Java uygulamanız aşağıdaki gibi bir yanıt döndürdüğünde:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Title</title>
  </head>
  <body>
  </body>
</html>

Reponse aşağıdaki gibi değiştirilir:

<!DOCTYPE html>
<html lang="en">
  <head>
    <script type="text/javascript">
    !function(v,y,T){var S=v.location,k="script"
    <!-- Removed for brevity -->
    connectionString: "YOUR_CONNECTION_STRING"
    <!-- Removed for brevity --> }});
    </script>
    <title>Title</title>
  </head>
  <body>
  </body>
</html>

Script, istemci tarafı web telemetrisini toplamaya yardımcı olur ve sunucu tarafı telemetrisiyle birlikte kullanıcının Azure portalına gönderir. Ayrıntıları ApplicationInsights-JS adresinde bulabilirsiniz.

Bu özelliği etkinleştirmek istiyorsanız aşağıdaki yapılandırma seçeneğini ekleyin:

{
  "preview": {
    "browserSdkLoader": {
      "enabled": true
    }
  }
}

Telemetri işlemcilerini yapılandırma (önizleme)

Telemetri işlemcilerini istek, bağımlılık ve izleme telemetrisine uygulanan kuralları yapılandırmak için kullanabilirsiniz. Application Insights Java 3.x, veriler dışarı aktarilmeden önce telemetri verilerini işleyebilir.

Kullanım örnekleri:

  • Hassas verileri maskele.
  • Koşullu olarak özel boyutlar ekleyin.
  • Azure portalında benzer telemetri verilerini toplamak için kullanılan span adını güncelleştirin.
  • Alım maliyetlerini kontrol etmek için belirli span özniteliklerini bırakın.
  • Alım maliyetlerini denetlemek için bazı ölçümleri filtreleyin.

Belirli (tam) veri işleme aralıklarını bırakmak istiyorsanız alım maliyetini denetlemek için bkz. Örneklem geçersiz kılmalarını yapılandırın.

Not

Telemetri işlemcileri özelliği önizleme olarak belirlenmiştir çünkü öznitelik anlam kurallarının deneysel durumu nedeniyle sürümden sürüme geriye dönük uyumluluğu garanti edemeyiz. Ancak bu özellik test edilmiştir ve üretimde desteklenir.

Telemetri işlemcileri terminolojisi

Telemetri işlemcilerini öğrenmeden önce iz ve kayıt terimlerini anlamanız gerekir.

Span, aşağıdakilerden birini temsil eden bir telemetri türüdür:

  • Gelen bir istek.
  • Giden bağımlılık (örneğin, başka bir hizmete uzaktan çağrı).
  • İşlem içi bağımlılık (örneğin, hizmetin alt bileşenleri tarafından yapılan çalışma).

Kayıt, şunu temsil eden bir telemetri türüdür:

  • Log4j, Logback ve java.util.logging'dan yakalanan günlük verileri

Telemetri işlemcileri için aşağıdaki span/log bileşenleri önemlidir:

Bileşen Açıklama
İsim Azure portalında istekler ve bağımlılıklar için birincil görüntü.
Öznitelikler Span öznitelikleri, belirli bir isteğin veya bağımlılığın hem standart hem de özel özelliklerini temsil eder.

Günlük öznitelikleri, belirli bir günlüğün hem standart hem de özel özelliklerini temsil eder.
Vücut İzleme iletisi veya gövdesi, Azure portalındaki günlükler için birincil görüntüdür.

Telemetri işlemcisi türleri

Şu anda, dört tür telemetri işlemcisi şunlardır:

Processor Açıklama
Öznitelik işlemcileri Öznitelik işlemcisi, bir telemetri öğesinin (span veya log) özniteliklerini ekleyebilir, güncelleştirebilir, silebilir veya karma hale getirebilir. Ayrıca, var olan bir öznitelikten bir veya daha fazla yeni öznitelik ayıklamak için normal ifade kullanabilir.
Span işlemcileri Bir span işlemcisi, isteklerin ve bağımlılıkların telemetri adını güncelleştirebilir. Span adından bir veya daha fazla yeni öznitelik ayıklamak için ayrıca düzenli ifade de kullanabilir.
Kayıt işlemcileri Günlük işlemcisi günlüklerin telemetri adını güncelleştirebilir. Günlük adından bir veya daha fazla yeni öznitelik ayıklamak için düzenli bir ifade de kullanabilir.
Ölçüm filtreleri Ölçüm filtresi, veri alımı maliyetini denetlemeye yardımcı olmak için ölçümleri filtrelemek için kullanılabilir.

Not

Şu anda telemetri işlemcileri yalnızca dize türü özniteliklerini işler. Boole veya sayı türünde öznitelikleri işlemez.

Telemetri işlemcilerini kullanmaya başlama

Başlamak için applicationinsights.json adlı bir yapılandırma dosyası oluşturun. Bunu applicationinsights-agent-*.jar ile aynı dizine kaydedin. Aşağıdaki şablonu kullanın.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        ...
      },
      {
        "type": "span",
        ...
      },
      {
        "type": "log",
        ...
      },
      {
        "type": "metric-filter",
        ...
      }
    ]
  }
}

Öznitelik işlemcisi, bir span ya da log özniteliklerini değiştirir. span veya log dahil etme veya dışlama özelliğini destekleyebilir. Yapılandırma dosyasının belirttiği sırayla gerçekleştirilen eylemlerin listesini alır. İşlemci şu eylemleri destekler:

Tavsiye

Daha fazla bilgi görüntülemek için aşağıdaki eylemlerin her birini genişletin.


insert

Eylem, insert telemetri öğesine key henüz mevcut olmayan yeni bir öznitelik ekler.

"processors": [
  {
    "type": "attribute",
    "actions": [
      {
        "key": "attribute1",
        "value": "value1",
        "action": "insert"
      }
    ]
  }
]

Eylem insert aşağıdaki ayarları gerektirir:

  • key
  • ya da valuefromAttribute
  • action: insert
update

Eylem, update telemetri öğesinde zaten var olan key bir özniteliği güncelleştirir.

"processors": [
  {
    "type": "attribute",
    "actions": [
      {
        "key": "attribute1",
        "value": "newValue",
        "action": "update"
      }
    ]
  }
]

Eylem update aşağıdaki ayarları gerektirir:

  • key
  • ya da valuefromAttribute
  • action: update
delete

Eylem, delete telemetri öğesinden bir özniteliği siler.

"processors": [
  {
    "type": "attribute",
    "actions": [
      {
        "key": "attribute1",
        "action": "delete"
      }
    ]
  }
]

Eylem delete aşağıdaki ayarları gerektirir:

  • key
  • action: delete
hash

Eylem hash mevcut bir öznitelik değerini SHA1 ile hashler.

"processors": [
  {
    "type": "attribute",
    "actions": [
      {
        "key": "attribute1",
        "action": "hash"
      }
    ]
  }
]

Eylem hash aşağıdaki ayarları gerektirir:

  • key
  • action: hash
extract

Not

extract özelliği, Java aracısı sürüm 3.0.2'den itibaren kullanılabilir.

Eylem, extract giriş anahtarından kuralın belirttiği hedef anahtarlara bir normal ifade kuralı kullanarak değerleri ayıklar. Bir hedef anahtar zaten varsa, extract eylem hedef anahtarı geçersiz kılar. Bu eylem, var olan özniteliğin kaynak olduğu span işlemcitoAttributes ayarı gibi davranır.

"processors": [
  {
    "type": "attribute",
    "actions": [
      {
        "key": "attribute1",
        "pattern": "<regular pattern with named matchers>",
        "action": "extract"
      }
    ]
  }
]

Eylem extract aşağıdaki ayarları gerektirir:

  • key
  • pattern
  • action: extract
mask

Not

mask özelliği, Java aracısı 3.2.5 sürümünden itibaren kullanılabilir.

Eylem, mask ve patterniçinde replace belirtilen normal ifade kuralını kullanarak öznitelik değerlerini maskeler.

"processors": [
  {
    "type": "attribute",
    "actions": [
      {
        "key": "attributeName",
        "pattern": "<regular expression pattern>",
        "replace": "<replacement value>",
        "action": "mask"
      }
    ]
  }
]

Eylem mask aşağıdaki ayarları gerektirir:

  • key
  • pattern
  • replace
  • action: mask

pattern ile ?< arasına yerleştirilmiş adlandırılmış bir grup içerebilir. Örnek: (?<userGroupName>[a-zA-Z.:\/]+)\d+? Grup (?<userGroupName>[a-zA-Z.:\/]+) ve userGroupName, grubun adıdır. pattern daha sonra, ${ ve } arasına yerleştirilen ve ardından maske gelen aynı adlandırılmış grubu içerebilir. Maskenin **: olduğu örnek. ${userGroupName}**

Ölçütleri dahil et ve ölçütleri dışla

Öznitelik işlemcileri isteğe bağlı include ve exclude ölçütleri destekler. Öznitelik işlemcisi yalnızca ölçütleriyle eşleşen (eğer varsa) ve ölçütleriyle eşleşmeyen (eğer varsa) telemetriye uygulanır.

Bu seçeneği yapılandırmak için include veya exclude (veya her ikisi) altında en az bir matchType ve spanNames veya attributes belirtin. include veya exclude yapılandırması belirtilen birden fazla koşula izin verir. Bir eşleşmeye neden olması için belirtilen tüm koşulların true olarak değerlendirilmesi gerekir.

Veri Alanı Açıklama Gereksinim
matchType spanNames dizilerindeki ve attributes dizilerindeki öğelerin nasıl yorumlandığını denetler. Olası değerler regexp ve strict şeklindedir.

Normal ifade eşleşmeleri öznitelik değerinin tamamıyla gerçekleştirilir, bu nedenle içinde herhangi bir yeri içeren abc bir değerle eşleştirmek istiyorsanız kullanmanız .*abc.*gerekir.
Required
spanNames Öğelerden en az biriyle eşleşmelidir. Opsiyonel
* attributes Eşleşecek özniteliklerin listesini belirtir. Eşleşmeye neden olması için bu özniteliklerin tümü tam olarak eşleşmelidir. Opsiyonel

Not

  • Eğer hem include hem de exclude belirtilirse, include özellikleri exclude özelliklerinden önce denetlenir.

  • include veya exclude yapılandırması belirtilmemişsespanNames, eşleşen ölçütler hem hem spansde logs öğesine uygulanır.

Telemetri işlemci örnekleri

"processors": [
  {
    "type": "attribute",
    "include": {
      "matchType": "strict",
      "spanNames": [
        "spanA",
        "spanB"
      ]
    },
    "exclude": {
      "matchType": "strict",
      "attributes": [
        {
          "key": "redact_trace",
          "value": "false"
        }
      ]
    },
    "actions": [
      {
        "key": "credit_card",
        "action": "delete"
      },
      {
        "key": "duplicate_key",
        "action": "delete"
      }
    ]
  }
]

Çeşitli öznitelik işlemci örneklerini görüntülemek için aşağıdaki bölümleri genişletin.


Ekle

Anahtar {"attribute1": "attributeValue1"}'in mevcut olmadığı span ve günlüklere attribute1 yeni öznitelik ekleyen aşağıdaki örnek.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
    "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "attribute1",
            "value": "attributeValue1",
            "action": "insert"
          }
        ]
      }
    ]
  }
}

Başka bir anahtardan ekle

Aşağıdaki örnek, anahtar anotherkey mevcut olmadığında, öznitelik {"newKey": "<value from attribute anotherkey>"}'ün değerini kullanarak yeni öznitelik newKey'i spans ve günlüklere ekler. Öznitelik anotherkey yoksa, spans ve günlüklere yeni öznitelik eklenmez.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "newKey",
            "fromAttribute": "anotherKey",
            "action": "insert"
          }
        ]
      }
    ]
  }
}

Güncelleştirme

Aşağıdaki örnek, özniteliği {"db.secret": "redacted"} olarak günceller. Özniteliği boo değerini kullanarak foo özniteliğini günceller. Özniteliği boo olmayan span'lar ve günlükler değişmez.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "db.secret",
            "value": "redacted",
            "action": "update"
          },
          {
            "key": "boo",
            "fromAttribute": "foo",
            "action": "update" 
          }
        ]
      }
    ]
  }
}

Silmek

Aşağıdaki örnekte anahtarına credit_cardsahip bir özniteliğin nasıl silineceği gösterilmektedir.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Hash

Aşağıdaki örnek, mevcut öznitelik değerlerinin nasıl hesaplanacağını göstermektedir.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "user.email",
            "action": "hash"
          }
        ]
      }
    ]
  }
}

Çıkarmak

Aşağıdaki örnekte, başka bir özniteliğin değerine göre yeni öznitelikler oluşturmak için normal ifadenin (regex) nasıl kullanılacağı gösterilmektedir.

Örneğin, verilen url.path = /path?queryParam1=value1,queryParam2=value2aşağıdaki öznitelikler eklenir:

  • httpProtocol: http
  • httpDomain: example.com
  • httpPath: path
  • httpQueryParams: queryParam1=value1,queryParam2=value2
  • url.path: yok değişiklik
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "^(?<httpProtocol>.*):\\/\\/(?<httpDomain>.*)\\/(?<httpPath>.*)(\\?|\\&)(?<httpQueryParams>.*)",
            "action": "extract"
          }
        ]
      }
    ]
  }
}

Maske

Örneğin, aşağıdaki yapılandırmalardan birini kullanarak url.path = https://example.com/user/12345622, url.path = https://example.com/user/**** olarak güncelleştirilir.

İlk yapılandırma örneği:

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "user\\/\\d+",
            "replace": "user\\/****",
            "action": "mask"
          }
        ]
      }
    ]
  }
}

Normal ifade grubu adıyla ikinci yapılandırma örneği:

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "actions": [
          {
            "key": "url.path",
            "pattern": "^(?<userGroupName>[a-zA-Z.:\/]+)\d+",
            "replace": "${userGroupName}**",
            "action": "mask"
          }
        ]
      }
    ]
  }
}

String türü olmayan öznitelik örnekleri

3.4.19 GA'dan itibaren telemetri işlemcileri dize türü olmayan öznitelikleri destekler: boolean, , doublelong, boolean-array, , double-array, long-array, ve string-array.

attributes.type json'da sağlanmadığında varsayılan olarak string olur.

Aşağıdaki örnek, özniteliklerin aşağıdaki örneklere uyduğu durumda yeni özniteliği {"newAttributeKeyStrict": "newAttributeValueStrict"} span'lara ve günlüklere ekler.

  • {"longAttributeKey": 1234}
  • {"booleanAttributeKey": true}
  • {"doubleArrayAttributeKey": [1.0, 2.0, 3.0, 4.0]}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "attributes": [
            {
              "key": "longAttributeKey",
              "value": 1234,
              "type": "long"
            },
            {
              "key": "booleanAttributeKey",
              "value": true,
              "type": "boolean"
            },
            {
              "key": "doubleArrayAttributeKey",
              "value": [1.0, 2.0, 3.0, 4.0],
              "type": "double-array"
            }
          ]
        },
        "actions": [
          {
            "key": "newAttributeKeyStrict",
            "value": "newAttributeValueStrict",
            "action": "insert"
          }
        ],
        "id": "attributes/insertNewAttributeKeyStrict"
      }
    ]
  }
}

Dize türü olmayan öznitelikler, regexp'yi destekler.

Aşağıdaki örnek, yeni özniteliği {"newAttributeKeyRegexp": "newAttributeValueRegexp"} span'lara ve günlüklere ekler ve özniteliğin longRegexpAttributeKey değeri 400 ile 499 arasındaki değerle eşleştiğinde uygular.

{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "regexp",
          "attributes": [
            {
              "key": "longRegexpAttributeKey",
              "value": "4[0-9][0-9]",
              "type": "long"
            }
          ]
        },
        "actions": [
          {
            "key": "newAttributeKeyRegexp",
            "value": "newAttributeValueRegexp",
            "action": "insert"
          }
        ],
        "id": "attributes/insertNewAttributeKeyRegexp"
      }
    ]
  }
}

Span örneklerini dahil et ve hariç tut

Çeşitli ekleme ve dışlama span örneklerini görüntülemek için aşağıdaki bölümleri genişletin.


Span'ları dahil et

Bu bölümde, bir öznitelik işlemcisi için span'lerin nasıl dahil olduğu gösterilmektedir. İşlemci, özelliklerle eşleşmeyen aralıkları işlemez.

Eşleşme, span adının spanA veya spanB değerine eşit olmasını gerektirir.

Bu aralıklar özellikleriyle include eşleşir ve işlemci eylemleri uygulanır.

  • Span1 Ad: 'spanA' Öznitelikleri: {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Ad: 'spanB' Öznitelikleri: {env: dev, test_request: false}
  • Span3 Ad: 'spanA' Öznitelikleri: {env: 1, test_request: dev, credit_card: 1234}

Bu yayılma alanı özelliklerle include eşleşmez ve işlemci eylemleri uygulanmaz:

  • Span4 İsim: 'spanC' Özellikler: {env: dev, test_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Dışlama aralıkları

Bu bölüm, bir öznitelik işlemcisi için aralıkların nasıl hariç tutulacağını göstermektedir. Bu işlemci, özelliklerle eşleşen yayılma aralıklarını işlemez.

Eşleşme, span adının spanA veya spanB değerine eşit olmasını gerektirir.

Aşağıdaki aralıklar özellikleriyle exclude eşleşmektedir ve işlemci işlemleri uygulanmaz.

  • Span1 Ad: 'spanA' Öznitelikleri: {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Ad: 'spanB' Öznitelikleri: {env: dev, test_request: false}
  • Span3 Ad: 'spanA' Öznitelikleri: {env: 1, test_request: dev, credit_card: 1234}

Bu bölüm exclude özellikleriyle eşleşmez ve işlemci eylemleri uygulanır.

  • Span4 İsim: 'spanC' Özellikler: {env: dev, test_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "exclude": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Birden çok ölçüt kullanarak yayılma aralıklarını dışlama

Bu bölüm, bir öznitelik işlemcisi için aralıkların nasıl hariç tutulacağını göstermektedir. Bu işlemci, özelliklerle eşleşen yayılma aralıklarını işlemez.

Eşleşme için aşağıdaki koşulların karşılanması gerekir:

  • Span içinde, değeri env olan bir öznitelik (örneğin, dev) bulunmalıdır.
  • Yayılma alanının anahtarı test_requestolan bir özniteliği olmalıdır.

Aşağıdaki aralıklar özellikleriyle exclude eşleşmektedir ve işlemci işlemleri uygulanmaz.

  • Span1 Ad: 'spanB' Öznitelikleri: {env: dev, test_request: 123, credit_card: 1234}
  • Span2 Ad: 'spanA' Öznitelikleri: {env: dev, test_request: false}

Aşağıdaki alan exclude özellikleriyle eşleşmiyor ve işlemci işlemleri uygulanır:

  • Span3 Ad: 'spanB' Öznitelikleri: {env: 1, test_request: dev, credit_card: 1234}
  • Span4 Ad: 'spanC' Öznitelikleri: {env: dev, dev_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "exclude": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ],
          "attributes": [
            {
              "key": "env",
              "value": "dev"
            },
            {
              "key": "test_request"
            }
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Seçmeli işleme

Bu bölümde, bu işlemcinin hangi span'lara uygulanması gerektiğini belirten span özellikleri kümesinin nasıl belirtileceği gösterilmektedir. include Özellikler hangi aralıkların işlenmesi gerektiğini belirtir. Özellikler exclude işlenmemesi gereken aralıkları filtreler.

Aşağıdaki yapılandırmada, bu span'lar özelliklerle eşleşip işlemci eylemleri uygulanır:

  • Span1 Ad: 'spanB' Öznitelikleri: {env: production, test_request: 123, credit_card: 1234, redact_trace: "false"}
  • Span2 Ad: 'spanA' Öznitelikleri: {env: hazırlama, test_request: false, redact_trace: true}

Bu yayılma alanları özelliklerle include eşleşmez ve işlemci eylemleri uygulanmaz:

  • Span3 Ad: 'spanB' Öznitelikleri: {env: üretim, test_request: doğru, credit_card: 1234, redact_trace: yanlış}
  • Span4 İsim: 'spanC' Özellikler: {env: dev, test_request: false}
{
  "connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "spanNames": [
            "spanA",
            "spanB"
          ]
        },
        "exclude": {
          "matchType": "strict",
          "attributes": [
            {
              "key": "redact_trace",
              "value": "false"
            }
          ]
        },
        "actions": [
          {
            "key": "credit_card",
            "action": "delete"
          },
          {
            "key": "duplicate_key",
            "action": "delete"
          }
        ]
      }
    ]
  }
}

Telemetri işlemcileri hakkında SSS

Sık sorulan soruları (SSS) gözden geçirmek için bkz . Telemetri işlemcileri hakkında SSS

Varsayılan davranışı geçersiz kılma veya gizleme

Bu bölümde:

Bağlantı dizesi ayarları geçersiz kılmaları (önizleme sürümü)

Bu özellik 3.4.0 sürümünden itibaren önizleme aşamasındadır.

Bağlantı dizesi geçersiz kılma ayarları, varsayılan bağlantı dizesini geçersiz kılmanıza olanak tanır. Örneğin, şunları yapabilirsiniz:

  • Bir HTTP yolu ön eki için /myapp1 bir bağlantı dizesi ayarlayın.
  • Başka bir HTTP yolu ön eki için başka bir /myapp2/ bağlantı dizesi ayarlayın.
{
  "preview": {
    "connectionStringOverrides": [
      {
        "httpPathPrefix": "/myapp1",
        "connectionString": "..."
      },
      {
        "httpPathPrefix": "/myapp2",
        "connectionString": "..."
      }
    ]
  }
}

Bulut rol adı geçersiz kılma (önizleme)

Bu özellik 3.3.0 sürümünden itibaren önizleme aşamasındadır.

Bulut rolü adı geçersiz kılmaları, varsayılan bulut rolü adını geçersiz kılmanıza olanak sağlar. Örneğin, şunları yapabilirsiniz:

  • Bir HTTP yolu ön eki /myapp1için bir bulut rolü adı ayarlayın.
  • Başka bir HTTP yolu ön eki için farklı bir bulut rolü adı ayarlayın /myapp2/.
{
  "preview": {
    "roleNameOverrides": [
      {
        "httpPathPrefix": "/myapp1",
        "roleName": "Role A"
      },
      {
        "httpPathPrefix": "/myapp2",
        "roleName": "Role B"
      }
    ]
  }
}

Çalışma zamanında bağlantı dizesini yapılandırın

Not

Bu özellik, Java aracısı 3.4.8 sürümünden itibaren kullanılabilir.

çalışma zamanında bağlantı dizesi yapılandırma yeteneğine ihtiyacınız varsa bu özelliği json yapılandırmanıza ekleyin:

{
  "connectionStringConfiguredAtRuntime": true
}

Uygulamanıza ekleyin applicationinsights-core :

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-core</artifactId>
  <version>3.7.8</version>
</dependency>

sınıfında configure(String)statik com.microsoft.applicationinsights.connectionstring.ConnectionString yöntemini kullanın.

Not

Herhangi bir telemetri, bağlantı dizesi yapılandırılmadan önce yakalanırsa bırakılacaktır, bu nedenle uygulamanız başlatıldığında mümkün olan en erken zamanda yapılandırmak en iyisidir.

Örnek alımını yerel olarak devre dışı bırakma (önizleme)

Varsayılan olarak, Java aracısındaki etkin örnekleme yüzdesi %100 olduğunda ve Application Insights kaynağınızda ingestion örnekleme yapılandırıldığında, ingestion örnekleme yüzdesi uygulanır.

Bu davranışın hem %100 sabit hızlı örnekleme için hem de istek oranı hız sınırını aşmadığında (sürekli kayan zaman penceresinde etkili bir şekilde %100 yakalama) hız sınırlı örnekleme için de geçerli olduğunu unutmayın.

3.5.3'ten başlayarak bu davranışı devre dışı bırakabilir (bu durumlarda Application Insights kaynağınızda alım örneklemesi yapılandırıldığında bile telemetri verilerinin %100'ünün kalmasını sağlayabilirsiniz):

{
  "preview": {
    "sampling": {
      "ingestionSamplingEnabled": false
    }
  }
}

Telemetri verilerini koruma

Sorgu maskeleme

Java Veritabanı Bağlantısı (JDBC) ve Mongo sorgularındaki değişmez değerler, hassas verilerin yanlışlıkla yakalanmasını önlemek için varsayılan olarak maskelenir.

3.4.0'dan başlayarak bu davranış devre dışı bırakılabilir. Örneğin:

{
  "instrumentation": {
    "jdbc": {
      "masking": {
        "enabled": false
      }
    }
  }
}

HTTP üst bilgileri

Not

Bu özellik, Java aracısı 3.3.0 sürümünden itibaren kullanılabilir.

Sunucu (istek) ve istemci (bağımlılık) telemetrinizde istek ve yanıt üst bilgilerini yakalayabilirsiniz:

{
  "preview": {
    "captureHttpServerHeaders": {
      "requestHeaders": [
        "My-Header-A"
      ],
      "responseHeaders": [
        "My-Header-B"
      ]
    }
  }
}

Üst bilgi adları büyük/küçük harfe duyarlı değildir. Önceki örnekler, http.request.header.my_header_a ve http.response.header.my_header_b özellik adları altında yakalanır.

Çalışma zamanı ve ortam yapılandırmasını yapılandırma

Bu bölümde:

Kimlik Doğrulaması

Not

Kimlik doğrulama özelliği, Java aracısı sürüm 3.4.17 itibarıyla Genel Kullanıma hazırdır.

Microsoft Entra kimlik doğrulaması için gereken token kimlik bilgileri oluşturmak üzere aracıyı yapılandırmak için kimlik doğrulamasını kullanabilirsiniz. Daha fazla bilgi için bkz. Application Insights için Microsoft Entra kimlik doğrulaması.

HTTP proxy'si

Uygulamanız bir güvenlik duvarının arkasındaysa ve doğrudan Application Insights'a bağlanamıyorsa Azure İzleyici uç nokta erişimi ve güvenlik duvarı yapılandırması konusuna bakın.

Bu sorunu geçici olarak çözmek için Application Insights Java 3.x'i HTTP ara sunucusu kullanacak şekilde yapılandırabilirsiniz.

{
  "proxy": {
    "host": "myproxy",
    "port": 8080
  }
}

Http proxy'sini, biçimini APPLICATIONINSIGHTS_PROXYalan ortam değişkenini https://<host>:<port>kullanarak da ayarlayabilirsiniz. Daha sonra JSON yapılandırmasında belirtilen proxy'nin üzerine geçer.

Ara sunucunuz için ortam değişkeniyle APPLICATIONINSIGHTS_PROXY bir kullanıcı ve parola sağlayabilirsiniz: https://<user>:<password>@<host>:<port>.

Application Insights Java 3.x, ayarlanmışsa, global https.proxyHost ve https.proxyPort sistem özelliklerini ve gerekirse http.nonProxyHosts'yi dikkate alır.

Ölçüm aralığı

Not

Bu özellik, Java aracısı 3.0.3 sürümünden itibaren kullanılabilir.

Varsayılan olarak, ölçümler her 60 saniyede bir kaydedilir. Bu aralığı değiştirebilirsiniz:

{
  "metricIntervalSeconds": 300
}

Java aracı sürüm 3.4.9 (GA) ile başlayarak, metricIntervalSecondsAPPLICATIONINSIGHTS_METRIC_INTERVAL_SECONDS ortam değişkenini kullanarak da ayarlayabilirsiniz. O zaman, JSON yapılandırmasında belirtilen metricIntervalSeconds'ye göre önceliklidir.

Bu ayar aşağıdaki ölçümler için geçerlidir:

Kalp Atışı

Varsayılan olarak, Application Insights Java 3.x her 15 dakikada bir durum göstergesi gönderir. Uyarıları tetiklemek amacıyla kalp atış hızı ölçümünü kullanıyorsanız, bu ölçümün sıklığını artırabilirsiniz.

{
  "heartbeat": {
    "intervalSeconds": 60
  }
}

Not

Kalp atışı verileri Application Insights kullanımını izlemek için de kullanıldığından, aralığı 15 dakikadan daha uzun süreye çıkaramazsınız.

Alma hatalarından kurtarma

Not

Bu özellik, Java aracısı 3.3.0 sürümünden itibaren kullanılabilir.

Application Insights hizmetine telemetri gönderilemediğinde, Application Insights Java 3.x telemetriyi diske kaydeder ve diskten yeniden göndermeyi denemeye devam eder.

Disk kalıcılığı için varsayılan sınır 50 Mb'tır. Telemetri biriminiz yüksekse veya daha uzun ağ veya alma hizmeti kesintilerinden kurtarabilmeniz gerekiyorsa şu sınırı artırabilirsiniz:

{
  "preview": {
    "diskPersistenceMaxSizeMb": 50
  }
}

Kendi kendine tanılama

“Öz-tanılama”, Application Insights Java 3.x versiyonundan gelen dahili kayıt tutmayı ifade eder. Bu işlevsellik, Application Insights'ın kendisiyle ilgili sorunları tespit etme ve tanılama konusunda yararlı olabilir.

Varsayılan olarak, Application Insights Java 3.x, INFO düzeyinde hem dosyaya applicationinsights.log hem de konsola günlük kaydı yapar, bu da şu yapılandırmaya karşılık gelir:

{
  "selfDiagnostics": {
    "destination": "file+console",
    "level": "INFO",
    "file": {
      "path": "applicationinsights.log",
      "maxSizeMb": 5,
      "maxHistory": 1
    }
  }
}

Yukarıdaki yapılandırma örneğinde:

  • level, , OFF, ERROR, WARN, INFOveya DEBUGtürlerinden biri TRACEolabilir.
  • path mutlak veya göreli bir yol olabilir. Göreli yollar, bulunduğu applicationinsights-agent-3.7.8.jar dizine göre çözümlenir.

Java aracısı sürüm 3.0.2'den başlayarak, kendi kendine tanılama APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL ayarını, ortam değişkeni level kullanarak yapabilirsiniz. Bu durumda JSON yapılandırmasında belirtilen kendi kendine tanılama düzeyinin üzerinde daha öncelikli hale gelir.

Java aracısı sürüm 3.0.3'den başlayarak, APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_FILE_PATH ortam değişkenini kullanarak kendi kendine tanılama dosyası konumunu da ayarlayabilirsiniz. JSON yapılandırmasında belirtilen kendi kendine tanılama dosya yolunun önüne geçer.

Telemetri bağıntısı

Telemetri bağıntısı varsayılan olarak etkindir, ancak yapılandırmada devre dışı bırakabilirsiniz:

{
  "preview": {
    "disablePropagation": true
  }
}

Gelişmiş ve önizleme özellikleri

Özelleştirilmiş enstrümantasyon (önizleme)

Not

Bu özellik, Java aracısı 3.3.1 sürümünden itibaren kullanılabilir.

Uygulamanızda bir yöntemin span'larını kaydedebilirsiniz.

{
  "preview": {
    "customInstrumentation": [
      {
        "className": "my.package.MyClass",
        "methodName": "myMethod"
      }
    ]
  }
}

Enstrümantasyonları önizleme

Not

Bu özellik, Java aracısı 3.2.0 sürümünden itibaren kullanılabilir.

Aşağıdaki önizleme araçlarını etkinleştirebilirsiniz:

{
  "preview": {
    "instrumentation": {
      "akka": {
        "enabled": true
      },
      "apacheCamel": {
        "enabled": true
      },
      "grizzly": {
        "enabled": true
      },
      "ktor": {
        "enabled": true
      },
      "play": {
        "enabled": true
      },
      "r2dbc": {
        "enabled": true
      },
      "springIntegration": {
        "enabled": true
      },
      "vertx": {
        "enabled": true
      }
    }
  }
}

Not

  • Akka araçları, Java aracı sürüm 3.2.2'den itibaren kullanılabilir.

  • Vertx HTTP Kütüphanesi enstrümantasyonu, Java aracısı 3.3.0 sürümünden itibaren kullanılabilir.

Yapılandırma dosyası örneği

Bu örnekte bir yapılandırma dosyasının birden çok bileşenle nasıl göründüğü gösterilir. Gereksinimlerinize göre belirli seçenekleri yapılandırın.

{
  "connectionString": "...",
  "role": {
    "name": "my cloud role name"
  },
  "sampling": {
    "percentage": 100
  },
  "jmxMetrics": [
  ],
  "customDimensions": {
  },
  "instrumentation": {
    "logging": {
      "level": "INFO"
    },
    "micrometer": {
      "enabled": true
    }
  },
  "proxy": {
  },
  "preview": {
    "processors": [
    ]
  },
  "selfDiagnostics": {
    "destination": "file+console",
    "level": "INFO",
    "file": {
      "path": "applicationinsights.log",
      "maxSizeMb": 5,
      "maxHistory": 1
    }
  }
}