取樣覆寫 - 適用於 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
}
]
}
}
運作方式
telemetryType
(telemetryKind
在 Application Insights 3.4.0 中) 必須是 、dependency
、 trace
(log) 或 exception
的request
其中一個。
啟動範圍時,範圍的類型和當時存在的屬性會用來檢查是否有任何取樣覆寫相符。
相符項目可以是 strict
或 regexp
。 規則運算式比對會針對整個屬性值執行,因此如果您想要比對包含其中任何位置 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% 遙測
此範例會收集的 /login
100% 遙測。
由於下游範圍(相依性)遵守父系的取樣決策(沒有該下游範圍的任何取樣覆寫),因此也會收集所有「/登入」要求。
{
"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 記錄,並查看您是否注意到警告訊息。