はじめに

はじめに

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

NodeRubyPHP.NET プロファイラーの非公開ベータ版が利用可能になった場合に通知するには、こちらから新規登録してください。

Datadog Profiler には JDK Flight Recorder が必要です。Datadog Profiler ライブラリは、OpenJDK 11 以降、Oracle Java 11以降、OpenJDK 8 (バージョン 8u262以降)、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'
    

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

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

    java -javaagent:dd-java-agent.jar -Ddd.profiling.enabled=true -XX:FlightRecorderOptions=stackdepth=256 -jar <YOUR_SERVICE>.jar <YOUR_SERVICE_FLAGS>
    
  4. 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 を指定すると、プロファイルのさまざまな側面をすばやく詳細に解明できるため、Datadog では指定することをお勧めしています。環境変数を使用してパラメータを設定します。

環境変数タイプ説明
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+ と Agent バージョン 7.20.2+ または 6.20.2+ が必要です。

以下のプロファイリング機能は、お使いの Python のバージョンに応じて利用可能です。

機能サポート対象の Python バージョン
Wall Time プロファイリングPython 2.7 以降
CPU タイムプロファイリングPOSIX プラットフォームの Python 2.7 以降
例外プロファイリングPOSIX プラットフォームの Python 3.7 以降
ロックプロファイリングPython 2.7 以降
メモリプロファイリングPython 3.5 以降

インストール

トレーシングとプロファイリング機能の双方を提供する ddtrace をインストールします。

pip install ddtrace

: プロファイリングには ddtrace ライブラリのバージョン 0.40+ が必要です。

ddtrace のバイナリディストリビューションに対応していないプラットフォームを使用している場合は、開発環境をインストールしてください。

たとえば、Alpine Linux では以下を実行します。

apk install gcc musl-dev linux-headers

使用方法

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

DD_PROFILING_ENABLED=true \
DD_ENV=prod \
DD_SERVICE=my-web-app \
DD_VERSION=1.0.3 \
ddtrace-run python app.py

serviceversion のようなタグを追加すると、プロファイルのさまざまな側面をすばやく詳細に解明できるため、強くお勧めします。以下の[コンフィギュレーション]を参照してください。

数分後、Datadog APM > Profiler ページでプロファイルを視覚化します。

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

from ddtrace.profiling import Profiler

prof = Profiler(
    env="prod",  # if not specified, falls back to environment variable DD_ENV
    service="my-web-app",  # if not specified, falls back to environment variable DD_SERVICE
    version="1.0.3",   # if not specified, falls back to environment variable DD_VERSION
)
prof.start()

注意事項

プロセスが os.fork を使用してフォークすると、プロファイラは子プロセスで停止するため、 再起動する必要があります。Unix プラットフォームで Python 3.7 以降を 使用している場合、新規プロファイラーが自動的に起動します。

Python 3.7 以降をお使いの場合、または Unix 以外のプラットフォームで実行する場合は、子プロセスで 新規プロファイラーを手動で開始する必要があります。

# For ddtrace-run users, call this in your child process
ddtrace.profiling.auto.start_profiler()

# Alternatively, for manual instrumentation,
# create a new profiler in your child process:
from ddtrace.profiling import Profiler

prof = Profiler()
prof.start()

コンフィギュレーション

次の環境変数を使用してプロファイラーを構成できます。

環境変数Profiler へのキーワード引数タイプ説明
DD_PROFILING_ENABLEDBooleanプロファイラを有効にするには、true に設定します。
DD_SERVICEservice文字列Datadog サービス名。
DD_ENVenv文字列Datadog 環境名前(例、production)。
DD_VERSIONversion文字列アプリケーションのバージョン
DD_TAGStags文字列 / 辞書アップロードされたプロファイルに適用されるタグ。環境変数と共に設定する場合は、layer:api,team:intake のようにカンマで区切られた <key>:<value> のリスト形式にする必要があります。キーワード引数で設定する場合は、{"layer": "api", "team": "intake"} のようにキーがタグ名、値がタグの値を表す辞書形式で記述します。

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>"),
        profiler.WithProfileTypes(
          profiler.CPUProfile,
          profiler.HeapProfile,
          // The profiles below are disabled by default to keep overhead
          // low, but can be enabled as needed.
    
          // profiler.BlockProfile,
          // profiler.MutexProfile,
          // profiler.GoroutineProfile,
        ),
    )
    if err != nil {
        log.Fatal(err)
    }
    defer profiler.Stop()
    
  5. 1〜2 分後、Datadog APM > Profiler ページでプロファイルを視覚化します。

:

  • デフォルトでは、CPU とヒーププロファイルのみが有効になっています。その他のプロファイルタイプを有効にするには、profiler.WithProfileTypes を使用します。

  • 以下の関数で、コードにプロファイラーパラメーターを設定できます。

関数タイプ説明
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)。

その他の参考資料