Datadog LLM Observability に入門してみた
こんにちは。テクニカルサポートチームの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 をインストールして自動インスツルメンテーションを行います。
- SDK インストールします。
pip install ddtrace
- トレーサーバージョンを確認します。
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:
- フレームワークバージョンを確認します。
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:
- 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
-
LLM アプリケーションに対して入力を行ってみます。
-
自動インスツルメンテーションによって LLM Observability のトレースを計測できているか確認します。
正しくインスツルメンテーションされている場合、しばらくすると下記 URL にトレースデータが表示されます。
https://app.datadoghq.com/llm/traces
もし、表示されない場合は利用しているフレームワークに対応したサポートバージョンおよびトレーサーバージョンを利用しているか今一度確認してみましょう。
2.LLM Observability コンソールを見てみる
どのような計測データを確認できるのか、Datadog コンソールから確認してみます。
Datadog コンソールメニュー AI Observability より「LLM Observability」を選択します。
オーバービュー
Overview タブではDD_LLMOBS_ML_APP
に指定したアプリケーション名ごとにエラーレートやトークン使用率、呼び出し数のサマリーを確認することができます。
トレース
Traces タブでは LLM アプリケーションのインタラクションごとにトレースが表示されます。
リクエストの実行時間などのパフォーマンスデータやコスト、トークン数などの詳細が確認できます。
アプリケーションパフォーマンスモニタリング(APM)と連携されているため、View in APM を選択するとスパンを確認することができます。
Trace タブでは次のようなクエリを行うこともできます。
実行時間、エラー、トークン数などを条件にフィルタすることができます。
クエリ例
- 実行時間:
@duration:>5s
- エラー:
@status:error
- 入力トークン数:
@trace.input_tokens:>10000
3.LLM Observability インテグレーションの設定
LLM Observability の評価において、Amazon Bedrock プロバイダーでは Claude 3.5 Haiku モデルを利用します。
モデルの有効化を行った上で、Datadog インテグレーションロールに対してモデルの呼び出しと Amazon Bedrock 関連メトリクスの収集に必要なポリシーを付与します。
- モデルの有効化
US1 サイトで Amazon Bedrock プロバイダーを利用する場合、バージニア北部で Claude 3.5 Haiku モデルを有効化する必要があります。
AWS マネージドコンソールからバージニア北部リージョンの Amazon Bedrock を選択します。
ナビゲーションペインの「モデルアクセス」より、「モデルアクセスを変更」を選択します。
Claude 3.5 Haiku にチェックを入れ、モデルアクセスのリクエストを行います。
- LLM Observability インテグレーション設定
Datadog コンソールメニュー AI Observability より LLM Observability の「Settings」を選択します。
メニューの「Integrations」より、Amazon Bedrock の「Connect」を選択します。
Select the AWS Integraions で AWS アカウントを選択します。
※AWS インテグレーションが未セットアップの場合、先に「Add AWS Account」よりセットアップする必要があります。
Configure your AWS account integraion で下記の両方のトグルを有効化します。
- Enable Resource Collection
- Invoke models from Amazon Bedrock
Launch CloudFormation Template を選択します。
CloudFormation スタック起動に遷移しますので、既に作成されている DatadogIntegrationRole 名をパラメータに指定して、CloudFormation テンプレートを起動します。
スタックのステータスが CREATE_COMPLETE となったことを確認します。
最後に「Get Started With Amazon Bedrock」を選択し、セットアップを完了させます。
- LLM Observability インテグレーションの確認
再度、メニューの「Integrations」を選択します。
Amazon Bedrock の箇所に AWS アカウントID と "1 installed integration" と表示されていることを確認します。
4.評価項目の設定
メニューの「Evaluations」 より、「Create Evaluation」を選択します。
評価したい項目を選択します。
例では Input Sentiment(入力の感情)を設定します。
次のように設定を行い、「SAVE」を選択します。
- Select LLM account
Amazon Bedrock を選択し、リストから LLM Observability インテグレーション設定済みの AWS アカウント ID を選択します。 - Filters and Sampling
Evaluate On:Traces - Sampling Rate:100%
評価項目の Enabled Applications にアプリケーション名が表示されていれば設定は完了です。
5.評価結果を見てみる
評価項目を設定後、LLM アプリケーションに対して入力を行います。
Datadog コンソールメニュー AI Observability より LLM Observability の「Traces」を選択します。
トレースを選択し、詳細ページの「Evaluations」タブを選択します。
設定した項目に対する評価が表示されます。
- Failure to Answer:Answered
- Input Sentiment:Neutral
- Output Sentiment:Positive
- Prompt Injection:Not Found
入力感情
まずは特に感情は込めず、落ち着いたトーンで質問してみます。
Input Sentiment は Neutral と評価されました。
次に、怒りのトーンで質問してみます。
Input Sentiment は Negative と評価されました。
プロンプトインジェクション検出
シンプルな命令を行ってみます。
Prompt Injection は Found と評価されました。
回答拒否
怒りの感情で返事を要求してみます。
Failure to Answer は Failed to Answer と評価されました。
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
エラーカウント
モデル API 呼び出しでエラーが発生していないかを監視します。
エラーはアプリケーションやネットワーク、LLM プロバイダーなど多様な要因で発生するため、早期検知が重要です。
クエリ例
llm-observability("@event_type:span @ml_app:llm-chat-app @status:error").rollup("count").last("5m") > 1
セキュリティ
プロンプトインジェクションが検出された場合にアラートを上げます。
悪意ある入力でアプリケーションの動作を意図的に変えられるリスクを継続的にチェックできます。
クエリ例
llm-observability("@event_type:span @ml_app:llm-chat-app").rollup("count").last("5m") > 10
入力感情
ネガティブな入力が増えていないかを監視します。
コールセンターチャットやカスタマー対応など、顧客満足度の把握に応用できます。
クエリ例
llm-observability("@event_type:span @ml_app:llm-chat-app @evaluations.input_sentiment:negative").rollup("count").last("10m") > 5
トークン
トークン数はコストに直結するため、合計使用量を定常的に監視します。
想定以上のトークン消費がある場合はアプリケーション側のプロンプト設計を見直すきっかけになります。
クエリ例
llm-observability("@event_type:span @ml_app:llm-chat-app").rollup("sum", "@metrics.total_tokens").last("1h") > 100000
AWS 側の動作を確認してみる
インテグレーションの設定によって付与されるポリシー
既存の AWS インテグレーションロールに対して、次のポリシーが付与されたことがわかります。
- SecurityAudit(AWS マネージドポリシー)
- DatadogIntegrationPolicyWithLLMObservability(インラインポリシー)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"bedrock:InvokeModel"
],
"Resource": "*",
"Effect": "Allow",
"Sid": "InvokeModel"
}
]
}
評価のモデル呼び出し
評価に利用される Datadog インテグレーションロールによるモデルの呼び出しは CloudTrail を利用して確認できます。
バージニア北部リージョンにて、イベント名「InvokeModel」で検索します。
ロール「DatadogIntegraionRole」がセッション名「DatadogAWSIntegraion」で AssumeRole して InvokeModel を実行していることがわかります。
モデルが有効化されていない場合、下記のようなエラーが発生して、評価は失敗します。
- errorCode:AccessDenied
- errorMessage:You don't have access to the model with the specified model ID.
モデル呼び出しのログ
モデル呼び出しのログ記録を有効化すると、LLM に実際にどのようなプロンプトが与えられ、どのような推論や評価が行われているかを確認できます。
評価項目の裏側で LLM がどう判断しているのかがわかります。
この例では感情分析 (Sentiment Analysis)」 を実行するようにモデルに課題が与えられています。
評価時には出力が必ずいずれか1つのカテゴリに分類されます。
- Negative: フラストレーション・怒り・失望などを表す
- Positive: 喜び・感謝・満足などを表す
- Neutral: 事実確認や情報要求など感情表現がないケース。混乱や質問であっても怒りが含まれない場合は Neutral
まとめ
今回は Datadog LLM Observability を実際に触って、基本的なセットアップから計測・評価までを試してみました。
自動インスツルメンテーションで簡単にトレースが取得でき、思った以上に導入はスムーズでした。
評価機能を通じて感情分析やプロンプトインジェクション検出など、LLM 特有の観点を確認できたのは新鮮でした。
入門段階としては十分に有用性を感じられたので、本記事がこれから触れてみる方の参考になれば幸いです。
参考