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

Uitleg

telemetryType(telemetryKind in Application Insights 3.4.0) moet een van request, dependencytrace (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-checksonderdrukt.

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 /loginverzameld.

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.status_code die later worden vastgelegd, niet kunnen worden gebruikt voor steekproeven.

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.