- 重要な情報
- はじめに
- 用語集
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
プロファイラーは、Datadog トレースライブラリ内で送信されます。アプリケーションですでに APM を使用してトレースを収集している場合は、ライブラリのインストールをスキップして、プロファイラーの有効化に直接進むことができます。
Datadog Profiler には Go 1.12 以降が必要です。
Code Hotspots と Endpoint Profiling については、Go バージョン 1.18+ と dd-trace-go
バージョン 1.37.0+ を使用してください。
Continuous Profiler は、AWS Lambda などのサーバーレスプラットフォームには対応していません。
アプリケーションのプロファイリングを開始するには
すでに Datadog を使用している場合は、Agent をバージョン 7.20.2 以降または 6.20.2 以降にアップグレードしてください。
以下のコマンドを使用して、dd-trace-go
を取得します。
go get gopkg.in/DataDog/dd-trace-go.v1/profiler
注: プロファイラは、バージョン 1.23.0 以降の dd-trace-go
ライブラリで利用できます。
アプリケーションの開始時に、プロファイラをインポートします。
import "gopkg.in/DataDog/dd-trace-go.v1/profiler"
次のスニペットを追加し、プロファイラを起動します。
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()
1〜2 分後、Datadog APM > Profiler ページでプロファイルを視覚化します。
注: デフォルトでは、CPU とヒーププロファイルのみが有効になっています。その他のプロファイルタイプを有効にするには、profiler.WithProfileTypes を使用します。
以下の関数で、コードにプロファイラーパラメーターを設定できます。
関数 | タイプ | 説明 |
---|---|---|
WithService | 文字列 | Datadog サービス名 (例: my-web-app )。 |
WithEnv | 文字列 | Datadog 環境名 (例: production )。 |
WithVersion | 文字列 | アプリケーションのバージョン |
WithTags | 文字列のリスト | アップロードされたプロファイルに適用されるタグのリスト。タグは <KEY>:<VALUE> という形式で指定する必要があります。 |
または、環境変数を使用してプロファイラーコンフィギュレーションを設定することも可能です。
環境変数 | タイプ | 説明 |
---|---|---|
DD_ENV | 文字列 | 環境名 (例: production )。 |
DD_SERVICE | 文字列 | サービス名 (例: web-backend )。 |
DD_VERSION | 文字列 | サービスのバージョン。 |
DD_TAGS | 文字列 | アップロードされたプロファイルに適用するタグ。<key>:<value> のように、コンマ区切り形式のリストである必要があります(例、layer:api,team:intake )。 |
デフォルトでは、Go の CPU プロファイラーには、Go コードの詳細情報のみが表示されます。プログラムが C コードを呼び出した場合、C コードの実行時間はプロファイルに反映されますが、コールスタックには Go 関数の呼び出しだけが表示されます。
CPU プロファイルに C 関数の詳細な呼び出し情報を追加するには、ianlancetaylor/cgosymbolizer のようなライブラリを使用するとよいでしょう。このライブラリを使うには
パッケージをダウンロードします。
go get github.com/ianlancetaylor/cgosymbolizer@latest
プログラムの任意の場所に、以下のインポートを追加します。
import _ "github.com/ianlancetaylor/cgosymbolizer"
注: このライブラリは実験的なものと見なされています。C++ の例外を使用するプログラムや、tcmalloc
のようなコールスタックを収集するライブラリを使用するプログラムでは、デッドロックの原因となる可能性があります (頻度は低いですが)。
プロファイラーの概要ガイドでは、パフォーマンスの問題があるサンプルサービスを例に、Continuous Profiler を使用して問題を理解し修正する方法を確認します。
お役に立つドキュメント、リンクや記事: