🐶

LLM APIを監視するために、OpenTelemetryをECSからDatadogに送れるようにしました

2025/02/21に公開
1

背景

株式会社IVRyでAIエンジニアとして働いているMoriyaです。
弊社では、ECS上で動くapplicationからLLM APIを呼びだしており、sidecarとしてDatadog Agentを使っています。
LLM APIの監視ツールとして、これまでDatadog LLM observability機能を使っていました。しかし、LLM observabilityだと、OpenAI以外のLLM APIを監視することができませんでした。
そこで、さまざまなLLM APIを監視するツールとして、OpenTelemetryに則ったライブラリであるOpenLITの導入を検討し始めました。
Datadog 公式ドキュメントに、DatadogでOpenTelemetryを扱う方法は記載されているのですが、ECSに特化した説明は記載されておらず、導入するまでに少し苦労しました。

そこで、本記事では、備忘録を兼ねて、ECS applicationにおいて、OpenTelemetryをDatadogに送信する方法をまとめました。

OpenLITの導入を検討した理由

前述した通り、Datadog LLM observabilityを使ったLLM APIの監視を行っていました。しかし、Google Cloud, AWS, Azureから様々なLLM APIがリリースされており、Datadog LLM observabilityでは監視できないAPIが出てきました。
そこで、より幅広いLLM APIを監視できるライブラリであるOpenLITの導入を検討しました。OpenLITだと、OpenAI以外にも、Anthropic, DeepSeek, Mistral, Amazon Bedrock, Google AI Studio, Vertex AIなど、様々なAPIに対応していたため、私たちのユースケースに適していると判断しました(リンク)。

手順

Datadog Agentへの設定

OpenTelemetryが送信するためのportが解放されている必要があります。以下のような、portMappingの設定が必要です。

    "portMappings": [
        {
            "containerPort": 4318,
            "hostPort": 4318,
            "protocol": "tcp"
        }
    ], 

環境変数にも、以下の値を設定します。1つでも抜けていると、Datadog AgentはOpenTelemetry metricsを受け取ってくれません。

...
"environment": [
...
    {
      "name": "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT",
      "value": "0.0.0.0:4318"
    },
    {
      "name": "DD_OTLP_CONFIG_LOGS_ENABLED",
      "value": "true"
    },
    {
      "name": "DD_LOGS_ENABLED",
      "value": "true"
    }
...

application側の設定

今回は、OpenLITという、OpenTelemetryに準拠したLLM監視ツールを導入します。
以下のように、上で設定したport番号を設定します。

openlit.init(
        otlp_endpoint="http://127.0.0.1:4318",
        trace_content=False,
        environment=os.environ["ENV"],
        application_name="app",
    )

Datadogでの確認

以下のように、OpenLitに関するmetricsが取得できていました。

まとめ

Datadog上で、OpenTelemetryを監視すること自体は難しくなかったので、今後もOpenTelemetryのツールが出たら、どんどん試していこうと思います。

(ちなみに、OpenLITに関しては、LiteLLM経由でLLM APIを呼び出した場合に、LLM APIの区別がつかなかったので、導入を見送りました。その辺りの話は、こちらに記載しています)

1
IVRyテックブログ

Discussion