プローブ設定の変更

デフォルトのプローブ設定を変更または無効化したり、追加のクラスをモニターするためのカスタム・プローブを有効にすることができます。

デフォルトのプローブ設定の変更または無効化

ProbeConfig.acmlファイルを使用して、デフォルトのプローブ設定を変更または無効化できます。

APM Javaエージェントをプロビジョニングすると、oracle-apm-agent/configディレクトリ内でProbeConfig.acmlファイルが使用可能になります。ProbeConfig.acmlファイルへのアクセス方法の詳細は、APM Javaエージェントのプロビジョニングに関する項を参照してください。

ProbeConfig.acmlファイルを使用すると、次の操作を実行できます。

  • 特定のプローブを有効または無効にします。
  • URL、ファイル拡張子などの情報に基づいてトレース/スパンの特定のパターンのモニタリングを無効にします。
  • 追加タグ/ディメンションの取得を有効にします。たとえば、SERVLETプローブの特定のヘッダーとパラメータを取得します。
  • スパン名を操作します。たとえば、SERVLETまたはHTTP_CLIENTプローブのURLを操作します。
  • スパン・ログとして1,000文字を超える長さのDB SQL問合せ文を取得します。

    jdbcスパン・ログのSQL問合せ文全体のロギングを有効または無効にするには、enable_complete_sql_span_log_jdbcパラメータを使用します。この機能は、長いSQL問合せを1,000文字で切り捨てる場合に役立ちます。たとえば、enable_complete_sql_span_log_jdbc: trueを使用して有効にします。

  • ログインしたユーザー名を取得します。

    ハッシュ・ユーザー名は、個人識別可能情報(PII)を公開せずに、一意のユーザー数に関するレポートを許可する目的で、認証済セッションに対して取得されます。ただし、ユーザー名をプレーン・テキスト形式でレポートする必要がある場合があります。その場合は、一般セクションに移動し、track_plain_username: trueを設定します。

  • ペイロードを取得します。

    ペイロードには、HTTPリクエストとレスポンスの両方のコンテンツが含まれます。

    ペイロードを有効にすることで、アプリケーション・リクエストの完全なフローを追跡し、収集されたデータを分析のためにトレース・エクスプローラに送信できます。

    ペイロード取得のサポートには、サーブレット、JAX-RSサーバー、OSBプロキシ・サービスおよびOSBビジネス・サービスが含まれます。

    APM Javaエージェント・バージョン1.16以降、Apache Httpクライアント(4.xおよび5.x)、JDK 11+ Httpクライアント、OCI SDK Httpクライアント(2.xおよび3.x)、Spring Webクライアント5.xおよびOkHttpクライアント2.xおよび3.xもサポートされています。

    ペイロードの有効化: HTTPリクエストおよびレスポンスのペイロードを有効にするには、ProbeConfig.acmlファイルでパラメータcapture_request_payloadおよびcapture_response_payloadを設定します。

    • ペイロードのサブセットを取得するには、操作名に基づいてxpath/jsonpath/regex式を適用できます。
    • 有効にすると、取得されたペイロードは、それぞれRequestPayloadおよびResponsePayloadというディメンションとして使用できるようになります。デフォルトの最大長は1000文字です。
    • 同じペイロードの複数のディメンションを取得するには、式とともにtag_nameを指定します。
  • HttpClient非同期コールのモデリングを変更します。

    APM Javaエージェント・バージョン1.16以降、単一のスパンがアウトバウンド・リクエスト、待機時間およびコールバックを表します。

    以前のエージェント・バージョン(アウトバウンド・コールに1つ、コールバックに2つ)からの以前の動作を維持するには、ProbeConfig.acmlファイルのHTTP_CLIENTセクションにあるhttpclient_async_one_spanパラメータを変更し、falseに設定します。
    #Enables capturing async client invocations as a single span. No separate callback spans will be reported
    httpclient_async_one_span: false

デフォルトのプローブ設定の動作は、APM JavaエージェントのProbeConfig.acmlファイルを使用して更新できます。

デフォルトのプローブ設定を変更するには、ProbeConfig.acmlファイルにある指示に従います。

ProbeConfig.acmlファイルへの変更は、アプリケーション・サーバーの実行中に行うことができます。変更を有効にするためにアプリケーション・サーバーを再起動する必要はありません。

ノート

APM Javaエージェント・バージョン1.12以降では、サーブレット、HttpClientおよびOSBプローブのネーミング規則が改善され、簡略化されています。したがって、Hex IDおよび番号を削除するためのreplace_all_patternsルールは、デフォルトでProbeConfig.acmlファイルに含まれなくなりました。これは、SERVLET、HTTP_CLIENTおよびOSBセクションに適用されます。

特定のシナリオで引き続き必要な場合は、APM Javaエージェントのアップグレード後に、ファイルに次の内容を追加します。
# Hex ID and numbers
-
      pattern: "([a-fA-F\._\:-]*[0-9]+){2,}[a-fA-F_\:-]*([/\.])?"
      replacement: "*$2"

カスタム・プローブの構成

追加のクラスをモニターし、アプリケーション固有の詳細を取得するように、カスタム・プローブを構成できます。

ProbeConfig.acmlファイル内で使用可能な組込みのプローブ・セットがモニタリングの要件を満たしていない場合は、カスタム・プローブが便利です。たとえば、デフォルトのプローブを使用してモニターされていないバックグラウンド・スレッドをモニターする必要がある場合は、それをモニターするようにカスタム・プローブを構成できます。

カスタムプローブを構成するには、次の手順を実行します。

  1. DirectivesConfig.acmlファイルを構成して、モニターするclassesmethodsまたはannotationsを指定します。詳細は、DirectivesConfig.acmlファイルの構成を参照してください。
  2. DirectivesConfig.acmlファイルをoracle-apm-agent/configディレクトリに追加します。
    アプリケーション・サーバーの起動スクリプトで次を使用してDirectivesConfig.acmlファイルを指定することは非推奨になりました。
    -Dcom.oracle.apm.agent.customDirectivesFile=<Path_to_DirectivesConfig.acml_file>
    この方法でDirectivesConfig.acmlファイルを以前に指定している場合は、アプリケーションの起動スクリプトから前述の引数を削除します。
  3. 新しいDirectivesConfig.acmlファイルが指定されている場合は、アプリケーション・サーバーを再起動します。

    DirectivesConfig.acmlファイルの変更は、アプリケーション・サーバーの再起動後に有効になります。

    新しいDirectivesConfig.acmlファイルを指定するかファイルを削除する場合は、アプリケーション・サーバーの再起動が必要です。

    次のいずれかを実行する場合、アプリケーションサーバーの再起動は必要ありません。
    • span_nameを編集します。
    • すでに有効になっている既存のDirectivesConfig.acmlファイルで、tagslogsまたは拡張変数を追加、編集または削除します。
    アプリケーション・サーバーの再起動は、DirectivesConfig.acmlパラメータの下の表から他のパラメータを変更する場合に必要です。

DirectivesConfig.acmlファイル構成

DirectivesConfig.acmlファイルを構成するには、次を確認します。

DirectivesConfig.acmlパラメータ

ここでは、DirectivesConfig.acmlファイルで指定できるパラメータについて説明します。

DirectivesConfig.acmlファイルに次のパラメータMUSTの少なくとも1つを指定する必要があります:

  • class_name
  • class_name_regex
  • class_annotation
  • method_annotation
  • class_annotation_regex
  • method_annotation_regex
パラメータ 説明
label

ディレクティブの一意のラベル。これは必須パラメータです。

Test:
  ...
Test2:
  ...
Test3:
  ...
class_name

モニターするクラスの名前。パッケージを含む完全なクラス名を指定する必要があります。

Test:  
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
class_name_regex

一致するクラスをモニターするための正規表現(regex)パターン。

正規表現パターンでは、パッケージに"."ではなく"/"を使用します。たとえば、a.b.c.d.ClassNameというクラスをモニターする場合、正規表現パターンはa/b/c/d/ClassNameに一致する必要があります。

class_name_regexclass_nameの両方が指定されている場合、class_nameは無視されます。

Test:
  # Monitor all classes under the com.oracle.apm.test package
  class_name_regex: "com/oracle/apm/test/.*"
method_name

モニターするメソッドの名前。これにはメソッド・パラメータは含まれません。

method_nameが指定されていない場合、すべてのメソッドがモニターされます。

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name "performHttpURLConnectionCall"
method_name_regex

一致するメソッドをモニターするための正規表現パターン。

method_name_regexが指定されていない場合、すべてのメソッドがモニターされます。

method_name_regexmethod_nameの両方が指定されている場合、method_nameは無視されます。

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  # Monitor all methods that start with "perform"
  method_name_regex: "perform.*"
class_annotation

モニターする注釈の完全なクラス名。指定された注釈を持つclassはすべてモニターされます。

Test:
  class_annotation: "javax.jws.WebService"
method_annotation

モニターする注釈の完全なクラス名。指定された注釈を持つmethodはすべてモニターされます。

Test:
  method_annotation: "javax.jws.WebMethod"
class_annotation_regex

一致するクラス注釈をモニターするための正規表現パターン。

正規表現パターンでは、パッケージに"."ではなく"/"を使用します。また、値は"L"で始まり、";"で終わる必要があります。たとえば、a.b.c.d.Annotationという注釈をモニターする場合、正規表現パターンはLa/b/c/d/Annotation;に一致する必要があります。

class_annotation_regexclass_annotationの両方が指定されている場合、class_annotationは無視されます。

Test:
  # Monitor all Path annotations in javax
  class_annotation_regex: "Ljavax/.*/Path;"
Test2:
  # Monitor all annotations that end with "Path"
  # The L in the beginning is not required since .* includes it
  class_annotation_regex: ".*/Path;"
Test3:
  # Monitor all annotations with the javax.jws package
  # The ; at the end is not required since .* includes it
  class_annotation_regex: "Ljavax/jws/.*"
method_annotation_regex

一致するメソッド注釈をモニターするための正規表現パターン。

正規表現パターンでは、パッケージに"."ではなく"/"を使用します。また、値は"L"で始まり、";"で終わる必要があります。たとえば、a.b.c.d.Annotationという注釈をモニターする場合、正規表現パターンはLa/b/c/d/Annotation;に一致する必要があります。

method_annotation_regexmethod_annotationの両方が指定されている場合、method_annotationは無視されます。

Test:
  # Monitor all Path annotations in javax
  method_annotation_regex: "Ljavax/.*/Path;"
Test2:
  # Monitor all annotations that end with "Path"
  # The L in the beginning is not required since .* includes it
  method_annotation_regex: ".*/Path;"
Test3:
  # Monitor all annotations with the javax.jws package
  # The ; at the end is not required since .* includes it
  method_annotation_regex: "Ljavax/jws/.*"
include_sub_classes

ターゲット・クラスのサブクラスをモニターする必要があるかどうかを指定します。デフォルトでは、これはfalseに設定されています。

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name "performHttpURLConnectionCall"
  include_sub_classes: true
span_name

モニタリング中に作成されるスパンの名前。span_nameが指定されていない場合、デフォルトで"${class_name}.${method_name}"が使用されます。

対応する例のTestラベルの下に示されているように、スパンの名前を指定できます。モニターされるターゲットが呼び出されるたびに、これが使用されます。

span_nameパラメータを指定する場合、変数${variable_name}および拡張変数を使用して、監視しているパラメータに関する追加情報を取得し、スパンの名前で表示することもできます。対応する例では、Test2ラベルの下のparam#変数が、モニターしているメソッドに対応するパラメータを示しています。

Test:
  ...
  # The same name will be used every time the target class/method is invoked
  span_name: "SpecialName"
Test2:
  ...
  # Use the toString result of the first parameter passed to the monitored method
  span_name: "${param1}"
tags

スパンに含めるタグ(名前と値)。

span_nameパラメータの場合と同様に、tagsの値を指定するときに変数を使用して、モニターしているパラメータに関する追加情報を取得して表示できます。

指定したtagsは、トレース・エクスプローラ・ユーザー・インタフェースに「ディメンション」として表示されます。

タグ値の場合、オプションのタイプを指定できます。適切な構文およびキーワードを使用して、タイプString、Boolean、Integer、Long、FloatまたはDoubleのタグ値を指定できます(例を参照)。デフォルトのタグ値タイプは文字列です。タイプまたは互換性のないタイプが指定されている場合に使用されます。タグ値に互換性のない型が指定されている場合、その型はデフォルトのStringに戻され、非互換性に関するログ・メッセージが表示されます。スパン・ディメンション値は、トレース・エクスプローラで数値(該当する場合)を利用する集計を使用して問合せによって確認できます。

Test:
  ...
  tags:
    importantInfo: "${param1}"
    consistentTag: "AlwaysTheSame"
    returnValue: "${return}"
    #The below tag will have value of default type String since no type was specified
    defaultTagType: "${param1}"
    #The below tag will have value of type Integer
    integerTag: "${param1} | integer"
    #The below tag will have value of type String, because the actual value type String, and the specified type Double are incompatible. Therefore it will default to String.
    booleanTag: "${param2} | double"
logs

スパンに含めるログ(名前と値)。

span_nameおよびtagsパラメータの場合と同様に、logsパラメータの値を指定するときに変数を使用して、モニターしているパラメータに関する追加情報を取得して表示することもできます。

指定したlogsは、トレース・エクスプローラ・ユーザー・インタフェースに「スパン・ログ」として表示されます。

Test:
  ...
  logs:
    importantInfoLog: "${param1}"
    consistentLog: "AlwaysTheSame"
    returnValueLog: "${return}"
  ...

span_name、タグおよびログ変数

span_nametagsおよびlogsパラメータを指定するときに、追加情報を取得するために次の変数を使用できます:

  • class_name: モニターされているクラスの名前(パッケージを含む)。
  • short_class_name: モニターされているクラスの名前(パッケージを含まない)。
  • method_name: モニターされているメソッドの名前。
  • method_descriptor: モニターされているメソッドのシグネチャの記述子フォーマット。
  • param#: モニターされているメソッドのパラメータ。param1は最初のパラメータ、param2は2番目のパラメータ、などを示します。
  • this: モニターされているオブジェクト。モニターされているmethodstaticの場合、this変数は使用できなくなります。
  • return: モニターされているメソッドの戻り値。
    ノート

    return変数はtagsパラメータにのみ使用できます。span_nameには使用できません。

DirectivesConfig.acmlの例

DirectivesConfig.acmlファイルの例を次に示します:

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name: "performHttpURLConnectionCall"
  include_sub_classes: true
  span_name: "${short_class_name}.${method_name}"
  tags:
    targetURL: "${param2}"
    port: "${param1}"

前述の例に基づく:

  • com.oracle.apm.samples.servlet.OutboundTestServlet.performHttpURLConnectionCallは、そのサブクラスとともにモニターされます。
  • トレース・エクスプローラに表示されるスパンの名前は、OutboundTestServlet.performHttpURLConnectionCallになります。
  • targetURLタグとportタグがスパンに追加され、performHttpURLConnectionCallメソッドの最初のパラメータと2番目のパラメータの値が使用されます。

次のスクリーンショットは、カスタム・プローブ・ページの例です:

カスタム・プローブの例のスクリーンショット1

カスタム・プローブの例のスクリーンショット2

カスタムプローブの詳細変数

カスタム・プローブを使用する場合、メソッド・チェーンおよび正規表現を介した文字列操作を使用して変数を動的に構築するように、拡張コマンド構文を構成できます。これらの拡張変数は、前述のその他の変数と同様に、span_nametagsおよびlogsセクションで参照できます。

拡張変数を使用するための一般的なワークフロー
  1. カスタムプローブの構成方法を確認します。Configure a Custom Probeを参照してください。
  2. コマンド・チェーン構文を確認します。コマンド・チェーンの構文を参照してください。
  3. 例を確認します。拡張変数の例を参照してください。

コマンド・チェーン構文

コマンド・チェーンは、次の3つの部分で構成されます。

パイプ記号「|」は、開始オブジェクトを最初のチェーンコマンドにパイプし、1つのチェーンコマンドの出力オブジェクトを次のチェーンコマンドにパイプさせるために使用されます。

実行時間

コマンドチェーンは、Custom Probeのモニター対象メソッドを呼び出す前またはあとに実行されます。これは、SOIの前に表示される実行時間で指定されます。

<execution time> ::= [before || after]

すべてのコマンド・チェーンが両方の実行時間と互換性があるわけではありません。returnがSOIとして使用される場合、またはメソッド・コマンドのパラメータとして使用される場合、後の実行時間を使用する必要があります。これは、監視対象メソッドが呼び出された後にのみ戻りオブジェクトが使用可能であるためです。メソッド・コマンドで他の変数がSOIまたはパラメータとして使用される場合、実行時間は参照されたチェーンに依存します。

たとえば、chain1およびchain2を定義します。chain2では、メソッド・コマンドのSOIまたはパラメータとしてchain1を使用します。両方のチェーンで同じ実行時間が使用されている場合は、chain2の前にchain1を定義する必要があります。そうでない場合は、chain1の実行時間が前に必要であり、chain2の実行時間が後になる必要があります。

SOIおよびメソッド・コマンドの使用方法の詳細は、次の「オブジェクト識別子の開始」を参照してください。

開始オブジェクト識別子

開始オブジェクト識別子(SOI)は、次のオブジェクトに関連付けることができます。

  • 定義済のキーワード: thisreturnおよびparam#

  • キーで識別されるチェーンの出力。

実行時間は、SOI構文と組み合せることができます。

支給明細 説明 可能な実行時間 構文
ThisSOI チェーンは、DirectivesConfig.acmlファイルのclass_nameで指定されたオブジェクトで実行されます。 beforeまたはafter <this SOI> ::= [before || after] this thisSOIchain: before this | method (public getAddress ())
ParamSOI チェーンは、DirectivesConfig.acmlファイルのparam#で指定されたオブジェクトで実行されます。

これらは、モニターされるメソッドのパラメータです。

before or after <param_SOI> ::= [before || after] param# paramSOIchain: before param1 | method (public getAddress ())

param1は、最初のパラメータを示します。

ReturnSOI チェーンは、DirectivesConfig.acmlファイルのreturnで指定されたオブジェクトで実行されます。

これは、監視されているメソッドの戻り値です。

after <return_SOI> ::= [after] return returnSOIchain: after return | method (public getAddress ())
StaticSOI チェーンはどのオブジェクトでも開始されません。 before or after <static SOI> ::= [before || after] static staticSOIchain: before static | static method((com.test.beans.Employee)(public getLevel()))
VariableSOI チェーンは、DirectivesConfig.acmlファイルで定義された前述の変数のいずれかで指定されたオブジェクトで実行されます。 before or after <variable_SOI> ::= [before || after] variable-key var1: this | method (public setNewAddress (string "Variable Street", string "Redwood City", string "California", int 94065, string "US"))

var1UsedAsStartObject: after var1 | method (public getAddress ()) | field(private street)

チェーン・コマンド順序

チェーン・コマンド・シーケンスは、1つ以上のチェーン・コマンドで構成されます。

構文: <chain_command_sequence> ::= <chain_command> || <chain_command> | <chain_command_sequence>

チェーン・コマンド・タイプ

構文: <chain_command> ::= <method_command> || <field_command> || <regex_command>

メソッド・コマンド

メソッド・コマンドを使用して、メソッドを起動します。メソッド・コマンドの出力は、その特定のメソッドの戻りオブジェクトです。

メソッド・コマンドは、メソッド可視性、メソッド名およびパラメータ順序で構成されます。これはメソッド・シグネチャを模倣します。

構文は次のようになります。

<method_command> ::= method(<visibility> <java_identifier> (<parameter_sequence>))

<visibility> ::= private || public || protected || package

package値は、パッケージ専用(修飾子なし)表示方法またはフィールドを指定するために使用されます。

<scalar_parameter_type> ::= int || double || float || String

<parameter> ::=<scalar_parameter_type> value || this || return || param<index> || variable-key

<parameter_sequence> ::= <parameter> || <parameter> , <parameter_sequence>

メソッド・コマンドの例

  • このチェーンでは、ユーザー・オブジェクトとしてthisが表示されます。このチェーンは、Userクラスのpublic getAddressメソッドを起動します。このチェーンの出力は、このユーザーのアドレスの文字列表現になります。
    addresschain: this | method (public getAddress ())
  • このチェーンは、ユーザーのpublic setNameメソッドを起動し、名前をJohn Smithに設定します。このsetメソッドには戻り値がないため、このチェーンの出力はnullになります。このチェーンでは、メソッド・コマンドでスカラー・パラメータを使用する方法を示します。
    testSetupVar: this | method(public setName(String "John", String "Smith"))
  • このチェーンでは、起動しているメソッドのパラメータとして、param1 (モニターされているメソッドの最初のパラメータ)を使用します。
    testParamAsParam: this | method(public incUserId(param1))
  • このチェーンは、メソッドのパラメータとして別の変数(この場合はtestParamAsParam)を使用します。
    testVarAsParam: this | method(public incUserId(testParamAsParam))
  • このチェーンは、スーパー・メソッドを明示的に起動します。
    invokeUsingSuper: this | method(private super.overloadPrivate(String "string3", int 2222))

フィールド・コマンド

フィールド・コマンドを使用してフィールド値を検査します。フィールドコマンドの出力は、その特定のフィールドのオブジェクトです。

メソッド・コマンドは、フィールド表示とフィールド名で構成されます。

構文: <field_command> ::= field (<visibility> <java_identifier>)

フィールド・コマンドの例

次の例では、thisがユーザー・オブジェクトであると想定しています。ここでは、Userクラスの様々な表示のフィールドにアクセスします。各チェーンの出力は、それぞれのフィールドの値です。
fieldPublic: this | field(public firstName)
fieldProtected: this | field (protected lastName) 
fieldPackagePrivate: this | field (package middleName)
fieldPrivate: this | field (private maidenName)

Staticメソッド・コマンド

staticメソッド・コマンドは、staticメソッドを呼び出すために使用します。staticメソッド・コマンドの出力は、その特定のメソッドの戻りオブジェクトです。

メソッド・コマンドは、開始クラス、メソッドの可視性、メソッド名およびパラメータ順序で構成されます。これは、メソッド・シグネチャを模倣します。

構文は次のとおりです。
<static_method_command> ::= static method((<starting_class>)(<visibility> <java_identifier> (<parameter_sequence>)))

開始クラスは、staticメソッドが見つかったクラスです。

staticメソッド・コマンドの例
  • このチェーンはオブジェクトなしで始まります。このチェーンは、Employeeクラスのpublic getlevelメソッドを呼び出します。このチェーンの出力は、この従業員のレベルの文字列表現になります。
  • staticMethodPublic: static | static method((com.test.beans.Employee)(public getLevel()))
  • 他の可視性と様々なタイプのメソッド・パラメータの使用は、メソッド・コマンドの例と同じです。

staticフィールド・コマンド

staticフィールド・コマンドは、静的フィールド値の検査に使用します。静的フィールド・コマンドの出力は、その特定のフィールドのオブジェクトです。

メソッド・コマンドは、開始クラス、フィールド表示およびフィールド名で構成されます。

構文:

構文は次のとおりです。
<static_field_command> ::= static field ((<starting_class>)(<visibility> <java_identifier>))

静的フィールド・コマンドの例:

次の例では、thisがユーザー・オブジェクトであると想定しています。ここでは、Userクラスの様々な可視性のフィールドにアクセスします。各チェーンの出力は、それぞれのフィールドの値です。

staticFieldPublic: static field((com.test.beans.Employee)(public role))

その他の表示の使用は、フィールド・コマンドの例と同じです。

Regexコマンド

regexコマンドは、SOIの結果、メソッド・コマンドの戻り値またはフィールド値による文字列の検索または置換(あるいはその両方)に使用されます。regexコマンドの出力は文字列です。

regexコマンドは正規表現文字列で構成されます。オプションで、置換文字列と、最初またはすべてのオカレンスを置換するかどうかで構成することもできます。

構文: <regex_command> ::=regex (string [,<replace-string> [, first || all]])

Regexコマンドの例

  • アドレス"100 Oracle Pkway、 Redwood City、 CA 94065"を取得した後、最初の"Pk"を"This"に置換して、"100 Oracle Thatway、 CA 94065"を取得します
    replaceFirstChain : this | method (public getStreet()) | regex(Pk, This, first)
  • アドレス"100 Oracle Pkway、 Redwood City、 CA 94065"を取得した後、すべての"0"sを"1"に置き換えて"11 Oracle Pkway、 Redwood City、 CA 94165"を取得します
    replaceAllChain: this | method (public getStreet()) | regex(0, 1, all)

高度な変数の例

次に、DirectivesConfig.acmlファイル内のコマンド・チェーンの例を示します。

test:  class_name: "com.test.beans.User"
  method_name: "incAge"
  span_name: "${short_class_name}.${method_name}"
  tags:
    t: "${this}"
    params: "${param1}"
    r: "${return}"
    exampleVarTag: "${exampleVar}"
  variables:
    exampleVar:  before this | method (public getAddress ()) | field(private street) |  regex(Pk,This, all) | regex(This, That, first) 

exampleVar変数チェーン実行の確認:

exampleVarチェーンは、"class_name"で指定されたUserオブジェクトで始まります。XX (XXは端末番号)
  • 最初の連鎖コマンドは、Addressオブジェクトを返すメソッド・コマンドです。例: "100 Oracle Pkway、 Redwood City、 CA 94065"。

  • 2番目のchainコマンドは、前のフィールド・コマンドからアドレスの通りを取得するフィールド・コマンドです。これはOracle Pkwayです。

  • 3番目のチェーン・コマンドはregexコマンドであり、Pkのすべてのインスタンスを"This"に置き換えて"Oracle Thisway"を返します。

  • 最後のチェーン・コマンドはregexコマンドであり、Thisの最初のインスタンスをThatに置換し、OracleThatwayを返します。

最終結果: このスパンのディメンションを見ると、値OracleThatwayを持つexampleVarTagというタグが表示されます。このスパン・ディメンションを表示するには、タグ・セクションでexampleVarTag: "${exampleVar}"を指定する必要がありました。

ACMLValidateを使用したファイル構文のチェック

acmlタイプ・ファイルを操作する場合、ACMLValidateユーティリティを使用してacmlファイルの構文を確認できます。

ACMLValidateは、次のacmlファイルの構文を確認および検証するために使用できるAPM Javaエージェント・ユーティリティです。
  • ProbeConfig.acml
  • DirectivesConfig.acml
  • CircuitBreaker.acml
ノート

ACMLValidateユーティリティは構文を検証しますが、値は検証しません。APM Javaエージェント・バージョン1.16以降で使用できます。

前提条件:

PATHで使用可能なJDK、またはJAVA_HOME環境変数を定義します。

場所:

ACMLValidateユーティリティは、oracle-apm-agent/binディレクトリの下にあります。

ACMLValidateを実行します。

ACMLValidateを起動するには、次を使用します。
  • Windows: ACMLValidate.bat

  • Linuxの場合: ACMLValidate.sh

構文
ACMLValidate.[bat|sh] <path to the acml file>
例1:
oracle-apm-agent/bin % sh ACMLvalidate.sh  ../config/1.16.0.560/ProbeConfig.acml
出力は次のようになります。
===============================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: PASSED
===============================================================================
例2:
oracle-apm-agent/bin % sh ACMLvalidate.sh ../config/1.16.0.560/ProbeConfig.acml  
出力は次のようになります。
===========================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: FAILED
Exception: Failed to parse line [5][  SERVLET: true]
Caused by: Tab detected in the following line.  Please replace '\t' with spaces: [  \tSERVLET: true]
===========================================================================