サンプリング オーバーライド (プレビュー) - Azure Monitor Application Insights for Java
Note
サンプリング オーバーライド機能は、3.0.3 からプレビュー段階になっています。
サンプリング オーバーライドを使用すると、既定のサンプリング率をオーバーライドできます。次に例を示します。
- ノイズの多い正常性チェックでは、サンプリング率を 0 (または何らかの小さい値) に設定します。
- ノイズの多い依存関係呼び出しでは、サンプリング率を 0 (または何らかの小さい値) に設定します。
- 重要な要求の種類 (
/login
など) では、既定のサンプリングが低く構成されている場合でも、サンプリング率を 100 に設定します。
用語
サンプリング オーバーライドについて学習する前に、"スパン" という用語を理解しておく必要があります。 スパンは、次を表す一般的な用語です。
- 着信要求。
- 送信依存関係 (別のサービスへのリモート呼び出しなど)。
- プロセス内の依存関係 (サービスのサブコンポーネントによって実行される操作など)。
サンプリング オーバーライドに関しては、次のスパンのコンポーネントが重要です。
- 属性
スパン属性は、指定された要求または依存関係の標準とカスタムの両方のプロパティを表します。
作業の開始
開始するには、applicationinsights.json という名前の構成ファイルを作成します。 これを、applicationinsights-agent-*.jar と同じディレクトリに保存します。 次に示すテンプレートを使用します。
{
"connectionString": "...",
"sampling": {
"percentage": 10
},
"preview": {
"sampling": {
"overrides": [
{
"telemetryType": "request",
"attributes": [
...
],
"percentage": 0
},
{
"telemetryType": "request",
"attributes": [
...
],
"percentage": 100
}
]
}
}
}
しくみ
telemetryType
は request
、dependency
、trace
(ログ)、または exception
にする必要があります。
スパンが開始されると、いずれかのサンプリング オーバーライドが一致するかどうかを確認するために、その時点で存在するスパンと属性が使用されます。
一致は strict
か regexp
です。 正規表現の一致は、属性値全体に対して実行されます。そのため、その中のどこかに abc
が含まれる値に一致することが望まれる場合、.*abc.*
を使用する必要があります。
1 つのサンプリング オーバーライドに複数の属性条件を指定できます。その場合、そのすべてが一致対象のサンプリング オーバーライドに一致している必要があります。
いずれかのサンプリング オーバーライドが一致する場合は、そのサンプリング率を使用してスパンをサンプリングするかどうかを決定します。
一致する最初のサンプリング オーバーライドのみが使用されます。
サンプリング オーバーライドが一致しない場合:
- これがトレースの最初のスパンである場合は、最上位のサンプリング構成が使用されます。
- これがトレースの最初のスパンでない場合は、親のサンプリングの決定が使用されます。
例: 正常性チェックのテレメトリの収集の抑制
これにより、/health-checks
へのすべての要求に対するテレメトリの収集が抑制されます。
これにより、通常は /health-checks
で収集されるダウンストリームのスパン (依存関係) の収集も抑制されます。
{
"connectionString": "...",
"preview": {
"sampling": {
"overrides": [
{
"telemetryType": "request",
"attributes": [
{
"key": "http.url",
"value": "https?://[^/]+/health-check",
"matchType": "regexp"
}
],
"percentage": 0
}
]
}
}
}
例: ノイズの多い依存関係呼び出しのテレメトリの収集の抑制
これにより、GET my-noisy-key
へのすべての redis 呼び出しに対するテレメトリの収集が抑制されます。
{
"connectionString": "...",
"preview": {
"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% 収集されます。
ダウンストリームのスパン (依存関係) は親のサンプリング決定を尊重するため (ダウンストリームのスパンのサンプリング オーバーライドは存在しません)、すべての '/login' 要求に対するものも収集されます。
{
"connectionString": "...",
"sampling": {
"percentage": 10
},
"preview": {
"sampling": {
"overrides": [
{
"telemetryType": "request",
"attributes": [
{
"key": "http.url",
"value": "https?://[^/]+/login",
"matchType": "regexp"
}
],
"percentage": 100
}
]
}
}
}
サンプリングに使用できるスパン属性
スパンの属性名は、OpenTelemetry のセマンティック規約に基づいています。
アプリケーションの Application Insights Java によってキャプチャされた属性の正確なセットを確認するには、自己診断レベルを debug に設定し、テキスト "exporting span" で始まるデバッグ メッセージを探します。
サンプリングに使用できるのはスパンの開始時に設定された属性のみであり、http.status_code
のように後からキャプチャした属性はサンプリングに使用できないことに注意してください。