(COM307) OpenTelemetry Lambda Layers CollectorにDatadog Exporterを追加してみた
はじめに
前回までの記事のために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のコードの簡単なメンテナンスができればカスタマイズは難しくないのかなと思いました。