APMサンプリングの構成
APMサンプリングは、APM JavaエージェントおよびAPMトレーサのオプション構成で、サンプリング・ルールに基づいてスパンの一部を監視します。
APMサンプリングはルート・スパン・ベースのサンプリング実装であり、サンプリングされたトレースがすべてのトレースの表示を生成できるようにします。サンプリングの決定は、サンプリング・ルールに基づいて行われます。ルート・スパン(トレースと同じ)をサンプリングすることにした場合、ルート・スパンおよびすべての子スパンもサンプリングされます。ルート・スパンがサンプリングされない場合、すべての子スパンはサンプリングされません。
使用可能なルール
APMサンプリングでは、次のルールを使用できます:
| ルール | ルール名 | ルール・パラメータ | サンプル・パラメータ | 説明 | 
|---|---|---|---|---|
| 定数 | constant | 整数 (0以上) | 50 | 指定されたパラメータ値ごとに、常に1回サンプリングします。 たとえば、このパラメータを50に設定した場合、トレース50個ごとに最初の1つがサンプリングされます。このパラメータを0に設定した場合、トレースはサンプリングされません。このパラメータを1に設定した場合、すべてのトレースがサンプリングされます。 | 
| 確率論 | probabilistic | 0から1までの小数 | 0.2 | 指定された確率に基づいてサンプリングします。 たとえば、このパラメータを0.2に設定した場合、20%の確率でトレースがサンプリングされます。 | 
| 制限レート | limited-rate | <limit>/<seconds> | 500/60 | 指定された秒ウィンドウごとに、指定された制限までサンプリングします。 たとえば、このパラメータを500/60に設定した場合、60秒ごとに最初の500トレースがサンプリングされます。 | 
| 1操作当たりの制限レート | per-operation-rate | <limit>/<seconds> | 10/60 | 1つの操作名につき、指定された秒ウィンドウごとに、指定された制限までサンプリングします。 たとえば、このパラメータを10/60に設定した場合、60秒ごとに各操作名の最初の10トレースがサンプリングされます。 | 
| 操作名 | operation | <op1>,<op2>, ...<opN> | /status_order,/status_ship | 指定された操作名のみをサンプリングします。複数の操作はカンマで区切って指定できます。 | 
| 正規表現の操作名 | operation-regex | <regex> | /status_(order|ship) | 正規表現と一致する操作を使用するスパンのみをサンプリングします。 | 
構成方法
- 単一ルール・プロパティ: すべてのトレースに適用可能な1つのルールを定義するための簡単な方法です。
- 構成ファイル: 分岐ルールや操作優先度ルールを含むサンプリングを定義するための包括的な方法です。
両方の方法が構成されている場合は構成ファイルより単一ルール・プロパティが優先されるため、単一ルール・プロパティの方法が使用されます。
デフォルトのサンプリング構成はありません。単一ルール・プロパティが存在せず、構成ファイルも指定されていない場合、APMエージェントまたはAPMトレーサによって開始されたすべての新しいトレースがサンプリングされます。
単一ルール・プロパティ
単一ルール・プロパティを使用すると、簡単な方法で、1つのサンプリング・ルールを定義してすべてのトレースに適用できます。
次のプロパティが使用可能です:
| プロパティ・タイプおよび説明 | サポートする機能 | プロパティ | 例 | 
|---|---|---|---|
| AgentConfig.properties 
 | APMエージェント |  |  | 
| トレーサ・ビルダー トレーサ・ビルダーを更新します。 | APMトレーサ |  |  | 
| システム・プロパティ システム・プロパティを更新します。 | APMエージェントおよびAPMトレーサ |  |  | 
| 環境変数 環境変数を更新します。 | APMエージェントおよびAPMトレーサ |  | Windowsの場合:
                                     Linuxの場合:
                                      | 
プロパティの優先順位: 複数のプロパティが設定されている場合、優先順位は高いものから、システム・プロパティ、環境変数、AgentConfig.propertiesです。
構成ファイル
構成ファイルを使用すると、すべてのサービスのすべてのサンプリング機能を、次のような特性を持つ単一のファイル内に指定できます:
- 構成ファイルはACML (YAMLのサブセット)フォーマットで、Sampling.acmlで指定されます。
- 異なるサービスに対する複数のサンプリング構成を単一の構成ファイルに定義して、そこから共有できます。
- サンプリング・ルールは1つに制限されていません。サンプル・ルールを他のルールに分岐させて、ルール・ツリーを作成できます。各ルール評価には、trueとfalseの2つの結果があります。trueの場合はトレースがサンプリングされ、falseの場合はサンプリングされません。分岐されたルールでは、終端リーフの結果がサンプリングの決定に使用されます。
- 特定の名前を持つルールは、それ自身のサンプリング・ルールによって優先順位付けできます。
APMトレーサの場合、デフォルトの構成場所はありません。サンプリング構成ファイルは、トレーサ・プロパティ、システム・プロパティまたは環境変数で、com.oracle.apm.agent.sampling.fileプロパティを使用して指定する必要があります。プロパティ値は、サンプリング構成ファイルのフル・パスです。
                  
com.oracle.apm.agent.sampling.fileプロパティは、APMトレーサにのみ適用されます。APMエージェントの場合、このプロパティは不要です。Sampling.acmlサンプリング・ファイルをoracle-apm-agent/config/<version>ディレクトリに配置するだけです。
                  
| プロパティ・タイプおよび説明 | サポートする機能 | プロパティ | 例 | 
|---|---|---|---|
| トレーサ・ビルダー トレーサ・ビルダーを更新します。 | APMトレーサ | com.oracle.apm.agent.sampling.file |  | 
| システム・プロパティ システム・プロパティを更新します。 | APMエージェントおよびAPMトレーサ | com.oracle.apm.agent.sampling.file | -Dcom.oracle.apm.agent.sampling.file=/home/user/apm/config/Sampling.acml | 
| 環境変数 環境変数を更新します。 | APMエージェントおよびAPMトレーサ | com_oracle_apm_agent_sampling_file | Windowsの場合: 
 Linuxの場合: 
 | 
com.oracle.apm.agent.sampling.fileプロパティ値は、サンプリング構成ファイルのフル・パスです。指定する場合、推奨されるサンプリング構成ファイル名はSampling.acmlですが、他の名前を使用することもできます。
                  
- サンプリング: samplingエントリを使用し、トレース評価用のルール・ツリーを定義します。
- 操作優先度: operation_priorityエントリを使用します。これを定義すると、定義した名前とトレース・ルート・スパン操作名が一致した場合にサンプリングが上書きされます。定義された各操作名は、それぞれ独自の決定ルール・ツリーを持ちます。
サンプリング前決定
事前サンプリング決定は、サンプリング・ルールを適用する前に、サンプラが親スパンに基づいて決定を行うことができるサンプリング機能です。
例:
sampling_config:
    -
        service:
            -   s1
            -   s2
        pre_sampling_decision:
            ignore: rum
        sampling:
            rule: constant
            param: 1000
            true:
                rule: per-operation-rate
                param: 1000/60pre_sampling_decision構文の詳細は、Sampling.acmlファイル形式を参照してください。
                  
Sampling.acmlファイル・フォーマット
Sampling.acmlファイル・フォーマットを次に示します:
                  
| Sampling.acml | 説明 | 
|---|---|
| 
 | 異なるサンプリング構成の配列を表すノード。 | 
| |_ | サンプリング構成の配列要素。 | 
| |____ | このサンプリング構成が適用されるサービス名のノード。 | 
| |_______ | サービス名配列要素。 | 
| |____ | (オプション)事前サンプリング決定のノード。 決定は、オーバーライド→強制→無視の順に評価されます。 ソースが複数の決定で定義されている場合、一致するソースを持つ最初の決定が使用されます。親タイプが決定に一致しない場合、APMエージェントはローカル・スパンの親スパン・サンプリング・フラグに従います。 親スパンがない場合、ローカルスパンに対してサンプリング・ルールが評価されます。 すべてのデシジョン・ノードはオプションです。事前サンプリングの決定が必要ない場合は、 | 
| |_______ | 指定したソースの親サンプリング・フラグに関係なく、ローカルAPMエージェントのサンプル・スパン。 親スパンがサンプリングされていない場合、新しいトレースがローカル・スパンでルートとして開始されます。 
 | 
| |_______ | 指定されたソースの親サンプリング・フラグに関係なく、再評価を強制サンプリングします。 親スパンがサンプリングされず、ローカルAPMエージェント・スパンがサンプリング対象として評価されると、新しいトレースが開始されます。 親スパンがサンプリングされ、ローカルAPMエージェント・スパンがサンプリングされると評価された場合、ローカルAPMエージェント・スパンは親スパンを追跡して続行されます。 
 | 
| |_______ | 指定された親のローカルAPMエージェント・スパンのサンプリングを無視します。 
 | 
| |____ | ベース・サンプリングのノード。 
 | 
| |_______ | この構成のサンプリング・ルール・ツリー。 | 
| |____ | ベース・サンプリング・ルールを上書きするルールを持つ操作名の配列。 | 
| |_______ | トレース・ルート・スパン操作名と突き合せる名前。 | 
| |_______ | 一致した場合に適用されるルール。 | 
| |_______ | トレース・ルート・スパン操作名と突き合せる正規表現。 | 
| |_______ | 一致した場合に適用されるルール。 | 
- 
サービス・ノード( service:)が指定されていない場合、サンプリング構成は、専用のサンプリング構成なしですべてのサービスに適用されます。複数の構成が同じサービス名を持つ場合、そのサービス名を持つ最後の構成のみが使用されます。1つのファイルに、このサービス・ノードを使用する構成と使用しない構成がある場合、APMエージェントまたはAPMトレーサ・サービス名に一致するサービス名を持つ構成が優先されます。 
- 
sampling ( sampling:)ノードとoperation_priority (operation_priority:)ノードの両方が指定されている場合、operation_priorityが優先されます。トレース・ルート・スパン名がoperation_priorityノードの操作名と一致した場合、その操作名に関連付けられたルールを使用して評価されます。トレース・ルート・スパン名がoperation_priorityノードの操作名と一致しなかった場合は、サンプリング・ノードが評価されます。
- 
If sampling node ( sampling:) is not specified, or no rule is specified, then the trace is not sampled when no operation_priority rule is applicable.
- 
operation_priorityノード( operation_priority:)が指定されている場合、トレース・ルート・スパンの操作名がいずれかのoperation_priority操作名と一致すると、ベース・サンプリング・ルールではなく一致名のルールが評価に使用されます。
ルール・ノード
Sampling.acmlファイルのルール・ノードのフォーマットは次のとおりです:
                  
| <rule> node | 説明 | 
|---|---|
| rule: <rule_name> | サンプリング・ルールの名前。 | 
| param: <rule_parameter> | ルールのパラメータ。 | 
| true: | ルール評価のtrue結果。値は別の<rule>にすることも、空にすることもできます。 このノードが指定されていないか、ノード値が空の場合、true評価が最終的なサンプリング評価結果ともなり、トレースはサンプリングされます。 | 
| |___<rule> | true評価のブランチ<rule>ノード。 | 
| false: | ルール評価のfalse結果。値は別の<rule>にすることも、空にすることもできます。 このノードが指定されていないか、ノード値が空の場合、false評価が最終的な評価結果ともなり、トレースはサンプリングされません。 | 
| |___<rule> | false評価のブランチ<rule>ノード。 | 
Sampling.acmlサンプリング構成ファイルを変更した場合にAPMエージェントを再起動する必要はありません。
                        
ソース値
pre_sampling_decisionを使用する場合、ソース情報を指定するオプションがあります。
                  
Sampling.acmlファイルの<source>値は空にするか、複数のソースを含めることができます。サポートされている値については、次の表を参照してください。
                  
| ソース名 | 説明 | 
|---|---|
| 午後 | APMエージェント・ソース。 | 
| 噂 | RUM (Real User Monitoring)ソース。 これはAPMエージェントのスパンではなく、常にJavaエージェントの親スパンです。 | 
| 合成 | 合成ソース。 デフォルトでは、すべての合成リクエストがサンプリングされます。 | 
| * | 任意のソース。 | 
| ? | <source>にソース・タイプが定義されていません。 | 
| null | 識別可能なソースのない親。 | 
Sampling.acmlファイルの例
- すべてのサービスに適用されるルールsampling_config: - sampling: # Every trace has 2% chance to be sampled. rule: probabilistic param: 0.02
-  probabilistic (最小件数あり)sampling_config: - sampling: # For every 60 seconds duration, 5 root spans of each operation name are sampled, # followed by 10% chance of sampling. rule: per-operation-rate param: 5/60 true: false: rule: probabilistic param: 0.1
- 指定した操作のみのサンプリングsampling_config: - service: - order_dept - shipping_dept operation_priority: # For /order operation trace root span, 1 of every 10 traces is sampled. - name: "/order" rule: constant param: 10 # For /ship operation trace root span, 1 of every 50 traces is sampled. - name: "/ship" rule: constant param: 50 # For /status_order or /status_ship operations, there is a 50% sampling chance. - regex: "/status_(order|ship)" rule: probabilistic param: 0.5
- その他のサンプル例sampling_config: - # With service node, this config is only applied to service s1 and s2. service: - s1 - s2 sampling: # 5 root span of any operation name are sampled every 60 seconds. Starting from # the 6th span of an operation name, there is a 20% chance the span is sampled. rule: per-operation-rate param: 5/60 false: rule: probabilistic param: 0.2 operation_priority: # For /order operation, 1 of every 10 spans is sampled. - name: "/order" rule: constant param: 10 # For /ship operation, first 3 are sampled per 60 seconds and then 10% chance after - name: "/ship" rule: limited-rate param: 3/60 false: rule: probabilistic param: 0.01 - # With service node, this config is only applied to service s3 and s4. service: - s3 - s4 sampling: # There is a 5% chance any trace is sampled. rule: probabilistic param: 0.05 - # Without service node, this config is applied to any service except s1, s2, s3 and s4. sampling: # There is a 10% chance any trace is sampled. rule: probabilistic param: 0.1
サンプリングの無効化
単一ルール・プロパティまたは構成ファイルのどちらかが指定されている場合、サンプリングは暗黙的に有効になります。その後、次のプロパティを使用して明示的に無効にできます:
| プロパティ・タイプ | サポートする機能 | プロパティ | 例 | 
|---|---|---|---|
| AgentConfig.properties | APMエージェント | com.oracle.apm.agent.sampling.enabled | com.oracle.apm.agent.sampling.enabled=false | 
| トレーサ・ビルダー | APMトレーサ | com.oracle.apm.agent.sampling.enabled |  | 
| システム・プロパティ | APMエージェントおよびAPMトレーサ | com.oracle.apm.agent.sampling.enabled | -Dcom.oracle.apm.agent.sampling.enabled=false | 
| 環境変数 | APMエージェントおよびAPMトレーサ | com_oracle_apm_agent_sampling_enabled | Windowsの場合: 
 Linuxの場合: 
 | 
スパン・タグ
サンプリング・ルール・プロパティまたは構成ファイルが指定されており、サンプリングが無効になっていない場合、すべてのサンプリングされたトレース・ルート・スパンには評価フローのタグSamplingEvaluationがあります。
                  
rule: per-operation-rate
param: 5/60
false:
     rule: probabilistic
     param: 0.2SamplingEvaluationタグの値
サンプリングされたルート・スパンのSamplingEvaluationタグの値を次に示します:
                  
| SamplingEvaluationタグの値 | 説明 | 
|---|---|
| per-operation-rate(5/60):true | 60秒ごとの、サンプリングされた最初の5つのトレース。 | 
| per-operation-rate(5/60):false->probabilistic(0.2):true | 60秒ごとの、サンプリングされた5つのトレースの後にサンプリングされた20%のトレース。 |