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_id、dd.span_id、dd.service、dd.env、dd.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!")
その他の参考資料