Przesłonięcia próbkowania — Szczegółowe informacje aplikacji usługi Azure Monitor dla języka Java

Uwaga

Funkcja przesłonięcia próbkowania jest dostępna w wersji ogólnodostępnej, począwszy od wersji 3.5.0.

Przesłonięcia próbkowania umożliwiają zastąpienie domyślnej wartości procentowej próbkowania, na przykład:

  • Ustaw wartość procentową próbkowania na 0 (lub niewielką wartość) dla hałaśliwych testów kondycji.
  • Ustaw wartość procentową próbkowania na 0 (lub niewielką wartość) dla hałaśliwych wywołań zależności.
  • Ustaw wartość procentową próbkowania na 100 dla ważnego typu żądania (na przykład /login), mimo że masz domyślne próbkowanie skonfigurowane na wartość niższą.

Terminologia

Zanim dowiesz się więcej na temat przesłonięć próbkowania, należy zrozumieć zakres terminów. Zakres jest ogólnym terminem dla:

  • Żądanie przychodzące.
  • Zależność wychodząca (na przykład zdalne wywołanie do innej usługi).
  • Zależność w procesie (na przykład praca wykonywana przez podskładniki usługi).

W przypadku przesłonięć próbkowania te składniki zakresu są ważne:

  • Atrybuty

Atrybuty zakresu reprezentują zarówno właściwości standardowe, jak i niestandardowe danego żądania lub zależności.

Wprowadzenie

Aby rozpocząć, utwórz plik konfiguracji o nazwie applicationinsights.json. Zapisz go w tym samym katalogu co applicationinsights-agent-*.jar. Użyj następującego szablonu.

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

Jak to działa

telemetryType(telemetryKind w aplikacji Szczegółowe informacje 3.4.0) musi być jednym z request, , dependency( trace log) lub exception.

Po uruchomieniu zakresu typ zakresu i atrybuty obecne w nim w tym czasie są używane do sprawdzania, czy którykolwiek z przesłonięć próbkowania jest zgodny.

Dopasowania mogą mieć strict wartość lub regexp. Dopasowania wyrażeń regularnych są wykonywane względem całej wartości atrybutu, więc jeśli chcesz dopasować wartość zawierającą abc ją w dowolnym miejscu, musisz użyć polecenia .*abc.*. Przesłonięcia próbkowania mogą określać wiele kryteriów atrybutów, w tym przypadku wszystkie muszą być zgodne z przesłonięć próbkowania, aby były zgodne.

Jeśli jedno z przesłonięć próbkowania jest zgodne, jego procent próbkowania jest używany do decydowania, czy próbkować zakres, czy nie.

Używane jest tylko pierwsze przesłonięcia próbkowania, które pasuje.

Jeśli żadne przesłonięcia próbkowania nie są zgodne:

  • Jeśli jest to pierwszy zakres śledzenia, zostanie użyta konfiguracja próbkowania najwyższego poziomu.
  • Jeśli nie jest to pierwszy zakres w śladzie, zostanie użyta decyzja o próbkowaniu nadrzędnym.

Przykład: Pomijanie zbierania danych telemetrycznych na potrzeby kontroli kondycji

W tym przykładzie pomija się zbieranie danych telemetrycznych dla wszystkich żądań do /health-checksusługi .

W tym przykładzie pomija się również zbieranie wszystkich zakresów podrzędnych (zależności), które normalnie byłyby zbierane w obszarze /health-checks.

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

Przykład: Pomijanie zbierania danych telemetrycznych dla hałaśliwego wywołania zależności

W tym przykładzie pomija się zbieranie danych telemetrycznych dla wszystkich GET my-noisy-key wywołań usługi Redis.

{
  "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
      }
    ]
  }
}

Przykład: Zbieranie 100% danych telemetrycznych dla ważnego typu żądania

W tym przykładzie zebrano 100% danych telemetrycznych dla elementu /login.

Ponieważ zakresy podrzędne (zależności) są zgodne z decyzją o próbkowaniu elementu nadrzędnego (bez przesłonięcia próbkowania dla tego zakresu podrzędnego), są one również zbierane dla wszystkich żądań "/login".

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

Atrybuty zakresu dostępne do próbkowania

Nazwy atrybutów Span są oparte na konwencjach semantycznych OpenTelemetry. (HTTP, Messaging, Database, RPC)

https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md

Uwaga

Aby wyświetlić dokładny zestaw atrybutów przechwyconych przez aplikację Szczegółowe informacje Java dla aplikacji, ustaw poziom samodzielnej diagnostyki na debugowanie i poszukaj komunikatów debugowania rozpoczynających się od tekstu "export span".

Uwaga

Tylko atrybuty ustawione na początku zakresu są dostępne do próbkowania, więc atrybuty, takie jak http.response.status_code czas trwania żądania lub przechwycone później, można filtrować za pomocą rozszerzeń Języka Java OpenTelemetry. Oto przykładowe rozszerzenie, które filtruje zakresy na podstawie czasu trwania żądania.

Rozwiązywanie problemów

Jeśli używasz polecenia regexp , a przesłonięcia próbkowania nie działają, spróbuj użyć wyrażenia regularnego .* . Jeśli próbkowanie działa teraz, oznacza to, że masz problem z pierwszym wyrażeniem regularnym i przeczytaj tę dokumentację wyrażeń regularnych.

Jeśli nie działa z programem , może wystąpić problem ze .*składnią w pliku application-insights.json file. Przyjrzyj się dziennikom Szczegółowe informacje aplikacji i sprawdź, czy widzisz komunikaty ostrzegawcze.