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) 正規表現と一致する操作を使用するスパンのみをサンプリングします。

構成方法

APMサンプリングを構成するには、次の方法を使用できます:
  • 単一ルール・プロパティ: すべてのトレースに適用可能な1つのルールを定義するための簡単な方法です。
  • 構成ファイル: 分岐ルールや操作優先度ルールを含むサンプリングを定義するための包括的な方法です。

両方の方法が構成されている場合は構成ファイルより単一ルール・プロパティが優先されるため、単一ルール・プロパティの方法が使用されます。

デフォルトのサンプリング構成はありません。単一ルール・プロパティが存在せず、構成ファイルも指定されていない場合、APMエージェントまたはAPMトレーサによって開始されたすべての新しいトレースがサンプリングされます。

単一ルール・プロパティ

単一ルール・プロパティを使用すると、簡単な方法で、1つのサンプリング・ルールを定義してすべてのトレースに適用できます。

次のプロパティが使用可能です:

プロパティ・タイプおよび説明 サポートする機能 プロパティ

AgentConfig.properties

oracle-apm-agent/config/<version>ディレクトリにあるAgentConfig.propertiesファイルを更新します。

APMエージェント
com.oracle.apm.agent.sampling.rule
com.oracle.apm.agent.sampling.param
com.oracle.apm.agent.sampling.rule=limited-rate
com.oracle.apm.agent.sampling.param=1000/60

トレーサ・ビルダー

トレーサ・ビルダーを更新します。

APMトレーサ
com.oracle.apm.agent.sampling.rule
com.oracle.apm.agent.sampling.param
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.rule, "limited-rate")
    .withProperty(com.oracle.apm.agent.sampling.param, "1000/60")
    ...
    .build();

システム・プロパティ

システム・プロパティを更新します。

APMエージェントおよびAPMトレーサ
com.oracle.apm.agent.sampling.rule
com.oracle.apm.agent.sampling.param
java -Dcom.oracle.apm.agent.sampling.rule=limited-rate -Dcom.oracle.apm.agent.sampling.param=1000/60 -javaagent:... <main_class>

環境変数

環境変数を更新します。

APMエージェントおよびAPMトレーサ
com_oracle_apm_agent_sampling_rule
com_oracle_apm_agent_sampling_param
Windowsの場合:
set com_oracle_apm_agent_sampling_rule=limited-rate
set com_oracle_apm_agent_sampling_param=1000/60
Linuxの場合:
export com_oracle_apm_agent_sampling_rule=limited-rate
export com_oracle_apm_agent_sampling_param=1000/60

プロパティの優先順位: 複数のプロパティが設定されている場合、優先順位は高いものから、システム・プロパティ、環境変数、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
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.file, "/home/user/apm/config/Sampling.acml")
    ...
    .build();
システム・プロパティ

システム・プロパティを更新します。

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の場合:

set com_oracle_apm_agent_sampling_file=c:\apm\config\Sampling.acml

Linuxの場合:

export com_oracle_apm_agent_sampling_file=/home/user/apm/config/Sampling.acml

com.oracle.apm.agent.sampling.fileプロパティ値は、サンプリング構成ファイルのフル・パスです。指定する場合、推奨されるサンプリング構成ファイル名はSampling.acmlですが、他の名前を使用することもできます。

次の2つのサンプリング戦略があります:
  • サンプリング: 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/60

pre_sampling_decision構文の詳細は、Sampling.acmlファイル形式を参照してください。

Sampling.acmlファイル・フォーマット

Sampling.acmlファイル・フォーマットを次に示します:

Sampling.acml 説明

sampling_config:

異なるサンプリング構成の配列を表すノード。

|_-

サンプリング構成の配列要素。

|____service:

このサンプリング構成が適用されるサービス名のノード。

|_______- <service-name>

サービス名配列要素。

|____pre_sampling_decision:

(オプション)事前サンプリング決定のノード。

決定は、オーバーライド→強制→無視の順に評価されます。

ソースが複数の決定で定義されている場合、一致するソースを持つ最初の決定が使用されます。親タイプが決定に一致しない場合、APMエージェントはローカル・スパンの親スパン・サンプリング・フラグに従います。

親スパンがない場合、ローカルスパンに対してサンプリング・ルールが評価されます。

すべてのデシジョン・ノードはオプションです。事前サンプリングの決定が必要ない場合は、pre_sampling_decisionを定義しないでください。

|_______override: <source>

指定したソースの親サンプリング・フラグに関係なく、ローカルAPMエージェントのサンプル・スパン。

親スパンがサンプリングされていない場合、新しいトレースがローカル・スパンでルートとして開始されます。

source値については、ソース値を参照してください。

|_______enforce: <source>

指定されたソースの親サンプリング・フラグに関係なく、再評価を強制サンプリングします。

親スパンがサンプリングされず、ローカルAPMエージェント・スパンがサンプリング対象として評価されると、新しいトレースが開始されます。

親スパンがサンプリングされ、ローカルAPMエージェント・スパンがサンプリングされると評価された場合、ローカルAPMエージェント・スパンは親スパンを追跡して続行されます。

source値については、ソース値を参照してください。

|_______ignore: <source>

指定された親のローカルAPMエージェント・スパンのサンプリングを無視します。

source値については、ソース値を参照してください。

|____sampling:

ベース・サンプリングのノード。

operation_priorityノードを使用する場合、これはオプションです。

|_______<rule>

この構成のサンプリング・ルール・ツリー。

|____operation_priority:

ベース・サンプリング・ルールを上書きするルールを持つ操作名の配列。

|_______- name: <operation-name>

トレース・ルート・スパン操作名と突き合せる名前。

|_______<rule>

一致した場合に適用されるルール。

|_______- regex: <operation-name-regex>

トレース・ルート・スパン操作名と突き合せる正規表現。

|_______<rule>

一致した場合に適用されるルール。
  • サービス・ノード(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ファイルの例

  1. すべてのサービスに適用されるルール
    sampling_config:
      -
         sampling:
           # Every trace has 2% chance to be sampled.
           rule: probabilistic
           param: 0.02
  2. 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
  3. 指定した操作のみのサンプリング
    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
  4. その他のサンプル例
    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
new ApmTracer.Builder(...)
    ...
    .withProperty(com.oracle.apm.agent.sampling.enabled, "false")
    ...
    .build();
システム・プロパティ APMエージェントおよびAPMトレーサ com.oracle.apm.agent.sampling.enabled -Dcom.oracle.apm.agent.sampling.enabled=false
環境変数 APMエージェントおよびAPMトレーサ com_oracle_apm_agent_sampling_enabled

Windowsの場合:

set com_oracle_apm_agent_sampling_enabled=false

Linuxの場合:

export com_oracle_apm_agent_sampling_enabled=false

スパン・タグ

サンプリング・ルール・プロパティまたは構成ファイルが指定されており、サンプリングが無効になっていない場合、すべてのサンプリングされたトレース・ルート・スパンには評価フローのタグSamplingEvaluationがあります。

評価に使用されるルール・ツリーの例を次に示します:
rule: per-operation-rate
param: 5/60
false:
     rule: probabilistic
     param: 0.2

SamplingEvaluationタグの値

サンプリングされたルート・スパンのSamplingEvaluationタグの値を次に示します:

SamplingEvaluationタグの値 説明
per-operation-rate(5/60):true 60秒ごとの、サンプリングされた最初の5つのトレース。
per-operation-rate(5/60):false->probabilistic(0.2):true 60秒ごとの、サンプリングされた5つのトレースの後にサンプリングされた20%のトレース。