Note: This documentation uses v2 of the Go tracer, which Datadog recommends for all users. If you are using v1, see the migration guide to upgrade to v2.

手動挿入

Go トレーサーは、スパン情報と、%v 形式の指定子を使ったログステートメントの印刷を可能にします。

package main

import (
    "net/http"

    "github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
)

func handler(w http.ResponseWriter, r *http.Request) {
    // /posts URL への Web リクエスト用に span を作成します。
    span := tracer.StartSpan("web.request", tracer.ResourceName("/posts"))
    defer span.Finish()

    // log メッセージに span 情報を加えます:
    log.Printf("my log message %v", span)
}

上記の例は、標準ライブラリの log パッケージのスパンのコンテキストの使い方を説明しています。同様のロジックがサードパーティパッケージにも適用される場合があります。

: Datadog ログインテグレーションを使ってログをパースしていない場合は、カスタムログパースルールによって dd.trace_iddd.span_iddd.servicedd.envdd.version が文字列としてパースされていることを確実にする必要があります。詳しくは、関連するログがトレース ID パネルに表示されないを参照してください。

logrus ログへの注入

logrus パッケージ用の hook が用意されており、ログと span を自動でひも付けできます。

package main

import (
    "github.com/sirupsen/logrus"

    dd_logrus "github.com/DataDog/dd-trace-go/contrib/sirupsen/logrus/v2"
    "github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
)

func main() {
    // 任意: ログ形式を JSON に変更します (Go Log Collection を参照)。
    logrus.SetFormatter(&logrus.JSONFormatter{})

    // Datadog コンテキスト付きログ用の hook を追加
    logrus.AddHook(&dd_logrus.DDContextLogHook{}) 

    // ...
}

これにより、コンテキスト付きでログを取る際に、トレース ID が自動的にログに注入されます。

    // コンテキスト付きのログ
    logrus.WithContext(ctx).Info("Go logs and traces connected!")

その他の参考資料