2024年4月更新
同じトピックが公式ドキュメントに追加されています。最新情報はこちらをご参照ください。
はじめに
OpenTelemetryのブログに以下のような記事が出ていました
Announcing a Community Demo for OpenTelemetry
https://opentelemetry.io/blog/2022/demo-announcement/
これはOpenTelemetryのデモキットで、ECサイトがさまざまな言語のマイクロサービスで作られています。さらにメトリクスやトレースの計装もすでに行われていて、手元にDocker環境があればdocker compose up
だけで動かすことができます。
OpenTelemetryのデモとしては、JeagerやPrometheusでトレースやメトリクスを見られるようになっています。今回は、それらをDatadogに送って、Datadogで見られるようにしたいと思います。
構成
いくつかのマイクロサービスで構成され、それぞれ異なる言語で作られています。(画像はREADMEより引用)
デモの動かし方
Githubのレポジトリをクローンして、docker compose up
すると動きます。初回はビルドに時間がかかります。
Webstore Demo
https://github.com/open-telemetry/opentelemetry-demo
立ち上がったら、ブラウザでhttp://localhost:8080
にアクセスすると、以下のようなECサイトが現れます。
同様に、http://localhost:9090
でPrometheusに、http://localhost:16686
でJeagerにアクセスできます。
Datadog Exporter
ではこれらのメトリクスとトレースをDatadogに送信してみます。OpenTelemetryのCollectorに対応したDatadog Exporterは現在betaですので、あくまでお試し用途となります。
OpenTelemetry collector Datadog exporter (Datadog document)
https://docs.datadoghq.com/tracing/setup_overview/open_standards/otel_collector_datadog_exporter
Datadog Exporter (Github)
https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/datadogexporter
変更点は以下のとおりで、Collectorの設定ファイルにDatadogの設定を追加します。
exporters
にDatadogの設定を追加します。<API_KEY>
はそれぞれお使いのAPI Keyに置き換えてください。env
タグやその他のタグもここで設定できます。あとは、pipelines
でtrace
とmetrics
にdatadog
を追加して送信されるようにします。
下記の設定では、PrometheusやJeagerにも引き続き送信されます。
...
exporters:
jaeger:
endpoint: "jaeger:14250"
tls:
insecure: true
logging:
prometheus:
endpoint: "otelcol:9464"
+ datadog:
+ api:
+ key: <API_KEY>
+ host_metadata:
+ tags:
+ - otel:true
processors:
batch:
+ resource:
+ attributes:
+ - key: deployment.environment # Set env tag for Datadog
+ value: "otel"
+ action: upsert
service:
pipelines:
traces:
receivers: [otlp]
- processors: [batch]
+ processors: [batch, resource]
- exporters: [logging, jaeger]
+ exporters: [logging, jaeger, datadog]
metrics:
receivers: [otlp]
- processors: [batch]
+ processors: [batch, resource]
- exporters: [prometheus, logging]
+ exporters: [prometheus, logging, datadog]
あと、Datadog Exporterはオリジナルのdocker-compose.yaml
にあるコンテナイメージには含まれていないので、contribを含むイメージに変更します。
# Collector
otelcol:
- image: otel/opentelemetry-collector:0.56.0
+ image: otel/opentelemetry-collector-contrib:0.56.0
command: [ "--config=/etc/otelcol-config.yml" ]
Datadogに表示された!
再度docker compose up
してECサイトにアクセスしてみると、Datadogにもトレースとメトリクスが表示されました!
本当にシンプルで簡単で感動しました。
サービスマップ:マイクロサービス間の呼び出し関係や、トラフィックの流れが見えます
トレース:個別のトレースの中で、バックエンドの呼び出し関係や、かかった時間、その他詳細情報が見えます
メトリクス:メトリクスも送信されていて、タグが付加されています
Datadog Agentでも受信できます
今回のデモ環境では、OpenTelemetry Collectorでメトリクスやトレースを受け取って、Datadogに送信していますが、この代わりにDatadog Agentを使うことも可能です。
現状すでにDatadog Agentが動いているような場合は、そのまま使うことが可能です。(ただしAgentは最新バージョンにしてください)
以下の図のように、OpenTelemetryとの組み合わせはいくつか方法があります。詳細はDatadogのブログ記事をご参照ください。
Ingest OpenTelemetry traces and metrics with the Datadog Agent
https://www.datadoghq.com/blog/ingest-opentelemetry-traces-metrics-with-datadog-agent/