取樣覆寫 - 適用於 Java 的 Azure 監視器 Application Insights

注意

取樣覆寫功能是從 3.5.0 開始的 GA。

取樣覆寫可讓您覆寫 預設取樣百分比,例如:

  • 將取樣百分比設定為 0(或某些小值),以進行嘈雜的健康情況檢查。
  • 將嘈雜相依性呼叫的取樣百分比設定為0(或一些小值)。
  • 將重要要求類型的取樣百分比設定為100, /login即使您的預設取樣設定為較低的值也一樣。

詞彙

在了解取樣覆寫之前,您應該先瞭解詞彙 範圍。 範圍是一般詞彙:

  • 傳入要求。
  • 傳出相依性 (例如,遠端呼叫另一個服務)。
  • 內含式相依性 (例如,由服務的子元件完成的工作)。

對於取樣覆寫,這些範圍元件很重要:

  • 屬性

span 屬性代表指定要求或相依性的標準和自定義屬性。

開始使用

若要開始,請建立名為 applicationinsights.json 的組態檔。 將其儲存在與 applicationinsights-agent-*.jar 相同的目錄中。 使用下列範本。

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

運作方式

telemetryTypetelemetryKind在 Application Insights 3.4.0 中) 必須是 、dependencytrace (log) 或 exceptionrequest其中一個。

啟動範圍時,範圍的類型和當時存在的屬性會用來檢查是否有任何取樣覆寫相符。

相符項目可以是 strictregexp。 規則運算式比對會針對整個屬性值執行,因此如果您想要比對包含其中任何位置 abc 的值,則需要使用 .*abc.*。 取樣覆寫可以指定多個屬性準則,在此情況下,所有屬性都必須符合取樣覆寫才能比對。

如果其中一個取樣覆寫相符,則會使用其取樣百分比來決定是否取樣範圍。

只會使用符合的第一個取樣覆寫。

如果沒有取樣覆寫符合:

  • 如果是追蹤中的第一個範圍,則會 使用最上層取樣組態
  • 如果不是追蹤中的第一個範圍,則會使用父取樣決策。

範例:隱藏收集健康情況檢查的遙測

此範例會隱藏收集所有對 /health-checks的要求的遙測。

此範例也會抑制收集通常收集在下 /health-checks的任何下游範圍(相依性)。

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

範例:隱藏收集嘈雜相依性呼叫的遙測

此範例會隱藏收集所有 GET my-noisy-key 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
      }
    ]
  }
}

範例:收集重要要求類型的 100% 遙測

此範例會收集的 /login100% 遙測。

由於下游範圍(相依性)遵守父系的取樣決策(沒有該下游範圍的任何取樣覆寫),因此也會收集所有「/登入」要求。

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

可用於取樣的 Span 屬性

Span 屬性名稱是以 OpenTelemetry 語意慣例為基礎。 (HTTP、傳訊、資料庫、RPC)

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

注意

若要查看 Application Insights Java 針對您的應用程式所擷取的確切屬性集,請將自我診斷層級設定 偵錯,並尋找從文字「匯出範圍」開始的偵錯訊息。

注意

只有範圍開頭設定的屬性可用於取樣,因此稍後擷取的屬性, http.response.status_code 例如 或 要求持續時間,可以透過 OpenTelemetry Java延伸模組進行篩選。 以下是根據 要求持續時間篩選範圍的範例延伸模組。

疑難排解

如果您使用 regexp 且取樣覆寫無法運作,請嘗試使用 .* regex。 如果取樣現在正常運作,這表示您有第一個 regex 的問題,並閱讀 此 regex 檔

如果它無法與 搭配使用 .*,則可能在 中 application-insights.json file發生語法問題。 查看 Application Insights 記錄,並查看您是否注意到警告訊息。