継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Datadog の APM をローカルから利用する

タダです.

Datadog の APM を試したいと思いやったことをこの記事に備忘録としてまとめます.

ローカルで APM を試す

ローカルから APM を試すことでトレーシングできるかを確認したいと思い,docker のイメージ( gcr.io/datadoghq/agent )で提供されているエージェントを使います.以下のコマンドで起動でき,ローカルのアプリケーションを動かしてトレースできるかを確認する準備ができました.

docker run -d --cgroupns host \
              -v /var/run/docker.sock:/var/run/docker.sock:ro \
              -v /proc/:/host/proc/:ro \
              -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
              -p 8126:8126/tcp \
              -e DD_API_KEY=<DATADOG_API_KEY> \
              -e DD_APM_ENABLED=true \
              -e DD_SITE=datadoghq.com \
              gcr.io/datadoghq/agent:latest

docs.datadoghq.com

トレースのためのコードを埋める

トレースのためにアプリケーションのコードに専用のコードを埋め込んでいきます.Datadog のドキュメントではサポートされている言語ごとに情報がありますが,Go のサンプルコードでローカルでの確認向けコードでいじったことを以下に書きます.WithAgentAddr でコンテナのアドレスとポートを指定し,WithServiceNameでサービス名を指定し,WithDebugMode を有効化しているのはログ上にトレース結果を流してくれるため動作確認目的で有効化しています.

package main

import (
    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

func main() {
    tracer.Start(
        tracer.WithAgentAddr("localhost:8126"),
        tracer.WithServiceName("test-go-app"),
        tracer.WithDebugMode(true),
    )
    defer tracer.Stop()

    // アプリケーションのロジックのコード等
}

docs.datadoghq.com pkg.go.dev

これらの設定をしつつローカルで動作してみたらトレースができました.

まとめ

簡単ですが,Datadog APM をローカルで試したときに備忘録を書きました.ローカルアプリケーションから Datadog の docker コンテナに疎通が到達せずかなりの時間を溶かしてしまったのですが,いい経験となりました.