はじめに
Dash が新機能を発表!インシデントマネジメント、Continuous Profiler など多数の機能が追加されました! Dash イベントで発表された新機能!

はじめに

Profiling は、次のトレースライブラリに同梱されています。アプリケーションのプロファイリングを有効にする方法を確認するには、以下で言語を選択してください。

Datadog Profiler には JDK Flight Recorder が必要です。Datadog Profiling ライブラリは、OpenJDK 11 以降、Oracle Java 11以降、Zulu Java 8 以降 (マイナーバージョン 1.8.0_212 以降)でサポートされています。Scala、Groovy、Kotlin、Clojure など、JVM ベースのすべての言語がサポートされています。アプリケーションのプロファイリングを開始するには、

  1. すでに Datadog を使用している場合は、Agent をバージョン 7.20.2 以降または 6.20.2 以降にアップグレードしてください。まだ APM を有効にしていない場合で Datadog にデータを送信するようにアプリケーションを設定するには、ご利用中の Agent で DD_APM_ENABLED 環境変数を true に設定し、ポート 8126/TCP をリッスンします。

  2. Java Agent クラスファイルを含む dd-java-agent.jar をダウンロードします。

    wget -O dd-java-agent.jar 'https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=com.datadoghq&a=dd-java-agent&v=LATEST'

: プロファイリングは、0.55 以降のバージョンの dd-java-agent.jar ライブラリで利用できます。

  1. -Ddd.profiling.enabled フラグまたは DD_PROFILING_ENABLED 環境変数を true に設定します。次のようにサービス呼び出しを更新します。

    java -javaagent:dd-java-agent.jar -Ddd.profiling.enabled=true -jar <YOUR_SERVICE>.jar <YOUR_SERVICE_FLAGS>
    
  2. 1〜2 分後、Datadog APM > Profiling ページでプロファイルを視覚化します。

:

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

    # Good:
    java -javaagent:dd-java-agent.jar ... -jar my-service.jar -more-flags
    # Bad:
    java -jar my-service.jar -javaagent:dd-java-agent.jar ...
  • service および version を指定すると、プロファイルのさまざまな側面をすばやく詳細に解明できるため、指定することをお勧めします。環境変数を使用してパラメータを設定します。

環境変数タイプ説明
DD_PROFILING_ENABLEDBoolean-Ddd.profiling.enabled 引数の代替。true に設定してプロファイルを有効にします。
DD_SERVICE文字列サービス名(例、web-backend)。
DD_ENV文字列環境名(例、production)。
DD_VERSION文字列サービスのバージョン
DD_TAGS文字列アップロードされたプロファイルに適用するタグ。<key>:<value> のように、コンマ区切り形式のリストである必要があります(例、layer:api, team:intake)。

Datadog Profiler には Python 2.7 以降が必要です。メモリプロファイリングは、Python 3.5 以降でご利用になれます。アプリケーションのプロファイリングを開始するには、

  1. すでに Datadog を使用している場合は、Agent をバージョン 7.20.2 以降または 6.20.2 以降にアップグレードしてください。

  2. トレースとプロファイリングの両方を含む ddtrace をインストールします。

    pip install ddtrace

: プロファイリングは、バージョン 0.36 以降の ddtrace ライブラリで利用できます。

  1. コードを自動的にプロファイリングするには、ddtrace-run を使用する際に、DD_PROFILING_ENABLED 環境変数を true に設定します。

    DD_PROFILING_ENABLED=true ddtrace-run python app.py

    注: DD_PROFILING_ENABLEDdd-trace 0.40 以降のバージョンでのみサポートされます。それ以前の dd-trace を実行している場合は、別の方法をご利用ください。

    別の方法

    コードを使いプロファイラをインスツルメントするには、ddtrace.profile.auto をインポートします。インポート後、プロファイラが起動します。

    import ddtrace.profiling.auto
  2. 1〜2 分後、Datadog APM > Profiling ページでプロファイルを視覚化します。

:

  • または、ラッパー pyddprofile で実行してサービスをプロファイルします。

    $ pyddprofile server.py
  • serviceversion のようなタグ追加すると、プロファイルのさまざまな側面をすばやく詳細に解明でき操作性の向上につながるため、強くお勧めします。環境変数を使用してパラメータを設定します。

環境変数タイプ説明
DD_PROFILING_ENABLEDBooleanプロファイリングを有効にするには、true に設定します。トラッカーのバージョン 0.40 以降からサポートされます。
DD_SERVICE文字列Datadog サービス名。
DD_ENV文字列Datadog 環境名前(例、production)。
DD_VERSION文字列アプリケーションのバージョン
DD_TAGS文字列アップロードされたプロファイルに適用するタグ。<key>:<value> のように、コンマ区切り形式のリストである必要があります(例、layer:api,team:intake)。
高度な使用方法にのみ推奨されます。
  • プロセスが os.fork を使用してフォークすると、プロファイラは子プロセスで停止します。

POSIX プラットフォームの Python 3.7 以降では、pyddprofile または ddtrace.profiling.auto を介してプロファイラを有効にすると、新しいプロファイラが起動します。

Profiler() を手動で作成する場合、Python 3.6 未満を使用する場合、または非 POSIX プラットフォームで実行する場合、以下を使用し子のプロファイラーを手動で再起動します。

   ddtrace.profiling.auto.start_profiler()
  • プロファイラのライフサイクルを手動で制御するには、ddtrace.profiling.profiler.Profiler オブジェクトを使用します。

    from ddtrace.profiling import Profiler
    
    prof = Profiler()
    prof.start()
    
    # At shutdown
    prof.stop()

Datadog Profiler には Go 1.12 以降が必要です。アプリケーションのプロファイリングを開始するには、

  1. すでに Datadog を使用している場合は、Agent をバージョン 7.20.2 以降または 6.20.2 以降にアップグレードしてください。

  2. 以下のコマンドを使用して、dd-trace-go を取得します。

    go get gopkg.in/DataDog/dd-trace-go.v1

    : プロファイリングは、バージョン 1.23.0 以降の dd-trace-go ライブラリで利用できます。

  3. アプリケーションの開始時に、プロファイラをインポートします。

    import "gopkg.in/DataDog/dd-trace-go.v1/profiler"
  4. 次のスニペットを追加し、プロファイラを起動します。

    err := profiler.Start(
        profiler.WithService("<SERVICE_NAME>"),
        profiler.WithEnv("<ENVIRONMENT>"),
        profiler.WithVersion("<APPLICATION_VERSION>"),
        profiler.WithTags("<KEY1>:<VALUE1>,<KEY2>:<VALUE2>"),
    )
    if err != nil {
        log.Fatal(err)
    }
    defer profiler.Stop()
  5. 1〜2 分後、Datadog APM > Profiling ページでプロファイルを視覚化します。

:

  • serviceversion のようなタグ追加すると、プロファイルのさまざまな側面をすばやく詳細に解明でき操作性の向上につながるため、強くお勧めします。プロファイラコンフィギュレーションを使用してパラメータを設定します。
メソッドタイプ説明
WithService文字列Datadog サービス 名(例、my-web-app)。
WithEnv文字列Datadog 環境名(例、production)。
WithVersion文字列アプリケーションのバージョン
WithTags文字列アップロードされたプロファイルに適用するタグ。<キー1>:<値1>,<キー2>:<値2> 形式のリストである必要があります。
  • または、環境変数を使いプロファイラコンフィギュレーションを設定することもできます。
環境変数タイプ説明
DD_SERVICE文字列Datadog サービス名。
DD_ENV文字列Datadog 環境名(例、production)。
DD_VERSION文字列アプリケーションのバージョン
DD_TAGS文字列アップロードされたプロファイルに適用するタグ。<key>:<value> のように、コンマ区切り形式のリストである必要があります(例、layer:api,team:intake)。

Datadog Profiler には Node 10.12 以降が必要です。アプリケーションのプロファイリングを開始するには、

  1. すでに Datadog を使用している場合は、Agent をバージョン 7.20.2 以降または 6.20.2 以降にアップグレードしてください。 

  2. トレースとプロファイリングの両方を含む dd-trace をインストールします。

    npm install --save dd-trace

: プロファイリングは、バージョン 0.23.2 以降の dd-trace ライブラリで利用できます。

  1. コードを自動的にプロファイルするには、プロファイリングが有効な状態で dd-trace をインポートして初期化します。

    require('dd-trace').init({
      profiling: true
    })
    
  2. 1〜2 分後、Datadog APM > Profiling ページでプロファイルを視覚化します。

:

  • serviceversion などのタグも利用できます。環境変数を使用してパラメーターを設定します。
環境変数タイプ説明
DD_PROFILING_ENABLEDBooleanプロファイリングを有効にするには、true に設定します。
DD_SERVICE文字列Datadog サービス名。
DD_ENV文字列Datadog 環境名前(例、production)。
DD_VERSION文字列アプリケーションのバージョン
DD_TAGS文字列アップロードされたプロファイルに適用するタグ。<key>:<value> のように、コンマ区切り形式のリストである必要があります(例、layer:api, team:intake)。

トラブルシューティング

プロファイラを設定してもプロファイル検索ページにプロファイルが表示されない場合は、デバッグモードをオンにし、デバッグファイルと次の情報でサポートチケットを開いてください

  • OS タイプとバージョン(例: Linux Ubuntu 14.04.3)
  • ランタイムのタイプ、バージョン、ベンダー(例: Java OpenJDK 11 AdoptOpenJDK)

その他の参考資料