コンパイル済み言語のネイティブプロファイラーを有効にする
ddprof
はベータ版です。Datadog では、本番環境にデプロイする前に重要でない環境でプロファイラーを評価することを推奨しています。
コンパイル済み言語用ネイティブプロファイラー (ddprof
) は、OS レベルの API を使用してプロファイリングデータを収集します。C、C++、Rust などのコンパイルされた言語で書かれたアプリケーションに最適です。
ddprof
から送信されたプロファイラーが、Datadog Web アプリの_ネイティブ_ランタイムに表示されます。
要件
すべての言語におけるランタイムとトレーサーの最小バージョンと推奨バージョンの要約については、サポートされている言語とトレーサーのバージョンをお読みください。
- 対応 OS
- Linux (glibc または musl)
- 対応アーキテクチャ
amd64
プロセッサーまたは arm64
プロセッサー- サーバーレス
ddprof
は、AWS Lambda などのサーバーレスプラットフォームには対応していません。- OS 設定
perf_event_paranoid
カーネル設定は 2 以下です (トラブルシューティングを参照してください)。- デバッグ情報
- シンボルが利用可能である必要があります。シンボルテーブルが削除されると、プロファイラーが人間が読める関数名を提供できません。
インストール
プロファイラーは、スタンドアロン実行ファイルとして、またはライブラリとして使用することができます。ライブラリとして使用する場合は、ライブラリのインストール方法までスキップしてください。
スタンドアロン
最新の ddprof
リリースをダウンロードします。例えば、amd64
(別名 x86_64
) プラットフォーム用の最新リリースを取得する一つの方法は以下の通りです。
curl -Lo ddprof-linux.tar.xz https://github.com/DataDog/ddprof/releases/latest/download/ddprof-amd64-linux.tar.xz
tar xvf ddprof-linux.tar.xz
mv ddprof/bin/ddprof INSTALLATION_TARGET
ここで、INSTALLATION_TARGET
は ddprof
のバイナリを保存する場所を指定します。この後の例では、INSTALLATION_TARGET
は ./ddprof
に設定されていると仮定しています。
aarch64
プラットフォームでは amd64
の代わりに arm64
を使用してください。
プロファイラーを含むようにサービス呼び出しを修正します。いつものコマンドは ddprof
実行ファイルへの最後の引数として渡されます。
export DD_ENV=prod
export DD_SERVICE=my-web-app
export DD_VERSION=1.0.3
./ddprof myapp --arg1 --arg2
注: 通常、シェルビルトインを使用してアプリケーションを起動する場合、例えば、
その場合は、代わりにそのビルトインで ddprof
を呼び出す必要があります。
export DD_ENV=prod
export DD_SERVICE=my-web-app
export DD_VERSION=1.0.3
exec ./ddprof myapp --arg1 --arg2
./ddprof --environment prod --service my-web-app --service_version 1.0.3 myapp --arg1 --arg2
注: 通常、シェルビルトインを使用してアプリケーションを起動する場合、例えば、
その場合は、代わりにそのビルトインで ddprof
を呼び出す必要があります。
exec ./ddprof --environment prod --service my-web-app --service_version 1.0.3 myapp --arg1 --arg2
アプリケーションの起動数分後、Datadog APM > Profiler ページにプロファイルが表示されます。
ライブラリ
このライブラリは、C 言語の API を公開しています。
ddprof のライブラリサポート付きリリース (v0.8.0 以降) をダウンロードし、tarball を抽出します。例:
curl -Lo ddprof-linux.tar.xz https://github.com/DataDog/ddprof/releases/latest/download/ddprof-amd64-linux.tar.xz
tar xvf ddprof-linux.tar.xz --directory /tmp
コード内で、リリースで提供される _dd_profiling.h_
ヘッダーで定義される ddprof_start_profiling()
インターフェイスを使用して、プロファイラーを開始します。プログラムが終了すると、プロファイラーは自動的に停止します。プロファイラーを手動で停止させるには、 ddprof_stop_profiling(ms)
を使用します。ms
パラメーターは、関数の最大ブロック時間をミリ秒で表します。以下は、C 言語のスタンドアロン例 (profiler_demo.c
) です。
#include <stdlib.h>
#include "dd_profiling.h"
int foo(void) {
int n = 0;
for (int i = 0; i < 1000; i++) {
n += 1;
}
return n;
}
int main(void) {
// Initialize and start the Datadog profiler. Uses agent defaults if not
// specified
setenv("DD_ENV", "prod", 1);
setenv("DD_SERVICE", "c_testservice", 1);
setenv("DD_VERSION", "1.0.3", 1);
ddprof_start_profiling();
// Do some work
for (int i = 0; i < 1e6; i++) {
foo();
}
return 0;
}
抽出したディレクトリの include
と lib
サブディレクトリをビルドシステムに渡し、 libdd_profiling
に対してリンクします。上記の例の場合:
gcc -I/tmp/ddprof/include -L/tmp/ddprof/lib profiler_demo.c -o profiler_demo -ldd_profiling
共有ライブラリのデプロイ
共有ライブラリは、システムのライブラリ検索パスに存在する必要があります。そうでない場合は、アプリケーションの起動に失敗します。先ほどの例で言うと:
./profiler_demo
./profiler_demo: error while loading shared libraries: libdd_profiling.so: cannot open shared object file: No such file or directory
スタティックライブラリに対してリンクすることで、これを回避することができます。
ライブラリのインストール
ライブラリを既存の検索ディレクトリにコピーして、検索パスに追加します。検索ディレクトリを調べるには、Linux システムで、以下を実行します。
ld --verbose | grep SEARCH_DIR | tr -s ' ;' \\n
検索ディレクトリの追加
環境変数 LD_LIBRARY_PATH
を使って、ランタイムリンカーに追加の検索パスを追加します。例えば、先ほどのディレクトリレイアウトを使って:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/ddprof/lib
構成
environment
、service
、service_version
の設定は、プロファイリング UI で使用されるため、推奨されます。
パラメーターの全リストを参照するか、コマンドラインを使用してください。
ロギング
複数のエンドポイントのうちの 1 つにログを構成することができます。
stdout
はログを標準出力ストリームに出力します (デフォルト)。stderr
はログを標準エラーストリームに出力します。syslog
は、RFC 3164 の仕様に準拠するように、ログを syslog に発行します。disable
はログを完全に無効にします。- それ以外の値はファイルパスとして扱われ、先頭の
/
は絶対パスを意味します。
グローバル
実行中のすべてのプロセスをインスツルメンテーションしたい場合は、--global
オプションを試してみてください。
グローバルモードはデバッグ用です。このモードでは権限の昇格が必要です。セットアップによっては、root で実行し、CAP_PERFMON
や CAP_SYSADMIN
を許可するか、perf_event_paranoid
を -1
に設定する必要があります。
./ddprof --environment staging --global --service_version full-host-profile
ほとんどの構成では、これはプロファイラーの PID ネームスペースで見えるすべてのプロセスで構成されます。
次のステップ
プロファイラーの概要ガイドでは、パフォーマンスの問題があるサンプルサービスを例に、Continuous Profiler を使用して問題を理解し修正する方法を確認します。
その他の参考資料