Sampling-onderdrukkingen - Azure Monitor Application Insights voor Java
Notitie
Vanaf 3.5.0 is de functie voor het overschrijven van steekproeven beschikbaar.
Met steekproeven kunt u het standaardsamplingspercentage overschrijven, bijvoorbeeld:
- Stel het steekproefpercentage in op 0 (of een kleine waarde) voor ruisstatuscontroles.
- Stel het steekproefpercentage in op 0 (of een kleine waarde) voor aanroepen van ruis.
- Stel het steekproefpercentage in op 100 voor een belangrijk aanvraagtype (bijvoorbeeld
/login
) hoewel u de standaardsampling hebt geconfigureerd voor iets lagers.
Terminologie
Voordat u meer te weten komt over steekproeven, moet u de termspanne begrijpen. Een periode is een algemene term voor:
- Een binnenkomende aanvraag.
- Een uitgaande afhankelijkheid (bijvoorbeeld een externe aanroep naar een andere service).
- Een in-process afhankelijkheid (bijvoorbeeld werk dat wordt uitgevoerd door subonderdelen van de service).
Voor steekproeven zijn deze spanonderdelen belangrijk:
- Kenmerken
De spankenmerken vertegenwoordigen zowel standaard- als aangepaste eigenschappen van een bepaalde aanvraag of afhankelijkheid.
Aan de slag
Maak eerst een configuratiebestand met de naam applicationinsights.json. Sla deze op in dezelfde map als applicationinsights-agent-*.jar. Gebruik de volgende sjabloon.
{
"connectionString": "...",
"sampling": {
"percentage": 10,
"overrides": [
{
"telemetryType": "request",
"attributes": [
...
],
"percentage": 0
},
{
"telemetryType": "request",
"attributes": [
...
],
"percentage": 100
}
]
}
}
Hoe het werkt
telemetryType
(telemetryKind
in Application Insights 3.4.0) moet een van request
, dependency
trace
(logboek) of exception
.
Wanneer een periode wordt gestart, worden het type span en de kenmerken die op dat moment aanwezig zijn, gebruikt om te controleren of een van de steekproeven overeenkomt.
Overeenkomsten kunnen een strict
of regexp
. Reguliere expressieovereenkomsten worden uitgevoerd op basis van de gehele kenmerkwaarde, dus als u een waarde wilt vergelijken die abc
ergens in de expressie staat, moet u deze gebruiken .*abc.*
.
Een steekproefoverschrijving kan meerdere kenmerkcriteria opgeven. In dat geval moeten ze allemaal overeenkomen met de steekproefoverschrijving.
Als een van de steekproeven overeenkomsten overschrijft, wordt het steekproefpercentage gebruikt om te bepalen of de spanwijdte moet worden genomen of niet.
Alleen de eerste steekproeven die overeenkomen, worden gebruikt.
Als er geen steekproeven worden overschreven, komt het volgende overeen:
- Als dit het eerste bereik in de trace is, wordt de configuratie van steekproeven op het hoogste niveau gebruikt.
- Als dit niet het eerste bereik in de trace is, wordt de beslissing over de bovenliggende steekproeven gebruikt.
Voorbeeld: Het verzamelen van telemetrie voor statuscontroles onderdrukken
In dit voorbeeld wordt het verzamelen van telemetrie voor alle aanvragen naar /health-checks
onderdrukt.
In dit voorbeeld wordt ook het verzamelen van downstream-spanten (afhankelijkheden) onderdrukt die normaal gesproken worden verzameld onder /health-checks
.
{
"connectionString": "...",
"sampling": {
"overrides": [
{
"telemetryType": "request",
"attributes": [
{
"key": "url.path",
"value": "/health-check",
"matchType": "strict"
}
],
"percentage": 0
}
]
}
}
Voorbeeld: Het verzamelen van telemetrie onderdrukken voor een aanroep van ruisafhankelijkheid
In dit voorbeeld wordt het verzamelen van telemetrie voor alle GET my-noisy-key
redis-aanroepen onderdrukt.
{
"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
}
]
}
}
Voorbeeld: 100% van de telemetrie verzamelen voor een belangrijk aanvraagtype
In dit voorbeeld wordt 100% van de telemetrie voor /login
verzameld.
Omdat downstream-afhankelijkheden de beslissing van de bovenliggende steekproef respecteren (geen steekproeven overschrijven voor die downstream span), worden ze ook verzameld voor alle aanvragen voor '/login'.
{
"connectionString": "...",
"sampling": {
"percentage": 10
},
"sampling": {
"overrides": [
{
"telemetryType": "request",
"attributes": [
{
"key": "url.path",
"value": "/login",
"matchType": "strict"
}
],
"percentage": 100
}
]
}
}
Span-kenmerken die beschikbaar zijn voor steekproeven
Namen van spankenmerken zijn gebaseerd op de semantische conventies van OpenTelemetry. (HTTP, Messaging, Database, RPC)
https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md
Notitie
Als u de exacte set kenmerken wilt zien die zijn vastgelegd door Application Insights Java voor uw toepassing, stelt u het niveau voor zelfdiagnose in op foutopsporing en zoekt u naar foutopsporingsberichten die beginnen met de tekst 'span exporteren'.
Notitie
Alleen kenmerken die aan het begin van het bereik zijn ingesteld, zijn beschikbaar voor steekproeven, zodat kenmerken zoals http.response.status_code
of aanvraagduur die later worden vastgelegd, kunnen worden gefilterd via OpenTelemetry Java-extensies. Hier volgt een voorbeeldextensie die filtert op basis van de duur van de aanvraag.
Probleemoplossing
Als u de regexp
steekproeven gebruikt en de steekproeven niet werken, kunt u het proberen met de .*
regex. Als de sampling nu werkt, betekent dit dat u een probleem hebt met de eerste regex en deze regex-documentatie leest.
Als het niet werkt .*
, kan het zijn dat u een syntaxisprobleem hebt in uw application-insights.json file
. Bekijk de Application Insights-logboeken en kijk of u waarschuwingsberichten ziet.