プロファイラーは、Datadog トレースライブラリ内で送信されます。アプリケーションですでに APM を使用してトレースを収集している場合は、ライブラリのインストールをスキップして、プロファイラーの有効化に直接進むことができます。

要件

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 以降

インストールには pip バージョン 18 以上が必要です。

以下のプロファイリング機能は、dd-trace-py ライブラリの以下の最小バージョンで利用可能です。

機能必要な dd-trace-py のバージョン
Code Hotspots0.44.0 以降
エンドポイントプロファイリング0.54.0 以降

インストール

トレーシングとプロファイリング機能の双方を提供する 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

より高度な使い方については、構成を参照してください。

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

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

from ddtrace.profiling import Profiler

prof = Profiler(
    env="prod",  # 指定しない場合は、環境変数 DD_ENV にフォールバックします
    service="my-web-app",  # 指定しない場合は、環境変数 DD_SERVICE にフォールバックします
    version="1.0.3",   # 指定しない場合は、環境変数 DD_VERSION にフォールバックします
)
prof.start()  # できるだけ早く、例えば他のインポートの前に、すべてのプロファイルを確保する必要があります

注意事項

プロセスが os.fork を使ってフォークするとき、プロファイラーは子プロセスで起動される必要があります。Python 3.7+ では、これは自動的に行われます。Python < 3.7 では、子プロセスで新しいプロファイラーを手動で開始する必要があります。

# ddtrace-run ユーザーの場合は、子プロセスでこれを呼び出します
ddtrace.profiling.auto.start_profiler()  # できるだけ早く、例えば他のインポートより前に、すべてのプロファイルを確保する必要があります

# また、手動でインスツルメンテーションを行う場合は、
# 子プロセスに新しいプロファイラーを作成します。
from ddtrace.profiling import Profiler

prof = Profiler(...)
prof.start()  # できるだけ早く、例えば他のインポートより前に、すべてのプロファイルを確保する必要があります

コンフィギュレーション

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

コードプロベナンス

Python プロファイラーはコードプロベナンスレポートをサポートしており、コードを実行しているライブラリについての洞察を得ることができます。この機能はデフォルトでは無効になっていますが、DD_PROFILING_ENABLE_CODE_PROVENANCE=1 を設定することで有効にすることができます。

次のステップ

プロファイラーの概要ガイドでは、パフォーマンスの問題があるサンプルサービスを例に、Continuous Profiler を使用して問題を理解し修正する方法を確認します。

その他の参考資料