はじめに
前回までの記事のためにOpenTelemetry Lambda Layers Collectorのコードを眺めていたらディストリビューションにコンポーネントを追加するのもできそうな気がしてきたのでDatadog Exporterを追加してみました。
やること
OpenTelemetry Lambda Layers Collectorのソースコードを変更してDatadog Exporterを追加し、トレースがDatadogに送信できるか試してみます。
ソースコード
すべてのコードはGitHubにあります
コンポーネントの追加
今回はopentelemetry-collector-contribで公開されているモジュールを使います。 まず以下のコマンドでモジュールを追加します。
> go get github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter@v0.91.0
コンポーネント定義にDatadog Exporterのファクトリを追加します (コミット)
exporters, err := exporter.MakeFactoryMap(
loggingexporter.NewFactory(),
otlpexporter.NewFactory(),
otlphttpexporter.NewFactory(),
prometheusremotewriteexporter.NewFactory(),
datadogexporter.NewFactory(), //<-- 追加
)
設定ファイル
前回までの設定ファイルにdatadogエクスポーターを追加します。 APIキーは環境変数からロードします。
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4318
http:
endpoint: 0.0.0.0:4317
exporters:
datadog:
api:
site: datadoghq.com
key: ${env:DD_API_KEY}
otlphttp:
endpoint: http://0.0.0.0:14317
otlp:
endpoint: http://0.0.0.0:14318
compression: none
tls:
insecure: true
logging:
verbosity: detailed
service:
pipelines:
traces:
receivers: [otlp]
exporters: [logging, otlp, datadog]
metrics:
receivers: [otlp]
exporters: [logging]
動作確認
前回同様otel-cliでトレースを送信すると下記のようにDatadogのコンソールでトレースが確認できました。
かなり無理矢理ですが、Trace IdおよびSpan IDを指定してトレースの呼び出し関係が連携されていることも確認できました。
まとめ
コレクタに既存のコンポーネントを追加してDatadogにトレースが連携できることを確認しました。AWSリソースのタグやログとの紐付けにはさらに作業が必要そうですが、コンポーネントの追加が比較的簡単に行えることが分かったのでGoのコードの簡単なメンテナンスができればカスタマイズは難しくないのかなと思いました。