Stichprobenüberschreibungen – Azure Monitor Application Insights für Java

Hinweis

Die Funktion für Stichprobenüberschreibungen ist allgemein verfügbar, beginnend ab Version 3.5.0.

Mithilfe von Stichprobenüberschreibungen können Sie den Standardprozentsatz der Stichprobenentnahme überschreiben. Hier einige Beispiele:

  • Legen Sie den Prozentsatz der Stichprobenentnahme für überflüssige Integritätsprüfungen auf 0 (oder einen kleinen Wert) fest.
  • Legen Sie den Prozentsatz der Stichprobenentnahme für überflüssige Abhängigkeitsaufrufe auf 0 (oder einen kleinen Wert) fest.
  • Legen Sie den Prozentsatz der Stichprobenentnahme für einen wichtigen Anforderungstyp (z. B. /login) auf 100 fest, auch wenn die Standardstichprobenentnahme auf einen niedrigeren Wert festgelegt ist.

Terminologie

Bevor wir uns mit Stichprobenüberschreibungen befassen, sollten wir zunächst die Benennung span erläutern. Ein span ist eine allgemeine Bezeichnung für Folgendes:

  • Eine eingehende Anforderung
  • Eine ausgehende Abhängigkeit (z. B. ein Remoteaufruf eines anderen Diensts)
  • Eine In-Process-Abhängigkeit (z. B. Vorgänge, die von Unterkomponenten des Diensts durchgeführt werden)

Bei Stichprobenüberschreibungen sind die folgenden span-Komponenten wichtig:

  • Attribute

Die span-Attribute stehen sowohl für die standardmäßigen als auch die benutzerdefinierten Eigenschaften einer bestimmten Anforderung oder Abhängigkeit.

Erste Schritte

Zunächst erstellen Sie eine Konfigurationsdatei namens applicationinsights.json. Speichern Sie diese im gleichen Verzeichnis, in dem sich auch applicationinsights-agent-*.jar befindet. Verwenden Sie hierfür die folgende Vorlage.

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

Funktionsweise

telemetryType (telemetryKind in Application Insights 3.4.0) muss entweder request, dependency, trace (log) oder exception sein.

Wenn ein span-Element gestartet wird, werden der Typ des span-Elements und die im span-Element vorhandenen Attribute verwendet, um zu überprüfen, ob eine der Stichprobenüberschreibungen übereinstimmt.

Übereinstimmungen können entweder strict oder regexp sein. Übereinstimmungen bei regulären Ausdrücken werden für den gesamten Attributwert ausgeführt. Wenn Sie also einen Wert abgleichen möchten, der an einer beliebigen Stelle abc enthält, müssen Sie .*abc.* verwenden. Eine Stichprobenüberschreibung kann mehrere Attributkriterien angeben. In diesem Fall müssen alle übereinstimmen, damit die Stichprobenüberschreibung übereinstimmt.

Wenn eine der Stichprobenüberschreibungen übereinstimmt, wird die Stichprobenentnahme in Prozent verwendet, um zu entscheiden, ob vom span-Element eine Stichprobe entnommen werden soll.

Nur die erste übereinstimmende Stichprobenüberschreibung wird verwendet.

Wenn keine Stichprobenüberschreibungen übereinstimmen:

  • Wenn es sich um den ersten Bereich in der Ablaufverfolgung handelt, wird die Konfiguration der obersten Ebene verwendet.
  • Wenn es sich nicht um den ersten Bereich in der Ablaufverfolgung handelt, wird die übergeordnete Stichprobenentscheidung verwendet.

Beispiel: Unterdrücken der Erfassung von Telemetriedaten für Integritätsprüfungen

Mit diesem Beispiel wird die Erfassung von Telemetriedaten für alle Anforderungen an /health-checks unterdrückt.

Zudem wird damit auch die Erfassung von allen nachgelagerten span-Elementen (Abhängigkeiten) unterdrückt, die normalerweise unter /health-checks erfasst werden.

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

Beispiel: Unterdrücken der Erfassung von Telemetriedaten für einen störenden Abhängigkeitsaufruf

Mit diesem Beispiel wird die Erfassung von Telemetriedaten für alle GET my-noisy-key-redis-Aufrufe unterdrückt.

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

Beispiel: 100%iges Erfassen von Telemetriedaten für einen wichtigen Anforderungstyp

Mit diesem Beispiel werden für /login Telemetriedaten zu 100 % erfasst.

Da nachgelagerte Bereiche (Abhängigkeiten) die Sampling-Entscheidung des übergeordneten Bereichs respektieren (sofern keine Sampling-Übersteuerung für diesen nachgelagerten Bereich vorliegt), werden sie auch für alle „/login“-Anfragen gesammelt.

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

Für Sampling verfügbare Span-Attribute

Span-Attributnamen basieren auf den Semantikkonventionen von OpenTelemetry. (HTTP, Messaging, Datenbank, RPC)

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

Hinweis

Um die genaue Menge der von Application Insights Java für Ihre Anwendung erfassten Attribute zu sehen, legen Sie die Selbstdiagnoseebene auf „Debuggen“ fest, und suchen Sie nach Debugmeldungen, die mit dem Text „exporting span“ beginnen.

Hinweis

Nur Attribute, die zu Beginn des span-Attributs festgelegt wurden, stehen für die Stichprobenentnahme zur Verfügung. Daher können Attribute wie http.response.status_code oder Anforderungsdauer, die später erfasst werden, durch die OpenTelemetry Java-Erweiterung gefiltert werden. Hier ist eine Beispielerweiterung, die Spans basierend auf der Anforderungsdauer filtert.

Problembehandlung

Wenn Sie regexp verwenden und die Stichprobenüberschreibung nicht funktioniert, versuchen Sie es mit dem regulären Ausdruck .*. Wenn die Stichprobenentnahme jetzt funktioniert, bedeutet dies, dass ein Problem mit dem ersten regulären Ausdruck vorliegt. Lesen Sie diese Dokumentation zu regulären Ausdrücken.

Wenn es mit .* nicht funktioniert, haben Sie möglicherweise ein Syntaxproblem in Ihrem application-insights.json file. Sehen Sie sich die Application Insights-Protokolle an, und überprüfen Sie, ob Warnmeldungen angezeigt werden.