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

要件

すべての言語におけるランタイムとトレーサーの最小バージョンと推奨バージョンの要約については、サポートされている言語とトレーサーのバージョンをお読みください。

The Datadog Profiler requires Python 2.7+.

The following profiling features are available depending on your Python version. For more details, read Profile Types:

機能サポート対象の 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 以降
Endpoint Profiling0.54.0 以降
Timeline2.10.5+

インストール

Ensure Datadog Agent v6+ is installed and running. Datadog recommends using Datadog Agent v7+.

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

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

Optionally, set up Source Code Integration to connect your profiling data with your Git repositories.

After a couple of minutes, visualize your profiles on the Datadog APM > Profiler page.

プロファイラーのライフサイクルを手動で制御するには、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()  # できるだけ早く、例えば他のインポートより前に、すべてのプロファイルを確保する必要があります

構成

You can configure the profiler using the environment variables.

コードプロベナンス

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

次のステップ

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

その他の参考資料