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

要件

For a summary of the minimum and recommended runtime and tracer versions across all languages, read Supported Language and Tracer Versions.

Datadog Profiler には Go 1.19 以降が必要です。

Code HotspotsEndpoint Profiling については、dd-trace-go バージョン 1.37.0 以降を使用してください。

Continuous Profiler は、AWS Lambda などのサーバーレスプラットフォームには対応していません。

インストール

アプリケーションのプロファイリングを開始するには

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

  2. 以下のコマンドを使用して、dd-trace-go を取得します。

    go get gopkg.in/DataDog/dd-trace-go.v1/profiler
    

    : プロファイラは、バージョン 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. オプション: タイムライン機能 (ベータ版) を有効にします。前提条件を参照してください。

  6. Optional: Set up Source Code Integration to connect your profiling data with your Git repositories.

  7. After a minute or two, visualize your profiles in the Datadog APM > Profiler page.

Note: By default, only the CPU and Heap profiles are enabled. Use profiler.WithProfileTypes to enable additional profile types.

構成

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

関数タイプ説明
WithService文字列The Datadog service name, for example, my-web-app.
WithEnv文字列The Datadog environment name, for example, production.
WithVersion文字列アプリケーションのバージョン
WithTags文字列のリストアップロードされたプロファイルに適用されるタグのリスト。タグは <KEY>:<VALUE> という形式で指定する必要があります。

または、環境変数を使用してプロファイラーコンフィギュレーションを設定することも可能です。

環境変数タイプ説明
DD_ENV文字列The environment name, for example, production.
DD_SERVICE文字列The service name, for example, web-backend.
DD_VERSION文字列The version of your service.
DD_TAGS文字列アップロードされたプロファイルに適用するタグ。<key>:<value> のように、コンマ区切り形式のリストである必要があります(例、layer:api,team:intake)。

CPU プロファイルで C 関数呼び出しを表示する

デフォルトでは、Go の CPU プロファイラーには、Go コードの詳細情報のみが表示されます。プログラムが C コードを呼び出した場合、C コードの実行時間はプロファイルに反映されますが、コールスタックには Go 関数の呼び出しだけが表示されます。

To add detailed C function call information to CPU profiles, you may opt to use library such as ianlancetaylor/cgosymbolizer. To use this library:

  1. パッケージをダウンロードします。

    go get github.com/ianlancetaylor/cgosymbolizer@latest
    
  2. プログラムの任意の場所に、以下のインポートを追加します。

    import _ "github.com/ianlancetaylor/cgosymbolizer"
    

: このライブラリは実験的なものと見なされています。C++ の例外を使用するプログラムや、tcmalloc のようなコールスタックを収集するライブラリを使用するプログラムでは、デッドロックの原因となる可能性があります (頻度は低いですが)。

Save up to 14% CPU in production with PGO

Starting Go 1.21, the Go compiler supports Profile-Guided Optimization (PGO). PGO enables additional optimizations on code identified as hot by CPU profiles of production workloads. This is compatible with Datadog Go Continuous Profiler and can be used for production builds.

Follow this guide to set it up.

次のステップ

The Getting Started with Profiler guide takes a sample service with a performance problem and shows you how to use Continuous Profiler to understand and fix the problem.

その他の参考資料