(COM307) OpenTelemetry Lambda Layers CollectorにDatadog Exporterを追加してみた

2023.12.28

はじめに

前回までの記事のために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のコードの簡単なメンテナンスができればカスタマイズは難しくないのかなと思いました。