ダイナミックインスツルメンテーションは、Datadog のトレーシングライブラリをサポートする機能です。すでに APM を使用してアプリケーションのトレースを収集している場合は、Agent とトレーシングライブラリが必要なバージョンであることを確認し、ステップ 4 のダイナミックインスツルメンテーションの有効化に直接進みます。

要件

Datadog ダイナミックインスツルメンテーションライブラリは、JDK バージョン 8 以降でサポートされています。

インストール

  1. Agent のバージョン7.44.0 以上をインストールするか、アップグレードします。

  2. まだ APM を有効にしていない場合は、Agent の構成で DD_APM_ENABLED 環境変数を true に設定し、ポート 8126/TCP をリッスンします。

  3. dd-java-agent.jar をダウンロードします。

    wget -O dd-java-agent.jar 'https://dtdg.co/latest-java-tracer'
    

    : ダイナミックインスツルメンテーションは、バージョン 1.15.0 以降の dd-java-agent.jar ライブラリで利用可能です。

  4. -Ddd.dynamic.instrumentation.enabled フラグ、または DD_DYNAMIC_INSTRUMENTATION_ENABLED 環境変数を true に設定し、ダイナミックインスツルメンテーションを有効にしてサービスを稼働させます。dd.servicedd.envdd.version の統合サービスタグを指定すると、プローブをフィルターしたりグループ化したり、アクティブなクライアントをこれらの次元でターゲットにすることができるようになります。

    サービス起動コマンドの例:

    java \
        -javaagent:dd-java-agent.jar \
        -Ddd.service=<YOUR_SERVICE> \
        -Ddd.env=<YOUR_ENVIRONMENT> \
        -Ddd.version=<YOUR_VERSION> \
        -Ddd.dynamic.instrumentation.enabled=true \
        -jar <YOUR_SERVICE>.jar <YOUR_SERVICE_FLAGS>
    
    export DD_SERVICE=<YOUR_SERVICE>
    export DD_ENV=<YOUR_ENV>
    export DD_VERSION=<YOUR_VERSION>
    export DD_DYNAMIC_INSTRUMENTATION_ENABLED=true
    java \
        -javaagent:dd-java-agent.jar \
        -jar <YOUR_SERVICE>.jar <YOUR_SERVICE_FLAGS>
    

: -javaagent 引数は -jar ファイルより前にあり、アプリケーション引数ではなく JVM オプションとして追加される必要があります。詳しくは、Oracle ドキュメントを参照してください。

# 良い:
java -javaagent:dd-java-agent.jar ... -jar my-service.jar -more-flags
# 悪い:
java -jar my-service.jar -javaagent:dd-java-agent.jar ...
  1. ダイナミックインスツルメンテーションを有効にした状態でサービスを起動すると、APM > ダイナミックインスツルメンテーションページでダイナミックインスツルメンテーションの利用を開始することができます。

コンフィギュレーション

以下の環境変数を使用してダイナミックインスツルメンテーションを構成します。

環境変数タイプ説明
DD_DYNAMIC_INSTRUMENTATION_ENABLEDBoolean引数 -Ddd.dynamic.instrumentation.enabled の代替。ダイナミックインスツルメンテーションを有効にするには、true に設定します。
DD_SERVICE文字列サービス名 (例: web-backend)。
DD_ENV文字列環境名 (例: production)。
DD_VERSION文字列サービスのバージョン
DD_TAGS文字列生成されたデータに適用するタグ。タグは <key>:<value> をカンマで区切ったリストである必要があります。例: layer:api,team:intake

次にやるべきこと

スナップショットやメトリクスプローブの設定、データの参照やインデックス作成については、ダイナミックインスツルメンテーションを参照してください。

その他の参考資料

お役に立つドキュメント、リンクや記事: