Datadog で Azure OpenAI を使ったLLMアプリの監視

# はじめに
本ブログ記事は、Datadog公式ドキュメントの Azure OpenAI を日本語化したものです。公式では日本語化されていないので、こちらで日本語化しました。
尚こちらの記事は、筆者が独自で翻訳したものであり、Datadog公式のものではないため、内容による損害等が発生した場合についてDatadogは何ら責任を負うものではありません。

# 概要
Azure OpenAI を使用して、チャットボットやデータ抽出ツールなどの LLM を利用したアプリケーションを監視し、トラブルシューティングを行う方法を解説します。

LLM アプリケーションを構築する場合は、LLM Observability を使用して問題の根本原因を調査し、運用パフォーマンスを監視し、LLM アプリケーションの品質、プライバシー、安全性を評価できるようにしておく必要があります。

トレースを調査する方法のについては、[LLM Observability トレース ビューのビデオ](https://imgix.datadoghq.com/video/products/llm-observability/expedite-troubleshooting.mp4?fm=webm&fit=max&_gl=1*1sn0xa9*_gcl_aw*R0NMLjE3MzgxMjgwMDMuQ2owS0NRaUExcDI4QmhDQkFSSXNBRFA5SHJPY21xYk5iaDdBUnFFekM4MUZONC1LZGlvcVQ1ODBUMUlrS2k4a0JKX2c4TkloUjM1R0N1TWFBbk5DRUFMd193Y0I.*_gcl_au*MTYzNjc1NzY1MC4xNzM2OTg3NjM0LjE5NzY2MTUzMzAuMTc0MjU0MDUxMi4xNzQyNTQwNTEy*_ga*MTk2MzE3MDg4Ny4xNzQyMjgzNTg2*_ga_KN80RDFSQK*MTc0MzAwOTkyOC41LjEuMTc0MzAxMDE1OS4wLjAuNzYwNDI1MTk5*_fplc*T2UlMkY4RnVSd21Ia2VMYjRmZlFaTHVjVUp6RVhWbUlFRk1MJTJGMjVWdzRpYTVpQlY2WExweUNWSkpMV3kxbTE5N2tEY0glMkZZbGklMkZnJTJCVWxpZkYyQiUyQnhVOVZUeXZ0RE5aTGFUSTdsMlI0ODYlMkZaSDVBUEZyU0VOeDN4OEp2SVU3cHclM0QlM0Q.)が参考になります。

Azure OpenAI を使用すると、OpenAI のモデル ライブラリを使用して、Copilotおよび生成 AI アプリケーションを開発できます。Datadog のインテグレーションを使用して、Azure OpenAI API とデプロイメントのパフォーマンスと使用状況を追跡できるようにしましょう。

# 設定
## LLM の可観測性: Azure OpenAI を使用して LLM アプリケーションをエンドツーエンドで可視化
LLM Observability はさまざまな環境で有効にできます。シナリオに応じて適切な設定に従ってください。

### Pythonのインストール
#### Datadog Agent がインストールされていない場合:
1. `ddtrace` パッケージをインストールします :
```
$ pip install ddtrace
```

2. 次のコマンドでアプリケーションを起動し、エージェントレス モードを有効にします。
```
$ DD_SITE=<YOUR_DATADOG_SITE> DD_API_KEY=<YOUR_API_KEY> DD_LLMOBS_ENABLED=1 DD_LLMOBS_AGENTLESS_ENABLED=1 DD_LLMOBS_ML_APP=<YOUR_ML_APP_NAME> ddtrace-run python <YOUR_APP>.py
```

#### Datadog Agent がすでにインストールされている場合:
1. エージェントが実行されており、APM と StatsD が有効になっていることを確認します。たとえば、Docker で次のコマンドを使用します。
```
$ docker run -d \
  --cgroupns host \
  --pid host \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v /proc/:/host/proc/:ro \
  -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
  -e DD_API_KEY=<DATADOG_API_KEY> \
  -p 127.0.0.1:8126:8126/tcp \
  -p 127.0.0.1:8125:8125/udp \
  -e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \
  -e DD_APM_ENABLED=true \
  gcr.io/datadoghq/agent:latest
```

2. まだ `ddtrace` パッケージをインストールしていない場合は、インストールしてください。
```
$ pip install ddtrace
```

3. トレースを自動的に有効にする `ddtrace-run` コマンドを使用してアプリケーションを起動します。
```
$ DD_SITE=<YOUR_DATADOG_SITE> DD_API_KEY=<YOUR_API_KEY> DD_LLMOBS_ENABLED=1 DD_LLMOBS_ML_APP=<YOUR_ML_APP_NAME> ddtrace-run python <YOUR_APP>.py
```

注）エージェントがカスタム ホストまたはポートで実行されている場合は、それに応じて `DD_AGENT_HOST` と `DD_TRACE_AGENT_PORT` を設定します。

#### サーバーレス環境 (Azure Functions) で LLM Observability を実行している場合:
次の環境変数を設定して、LLM の監視機能を有効にします。
```
$ DD_SITE=<YOUR_DATADOG_SITE> DD_API_KEY=<YOUR_API_KEY> DD_LLMOBS_ENABLED=1 DD_LLMOBS_ML_APP=<YOUR_ML_APP_NAME>
```

注）サーバーレス環境では、Azure function の実行が終了すると、Datadog は自動的にスパンをフラッシュします。

#### 自動 Azure OpenAI トレース
LLM Observability が構成されている場合、Azure OpenAI 統合は自動的に有効になります。これにより、Azure OpenAI 呼び出しの待機時間、エラー、入力および出力メッセージ、トークンの使用状況がキャプチャされます。

同期および非同期の Azure OpenAI 操作の両方について、次のメソッドがトレースされます。

- `AzureOpenAI().completions.create()`
- `AsyncAzureOpenAI().completions.create()`
- `AzureOpenAI().chat.completions.create()`
- `AsyncAzureOpenAI().chat.completions.create()`

この方法の場合、追加の設定は必要ありません。

#### 検証してみる
アプリケーション ログでスパンの作成が成功したかどうかと、LLM Observability がスパンを適切にキャプチャしていることを確認しましょう。次の `ddtrace` コマンドを実行して、インテグレーションのステータスを確認することができます。

```
$ ddtrace-run --info
```

次のメッセージがあればセットアップは成功です。
```
$ Agent error: None
```

#### デバッグ
セットアップ中に問題が発生した場合は、次の `--debug` フラグを渡してデバッグ ログを有効にします。
```
$ ddtrace-run --debug
```

このコマンドを実行すると、Azure OpenAI トレースの問題を含む、データ転送または計測に関連するエラーが表示されます。

## インフラストラクチャ監視: Azure OpenAI リソースのメトリックと可視性
[Microsoft Azure インテグレーション](https://docs.datadoghq.com/integrations/azure/) を設定してください。その他のインストール等は不要です。

# 収集されるデータ
## メトリクス
|メトリクス値|内容|
|:--|:--|
|azure.cognitiveservices_accounts.active_tokens <br>(ゲージ)|一定期間の合計トークン数からキャッシュされたトークン数を引いた値。<br>PTU および PTU 管理のデプロイメントに適用されます。このメトリックを使用して、PTU の TPS または TPM ベースの使用率を把握し、シナリオのターゲット TPS または TPM のベンチマークと比較します。|
|azure.cognitiveservices_accounts.azure_open_ai_requests<br>(カウント)|一定期間内に Azure OpenAI API に対して行われた呼び出しの数。<br>PTU、PTU 管理、および従量課金制のデプロイメントに適用されます。|
|azure.cognitiveservices_accounts.blocked_volume<br>(カウント)|一定期間にわたって Azure OpenAI API に対して実行され、適用されたコンテンツ フィルターによって拒否された呼び出しの数。<br>フィルターを追加したり、ModelDeploymentName、ModelName、および TextType のディメンションで分割を適用したりできます。|
|azure.cognitiveservices_accounts.generated_completion_tokens<br>(カウント)|OpenAI モデルから生成された完了トークンの数。|
|azure.cognitiveservices_accounts.processed_fine_tuned_training_hours<br>(カウント)|OpenAI の微調整モデルで処理されたトレーニング時間の数。|
|azure.cognitiveservices_accounts.harmful_volume_detected<br>(カウント)|一定期間に適用されたコンテンツ フィルターによって有害 (ブロック モデルと注釈モードの両方) として検出された、Azure OpenAI API への呼び出しの数。|
|azure.cognitiveservices_accounts.processed_prompt_tokens<br>(カウント)|OpenAI モデルで処理されたプロンプト トークンの数。|
|azure.cognitiveservices_accounts.processed_inference_tokens<br>(カウント)|OpenAI モデルで処理された推論トークンの数。|
|azure.cognitiveservices_accounts.prompt_token_cache_match_rate<br>(ゲージ)|キャッシュにヒットしたプロンプトトークンの割合。<br>パーセントで表示されます。|
|azure.cognitiveservices_accounts.provisioned_managed_utilization<br>(ゲージ)|プロビジョニング管理されたデプロイメントの使用率(%)。<br>(消費された PTU 数 / デプロイされた PTU 数) x 100 として計算されます。使用率が 100% 以上になると、呼び出しが制限され、エラー コード 429 が返されます。<br>パーセントで表示されます。|
|azure.cognitiveservices_accounts.provisioned_managed_utilization_v2<br>(ゲージ)|プロビジョニング管理されたデプロイメントの使用率(%)。<br>(消費された PTU 数 / デプロイされた PTU 数) x 100 として計算されます。使用率が 100% 以上になると、呼び出しが制限され、エラー コード 429 が返されます。<br>パーセントで表示されます。|
|azure.cognitiveservices_accounts.time_to_response<br>(ゲージ)|ストリーミング リクエストの推奨レイテンシ (応答性) 測定。<br>PTU および PTU 管理のデプロイメントに適用されます。API ゲートウェイによって測定され、ユーザーがプロンプトを送信してから最初の応答が表示されるまでの時間として計算されます。<br>ミリ秒単位で表示されます。|
|azure.cognitiveservices_accounts.total_volume_sent_for_safety_check<br>(カウント)|一定期間にわたって適用されたコンテンツ フィルターによって検出された、Azure OpenAI API への呼び出しの数。|

※ プロビジョニング管理されたデプロイメントの使用率については、バージョン無印とバージョン２があるようです。 [Microsoft Azure Monitorの公式ドキュメント]()を確認しましたが、使い方の違いまでは分かりませんでした。おそらく単純にバージョンの違いなのでしょう。

## サービスチェック
Azure OpenAI 統合にはサービスチェックは含まれません。

## イベント
Azure OpenAI 統合にはイベントは含まれません。

# まとめ
Datadog で、Azure OpenAIの様々なメトリクスを収集できることが分かったと思います。これを活用して、LLMアプリを効率的に監視してみてください！