Přepsání vzorkování – Přehledy aplikací služby Azure Monitor pro Javu

Poznámka:

Funkce přepsání vzorkování je ve verzi GA počínaje verzí 3.5.0.

Přepsání vzorkování umožňuje přepsat výchozí procento vzorkování, například:

  • Nastavte procento vzorkování na 0 (nebo nějakou malou hodnotu) pro hlučné kontroly stavu.
  • Pro volání hlučné závislosti nastavte procento vzorkování na 0 (nebo na určitou malou hodnotu).
  • Nastavte procento vzorkování na 100 pro důležitý typ požadavku (například /login) i když máte výchozí vzorkování nakonfigurované na něco nižšího.

Terminologie

Než se dozvíte o přepsání vzorkování, měli byste porozumět rozsahu termínů. Rozsah je obecný termín pro:

  • Příchozí požadavek.
  • Odchozí závislost (například vzdálené volání do jiné služby).
  • Závislost v procesu (například práce provedená dílčími součástmi služby)

Pro přepsání vzorkování jsou tyto součásti rozsahu důležité:

  • Atributy

Atributy span představují standardní i vlastní vlastnosti daného požadavku nebo závislosti.

Začínáme

Začněte vytvořením konfiguračního souboru s názvem applicationinsights.json. Uložte ho do stejného adresáře jako applicationinsights-agent-*.jar. Použijte následující šablonu.

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

Jak to funguje

telemetryType(telemetryKind v aplikaci Přehledy 3.4.0) musí být jedna z request, , dependencytrace (protokol) nebo exception.

Po spuštění rozsahu se typ rozsahu a atributy, které jsou na něm přítomné, použijí ke kontrole, jestli se některá z přepsání vzorkování neshoduje.

Shody mohou být buď strict nebo regexp. Porovnávání regulárních výrazů se provádí s celou hodnotou atributu, takže pokud chcete shodovat s hodnotou, která obsahuje abc kdekoli v ní, je potřeba použít .*abc.*. Přepsání vzorkování může zadat více kritérií atributů, v takovém případě se musí všechny shodovat, aby se přepsání vzorkování shodovaly.

Pokud se některý z přepsání vzorkování shoduje, použije se jeho procento vzorkování k rozhodnutí, jestli chcete vzorkovat rozsah nebo ne.

Použije se pouze první přepsání vzorkování, které odpovídá.

Pokud se neshodují žádné přepsání vzorkování:

  • Pokud se jedná o první rozsah trasování, použije se konfigurace vzorkování nejvyšší úrovně.
  • Pokud není prvním rozsahem v trasování, použije se nadřazené rozhodnutí vzorkování.

Příklad: Potlačení shromažďování telemetrie pro kontroly stavu

Tento příklad potlačí shromažďování telemetrie pro všechny požadavky na /health-checks.

Tento příklad také potlačí shromažďování všech podřízených rozsahů (závislostí), které by se normálně shromáždily v rámci /health-checks.

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

Příklad: Potlačení shromažďování telemetrie pro volání hlučné závislosti

Tento příklad potlačí shromažďování telemetrie pro všechna GET my-noisy-key volání 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
      }
    ]
  }
}

Příklad: Shromažďování 100 % telemetrie pro důležitý typ požadavku

Tento příklad shromažďuje 100 % telemetrie pro /login.

Vzhledem k tomu, že podřízené rozsahy (závislosti) respektují rozhodnutí nadřazeného vzorkování (chybí veškeré přepsání vzorkování pro toto podřízené rozpětí), shromažďují se také pro všechny požadavky typu /login.

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

Atributy spanu dostupné pro vzorkování

Názvy atributů Span jsou založené na sémantických konvencích OpenTelemetry. (HTTP, zasílání zpráv, databáze, RPC)

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

Poznámka:

Pokud chcete zobrazit přesnou sadu atributů zachycených aplikací Přehledy Java pro vaši aplikaci, nastavte úroveň samoobslužné diagnostiky na ladění a vyhledejte ladicí zprávy začínající textem "exporting span".

Poznámka:

Pro vzorkování jsou k dispozici pouze atributy nastavené na začátku rozsahu, takže atributy, jako http.response.status_code je doba trvání požadavku, které jsou zachyceny později, je možné filtrovat prostřednictvím rozšíření OpenTelemetry Java. Tady je ukázkové rozšíření, které filtruje rozsah na základě doby trvání požadavku.

Řešení problému

Pokud použijete regexp a přepsání vzorkování nefunguje, zkuste použít .* regulární výraz. Pokud teď vzorkování funguje, znamená to, že máte problém s prvním regulárním výrazem a přečtěte si tuto dokumentaci k regulárnímu výrazu.

Pokud nefunguje .*, může se stát, že máte ve své application-insights.json filesyntaxi problém se syntaxí. Podívejte se na protokoly Přehledy aplikace a podívejte se, jestli si všimnete upozornění.