DatadogでOpenAIを活用したアプリケーションを監視する

## はじめに
本文書では、OpenAIを活用したアプリケーションをDatadogで監視する方法と実際の見え方について記載します。
実際に手元で検証できるよう、[サンプルアプリケーション(Python)](https://github.com/taka2noda/Datadog-llm-ops-sample-taka2/tree/main/datadog-integration-openai-python)と[コマンドレベルの手順](https://github.com/taka2noda/Datadog-llm-ops-sample-taka2/blob/main/datadog-integration-openai-python/How_to_use.md)
も用意したため、合わせて活用ください。


<設定後の見え方>
![Screenshot 2024-03-07 at 23.52.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/c9e17517-e211-5f08-b415-6939ca63744a.png)

## 活用シナリオ
- OpenAIを活用したアプリケーションをサービスとして提供しており、パフォーマンス監視が必要
- OpenAIアカウントを複数人または複数チームで共用しており、API単位やアプリケーション単位でOpenAIの利用状況を把握したい
- OpenAIを活用したアプリケーション開発や検証において、トークンの利用数やパフォーマンスを簡単に確認したい
- プロンプトの入出力に機密情報など特定の文字列が入力されていないかを監視したい

## 提供機能
Datadogが提供するOpenAIの監視は、以下の2種類です。
1. OpenAIとのアカウント連携によるAPI Usageのメトリックス監視
1. OpenAIのAPIを呼び出すアプリケーションのトレースとログ監視

## 設定方法
1. [OpenAIとのアカウント連携](https://docs.datadoghq.com/integrations/openai/?tab=apikey)
OpenAIのAPI KeyをDatadogに連携することで、Datadog上でOpenAIのUsageを確認できます。

1. [OpenAIのAPIを呼び出すアプリケーションのトレースとログ監視](https://docs.datadoghq.com/integrations/openai/?tab=python)
以下のステップで、アプリケーションに対してAPMとログによる監視が可能となります。対応言語はPythonとNode.jsです。
2-1. Datadog Agentをインストール
2-2. AgentのStatsDパラメーターを有効化
2-3. トレーサーをインストール
2-4. アプリケーションの実行時の引数にDatadogのTracerと環境変数を引き渡す

## サンプルアプリケーション
[サンプルアプリケーション](https://github.com/taka2noda/Datadog-llm-ops-sample-taka2/tree/main/datadog-integration-openai-python)で実際に手元で確認できます。

こちらは、[OpenAIが提供しているサンプルアプリケーション](https://github.com/openai/openai-python/tree/main/examples)をベースとし、利用するmodelだけ変更して安価に実行できるアプリケーションと、エラーを出すアプリケーションを配置したものです。

設定および実行方法の詳細については[`How_to_use.md`](https://github.com/taka2noda/Datadog-llm-ops-sample-taka2/blob/main/datadog-integration-openai-python/How_to_use.md)を参照ください。


DatadogのAPI KEYの取得方法は[こちらのガイド](https://docs.datadoghq.com/ja/account_management/api-app-keys/#api-キーまたはクライアントトークンを追加する)を参照ください。

## 実際の見え方
1. API Keyの連携のみでDatadog上でOpenAI APIのUsageを見ることが可能となります。
以下のようなDatadogが提供するダッシュボードで可視化されます。
連携されたメトリックスに対してアラートを定義し、監視をすることも可能です。
![Screenshot 2024-03-07 at 0.09.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/5c142945-1143-61bf-0214-788c9c48ae20.png)

1. アプリケーションのトレースを行うと以下が可能となります。
*以下のスクリーンショットは全てあらかじめ提供されているUIであり、データ連携するとすぐにこの表示で見れます。
2-1.OpenAI APIのレスポンス
![Screenshot 2024-03-07 at 23.54.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/efb07075-ece6-6ecb-3132-7714201ca251.png)
2-2.API Key単位のMetrics
![Screenshot 2024-03-07 at 23.52.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/10b1d9fe-4263-59a7-cdbd-4c5adfe43651.png)
2-3.アプリケーションのパフォーマンス
![Screenshot 2024-03-07 at 23.52.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/bccff9b1-aa64-5690-c48e-2ffe68a474a0.png)
2-4.自動でタグやメタ情報が付与されたログ
![Screenshot 2024-03-06 at 22.10.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/34e14ec6-9e01-ab91-23a3-4cc60c086cec.png)
2-5.自動でトークンの数などのメタ情報が付与されたトレース
![Screenshot 2024-03-07 at 0.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/3c048ec8-1f17-c791-40b1-b6ffdc28ad4f.png)

* Datadogの各種テレメトリーを自動で相関付けする機能により、トレースとメトリックス、ログ、プロセスなどの情報も、タグの切り替えで確認できます
メトリックスタブ
![Screenshot 2024-03-07 at 23.27.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/94413bec-ed02-4651-1f51-88590aa276a5.png)
ログタブ
![Screenshot 2024-03-07 at 23.27.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/bcc3c31e-bc4f-d1ce-05d8-39653d7ea51d.png)
プロセスタブ
![Screenshot 2024-03-07 at 23.27.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727432/cb4ced0b-1044-53de-2baa-948657d8ed52.png)

## まとめ
比較的簡単な設定でOpenAIのAPIを呼び出すアプリケーションのパフォーマンスを詳細に監視できることを実感いただけたら嬉しいです。
OpenAIを活用したアプリケーションの開発、運用の助けになれば幸いです。

## 参考

https://www.datadoghq.com/blog/monitor-openai-with-datadog