Datadog LLM Observability に入門してみた

Datadog LLM Observability に入門してみた

Datadog LLM Observability を使って Python 製のチャットボットを計測・監視し、トークン使用量や応答品質を可視化してみました。 セットアップからトレース取得・評価設定・モニタリングまでの一連の流れを紹介します。
2025.09.29

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

生成 AI の進化により、チャットボットなど LLM を利用したアプリケーションを開発する機会が増えています。
そんな中、LLM アプリケーションの監視は十分にできていますか?
トークン使用量や応答の品質など LLM 特有の指標をどう監視すればよいのか悩む方も多いと思います。
今回は Datadog の LLM Observability を使って、Python 製の LLM チャットボットアプリケーションをトレースし、そのパフォーマンスや品質、安全性を評価してみました。

LLM Observabilty

Datadog の LLM Observability は、次のような情報をリアルタイムに取得できます。

  • トークン使用量
  • エラー情報
  • レイテンシ(応答時間)
  • モデルの応答品質や安全性評価

パフォーマンスのモニタリングやアラートだけでなく、LLM アプリケーションの品質・安全性チェックにも活用できます。
品質や安全性評価によって有害コンテンツ・幻覚(Hallucination)・プロンプトインジェクションなどを検出することができます。
LLM アプリケーションを観測(インスツルメンテーション)するにはトレーサーやメトリクス送信処理を組み込む必要があります。

LLM Observability SDK

LLM Observability SDK とは、LLM アプリケーションに対してトレーシング・メトリクス・ログ収集・評価などの観点で可観測性を付与するための開発者向けライブラリ、ツール群です。
現時点では Python、Node.js、Java に対応しています。
SDK を利用するとアプリケーションのコード変更なしに、自動インスツルメンテーションすることができます。
また、アプリケーションパフォーマンスモニタリング(APM)と連携もできるため、簡単に統合が行えます。

評価機能

品質、セキュリティ、安全性といった側面から LLM アプリケーションを評価するための組み込み機能です。
Datadog は Anthropic、Amazon Bedrock、OpenAI などのプロバイダーに接続し、様々な観点から LLM 出力を評価します。
一般的な評価はマネージド評価として提供されていますが、接続したプロバイダーによって利用できる評価項目が異なる点には注意が必要です。
また、マネージド評価だけではなく独自カスタマイズ評価や Ragas や NeMo などのサードパーティの評価フレームワークも統合することも可能です。

マネージド評価項目
マネージド評価では、次の項目に対して評価を行うことができます。

  • 回答拒否
    特定の入力に対して、LLM が回答を拒否したかどうか
  • 目標達成度
    ユーザーが意図した目的やタスクが、出力によって達成されたかどうか
  • 幻覚(Hallucination)
    与えられた事実に忠実で、誤情報や作り話を含まないか
  • 入力の感情
    ユーザーの入力が持つ感情的なトーン(例:ポジティブ/ネガティブ/中立)
  • 入力の毒性
    ユーザーの入力に有害な表現や攻撃的な内容が含まれていないか
  • 言語一致
    入力と出力が同じ言語で行われているか
  • 出力の感情
    LLM の応答が持つ感情的なトーン
  • 出力の毒性
    LLM が生成した出力に有害表現や差別的な内容が含まれていないか
  • プロンプトインジェクション検知
    入力がアプリケーションの挙動を意図的に乗っ取ろうとしていないか
  • ツール選択の正確性
    マルチツール環境などで、LLM が適切なツールを選んで利用したかどうか
  • トピック関連性
    ユーザーの入力が、アプリケーションやユースケースの主題と関連しているか

やってみた

実際に Datadog LLM Observability をセットアップして試してみます。
Python 製のシンプルなチャットボットアプリケーションを用意し、SDK の導入からトレース確認、評価設定、モニタリングまでを順を追ってやってみます。
どのように計測データが収集され、可視化できるのかを実際に確認していきます。

検証環境

  • LLM チャットボットアプリケーション:Python
  • LLM Observability SDK:ddtrace v3.14.0
  • LLM プロバイダとモデル:Amazon Bedrock (Claude Sonnet 4/Claude 3 Haiku/Nova Pro)
  • LLM フレームワーク:Boto3
  • 評価用LLM プロバイダー: Amazon Bedrock(Claude 3.5 Haiku)
  • 計測方法:自動インスツルメンテーション
  • 実行環境:EC2(Datadog エージェント導入済み)

1.自動インスツルメンテーションの設定

SDK をインストールして自動インスツルメンテーションを行います。

  1. SDK インストールします。
			
			pip install ddtrace

		
  1. トレーサーバージョンを確認します。
			
			pip show ddtrace

		
			
			Name: ddtrace
Version: 3.14.0
Summary: Datadog APM client library
Home-page:
Author:
Author-email: "Datadog, Inc." <dev@datadoghq.com>
License: LICENSE.BSD3
Location: /opt/LLMOBS/venv/lib/python3.12/site-packages
Requires: bytecode, envier, opentelemetry-api, protobuf, typing_extensions, wrapt
Required-by:

		
  1. フレームワークバージョンを確認します。
			
			pip show boto3

		
			
			Name: boto3
Version: 1.34.0
Summary: The AWS SDK for Python
Home-page: https://github.com/boto/boto3
Author: Amazon Web Services
Author-email:
License: Apache License 2.0
Location: /opt/LLMOBS/venv/lib/python3.12/site-packages
Requires: botocore, jmespath, s3transfer
Required-by:

		
  1. ddtrace-run コマンドでアプリケーションを起動させます。
    今回は Gunicorn を使って Python アプリを起動しているため、下記コマンドを指定して起動させてみます。
    なお、Datadog エージェントがアプリケーションと同一ホスト上で起動している場合はDD_API_KEYの指定は不要です。
			
			DD_SITE=datadoghq.com \
DD_LLMOBS_ENABLED=1 \
DD_LLMOBS_ML_APP=llm-chat-app \
DD_ENV=production \
DD_SERVICE=llm-chat-app \
ddtrace-run gunicorn -w 4 -b 0.0.0.0:8000 main:app

		
  1. LLM アプリケーションに対して入力を行ってみます。
    LLM-Chat-ApplicationPM

  2. 自動インスツルメンテーションによって LLM Observability のトレースを計測できているか確認します。
    正しくインスツルメンテーションされている場合、しばらくすると下記 URL にトレースデータが表示されます。
    https://app.datadoghq.com/llm/traces
    もし、表示されない場合は利用しているフレームワークに対応したサポートバージョンおよびトレーサーバージョンを利用しているか今一度確認してみましょう。
    LLM-Observability-Traces

2.LLM Observability コンソールを見てみる

どのような計測データを確認できるのか、Datadog コンソールから確認してみます。
Datadog コンソールメニュー AI Observability より「LLM Observability」を選択します。

オーバービュー

Overview タブではDD_LLMOBS_ML_APPに指定したアプリケーション名ごとにエラーレートやトークン使用率、呼び出し数のサマリーを確認することができます。
オーバービュー

トレース

Traces タブでは LLM アプリケーションのインタラクションごとにトレースが表示されます。
リクエストの実行時間などのパフォーマンスデータやコスト、トークン数などの詳細が確認できます。
トレース

アプリケーションパフォーマンスモニタリング(APM)と連携されているため、View in APM を選択するとスパンを確認することができます。
apm-trace

Trace タブでは次のようなクエリを行うこともできます。
実行時間、エラー、トークン数などを条件にフィルタすることができます。
クエリ例

  • 実行時間:@duration:>5s
  • エラー:@status:error
  • 入力トークン数:@trace.input_tokens:>10000

トレース検索

3.LLM Observability インテグレーションの設定

LLM Observability の評価において、Amazon Bedrock プロバイダーでは Claude 3.5 Haiku モデルを利用します。
モデルの有効化を行った上で、Datadog インテグレーションロールに対してモデルの呼び出しと Amazon Bedrock 関連メトリクスの収集に必要なポリシーを付与します。

  1. モデルの有効化
    US1 サイトで Amazon Bedrock プロバイダーを利用する場合、バージニア北部で Claude 3.5 Haiku モデルを有効化する必要があります。
    AWS マネージドコンソールからバージニア北部リージョンの Amazon Bedrock を選択します。
    ナビゲーションペインの「モデルアクセス」より、「モデルアクセスを変更」を選択します。
    Claude 3.5 Haiku にチェックを入れ、モデルアクセスのリクエストを行います。

モデルアクセスを管理-Amazon-Bedrock-us-east-1-09-16-2025_06_21_PM

  1. LLM Observability インテグレーション設定
    Datadog コンソールメニュー AI Observability より LLM Observability の「Settings」を選択します。
    メニューの「Integrations」より、Amazon Bedrock の「Connect」を選択します。
    bedrock1

Select the AWS Integraions で AWS アカウントを選択します。
※AWS インテグレーションが未セットアップの場合、先に「Add AWS Account」よりセットアップする必要があります。
Configure your AWS account integraion で下記の両方のトグルを有効化します。

  • Enable Resource Collection
  • Invoke models from Amazon Bedrock

bedrock2-1

Launch CloudFormation Template を選択します。
bedrock2-2

CloudFormation スタック起動に遷移しますので、既に作成されている DatadogIntegrationRole 名をパラメータに指定して、CloudFormation テンプレートを起動します。
CloudFormation-us-east-1-09-29-2025_12_59_PM

スタックのステータスが CREATE_COMPLETE となったことを確認します。
最後に「Get Started With Amazon Bedrock」を選択し、セットアップを完了させます。

  1. LLM Observability インテグレーションの確認
    再度、メニューの「Integrations」を選択します。
    Amazon Bedrock の箇所に AWS アカウントID と "1 installed integration" と表示されていることを確認します。
    bedrock3

4.評価項目の設定

メニューの「Evaluations」 より、「Create Evaluation」を選択します。
評価したい項目を選択します。
例では Input Sentiment(入力の感情)を設定します。
評価設定1

次のように設定を行い、「SAVE」を選択します。

  • Select LLM account
    Amazon Bedrock を選択し、リストから LLM Observability インテグレーション設定済みの AWS アカウント ID を選択します。
  • Filters and Sampling
    Evaluate On:Traces
  • Sampling Rate:100%

評価設定2

評価項目の Enabled Applications にアプリケーション名が表示されていれば設定は完了です。
評価設定3

5.評価結果を見てみる

評価項目を設定後、LLM アプリケーションに対して入力を行います。
Datadog コンソールメニュー AI Observability より LLM Observability の「Traces」を選択します。
トレースを選択し、詳細ページの「Evaluations」タブを選択します。
設定した項目に対する評価が表示されます。

  • Failure to Answer:Answered
  • Input Sentiment:Neutral
  • Output Sentiment:Positive
  • Prompt Injection:Not Found

トレースの評価確認

入力感情

まずは特に感情は込めず、落ち着いたトーンで質問してみます。
入力感情1

Input Sentiment は Neutral と評価されました。
入力感情2

次に、怒りのトーンで質問してみます。
入力感情3

Input Sentiment は Negative と評価されました。
入力感情4

プロンプトインジェクション検出

シンプルな命令を行ってみます。
プロンプトインジェクション1
Prompt Injection は Found と評価されました。
プロンプトインジェクション2

回答拒否

怒りの感情で返事を要求してみます。
回答拒否1

Failure to Answer は Failed to Answer と評価されました。
回答拒否2

6.モニタリングする

Datadog LLM Observability では収集されたメトリクスを利用してモニターを作成することがができます。
ここでは代表的な指標について、具体的にどのようにモニタリング設定するかを紹介します。
閾値条件などは運用要件やユースケースに合わせて調整してください。

レイテンシー

モデル API 呼び出しの応答時間を p95(全体の95%における最大値近辺)で監視します。
これは「直近5分間のリクエストの95%がこの時間以下で応答している」という指標で、ユーザー体験に密接に関わります。
遅延が増えると顧客満足度を下げるため、しきい値を超えたらアラートさせるのが有効です。
クエリ例

			
			llm-observability("@event_type:span @ml_app:llm-chat-app").rollup("pc95", "@duration").last("5m") > 10000000000

		

モニターLLMLetency

エラーカウント

モデル API 呼び出しでエラーが発生していないかを監視します。
エラーはアプリケーションやネットワーク、LLM プロバイダーなど多様な要因で発生するため、早期検知が重要です。
クエリ例

			
			llm-observability("@event_type:span @ml_app:llm-chat-app @status:error").rollup("count").last("5m") > 1

		

モニターLLMerror

セキュリティ

プロンプトインジェクションが検出された場合にアラートを上げます。
悪意ある入力でアプリケーションの動作を意図的に変えられるリスクを継続的にチェックできます。
クエリ例

			
			llm-observability("@event_type:span @ml_app:llm-chat-app").rollup("count").last("5m") > 10

		

モニターLLMPromtInjection

入力感情

ネガティブな入力が増えていないかを監視します。
コールセンターチャットやカスタマー対応など、顧客満足度の把握に応用できます。
クエリ例

			
			llm-observability("@event_type:span @ml_app:llm-chat-app @evaluations.input_sentiment:negative").rollup("count").last("10m") > 5

		

モニターLLMinputsentiment

トークン

トークン数はコストに直結するため、合計使用量を定常的に監視します。
想定以上のトークン消費がある場合はアプリケーション側のプロンプト設計を見直すきっかけになります。
クエリ例

			
			llm-observability("@event_type:span @ml_app:llm-chat-app").rollup("sum", "@metrics.total_tokens").last("1h") > 100000

		

モニターLLMtoken

AWS 側の動作を確認してみる

インテグレーションの設定によって付与されるポリシー

既存の AWS インテグレーションロールに対して、次のポリシーが付与されたことがわかります。

  • SecurityAudit(AWS マネージドポリシー)
  • DatadogIntegrationPolicyWithLLMObservability(インラインポリシー)
			
			{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Action": [
				"bedrock:InvokeModel"
			],
			"Resource": "*",
			"Effect": "Allow",
			"Sid": "InvokeModel"
		}
	]
}

		

DatadogIntegrationRole-IAM-Global-09-28-2025_02_23_PM

評価のモデル呼び出し

評価に利用される Datadog インテグレーションロールによるモデルの呼び出しは CloudTrail を利用して確認できます。
バージニア北部リージョンにて、イベント名「InvokeModel」で検索します。
イベント履歴-CloudTrail-us-east-1-09-29-2025_01_49_PM

ロール「DatadogIntegraionRole」がセッション名「DatadogAWSIntegraion」で AssumeRole して InvokeModel を実行していることがわかります。
イベントの詳細-CloudTrail-09-29-2025_01_51_PMaaaaa

モデルが有効化されていない場合、下記のようなエラーが発生して、評価は失敗します。

  • errorCode:AccessDenied
  • errorMessage:You don't have access to the model with the specified model ID.

バージニアinvokemodel-png-1500×1040--09-29-2025_01_52_PM

モデル呼び出しのログ

モデル呼び出しのログ記録を有効化すると、LLM に実際にどのようなプロンプトが与えられ、どのような推論や評価が行われているかを確認できます。
評価項目の裏側で LLM がどう判断しているのかがわかります。
この例では感情分析 (Sentiment Analysis)」 を実行するようにモデルに課題が与えられています。
評価時には出力が必ずいずれか1つのカテゴリに分類されます。

  • Negative: フラストレーション・怒り・失望などを表す
  • Positive: 喜び・感謝・満足などを表す
  • Neutral: 事実確認や情報要求など感情表現がないケース。混乱や質問であっても怒りが含まれない場合は Neutral
    評価時の推論ログ

まとめ

今回は Datadog LLM Observability を実際に触って、基本的なセットアップから計測・評価までを試してみました。
自動インスツルメンテーションで簡単にトレースが取得でき、思った以上に導入はスムーズでした。
評価機能を通じて感情分析やプロンプトインジェクション検出など、LLM 特有の観点を確認できたのは新鮮でした。
入門段階としては十分に有用性を感じられたので、本記事がこれから触れてみる方の参考になれば幸いです。

参考

https://docs.datadoghq.com/llm_observability/quickstart/?tab=python
https://docs.datadoghq.com/llm_observability/instrumentation/sdk
https://docs.datadoghq.com/llm_observability/evaluations/managed_evaluations/?tab=openai#edit-existing-evaluations
https://docs.datadoghq.com/llm_observability/evaluations/managed_evaluations/?tab=amazonbedrock

この記事をシェアする

FacebookHatena blogX

関連記事