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
, , dependency
trace
(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 file
syntaxi problém se syntaxí. Podívejte se na protokoly Přehledy aplikace a podívejte se, jestli si všimnete upozornění.