APIM経由のAOAIでトークン使用量の可視化:emit-token-metric-policy
1. この記事の範囲
Azure OpenAIとAzure API Management (APIM) を組み合わせた場合の監視方法には、いくつかのアプローチがあります。この記事では、その中でも「emit-token-metric-policy(トークンメトリックの出力)」を使用し、OpenAIの利用状況を可視化する方法について紹介します。
2. 内容
2-1. Azure OpenAIをAPI経由で利用する際の監視
Azure OpenAIをAPI経由で利用する場合、使用トークン量や課金額などが把握しにくいという課題があります。特APIMを経由した場合、APIM標準のメトリクスではトークン数が確認できず、利用実態やコストの把握が難しくなります。
なぜAPIM経由だと見えにくいのか?
- APIM標準メトリクスでは「API のリクエスト回数」や「成功/失敗件数」は取得できますが、OpenAIの応答内容(トークン数)は記録されません。
- そのため、API 呼び出しが成功しても、どの程度のトークンが消費されたかを確認することができません。
どうやってカスタムメトリクスを仕込むか?
-
emit-token-metric-policy
を活用すると、OpenAIの応答に含まれるusage.total_tokens
やprompt_tokens
、completion_tokens
を Application InsightsのcustomMetricsテーブルに送信できます。 - 任意のディメンション(ユーザーIDやステータスコードなど)を付与することで、柔軟な分析が可能となります。
2-2. 監視方法
2-2-1. emit-token-metric-policyの利用
emit-token-metric-policyとは?
Azure API Management (APIM) のポリシー拡張機能であり、OpenAI の応答からトークン使用量などを抽出し、Application Insightsにメトリクスとして送信することができます。
このポリシーは、OpenAIのレスポンスボディを解析し、以下の情報をメトリクスとして送信します:
- usage.prompt_tokens:
ユーザーが送信したプロンプト(入力)に使用されたトークン数 - usage.completion_tokens:
OpenAIから返された応答(出力)に使用されたトークン数 - usage.total_tokens:
プロンプト+応答の合計トークン数(課金対象)
送信先は Azure Monitorのカスタムメトリクス(customMetrics
テーブル)です。
emit-token-metric-policy設定方法
以下は典型的な Inbound Policy 設定例です:
<inbound>
<base />
<azure-openai-emit-token-metric namespace="openai">
<dimension name="User" value="@(context.Request.Headers.GetValueOrDefault("x-user-id", "N/A"))" />
<dimension name="Status" value="@(context.Response.StatusCode.ToString())" />
<dimension name="API" value="@(context.Api.Id)" />
</azure-openai-emit-token-metric>
<set-backend-service id="apim-generated-policy" backend-id="your-openai-backend-id" />
</inbound>
このポリシー定義の意味は以下の通りです:
-
<azure-openai-emit-token-metric>
:トークンメトリクス出力用のポリシー-
namespace
:カスタムメトリクスの名前空間(例:openai
) -
<dimension>
:追加で付与されるディメンション(例:ユーザーID、ステータスコード、API ID)
-
-
<set-backend-service>
:OpenAIエンドポイントへのバックエンド接続先を指定
APIMポリシー設定時のポイント
- このポリシーはOperationレベルのInbound Policyにのみ適用可能です。
- customMetricsに記録される名前は以下の通り:
Prompt Tokens
Completion Tokens
Total Tokens
- 任意のディメンション(User、Status、API など)を使って集計可能です。
- JSONレスポンスを返すOpenAI API(chat/completions、text-davinci 等)でのみ使用可能です。
2-2-2. Application Insights側での確認方法
Application Insightsの有効化
APIMインスタンス内でApplication Insightsを有効化します。これにより、対応するApplication Insightsインスタンスを指すロガーが自動的に構成されます。
メトリックブレードでの確認
- Azureポータル > APIMリソース > メトリックにアクセス
- 「メトリック名前空間」のドロップダウンから、emit-token-metric-policyで設定した
namespace
(例:openai
)を選択 - カスタムメトリクス(
Prompt Tokens
,Completion Tokens
,Total Tokens
)が選択可能になります
customMetricsテーブルの構成
-
customMetrics
テーブルには、emit-token-metric-policyにより出力されたトークンメトリクスが含まれます。 -
customDimensions
フィールドには、ポリシーで指定したディメンション(例:User, Status, API)が格納されており、フィルタや集計に活用できます。 - Azureポータル > Application Insights > Logsからクエリ実行可能。
3. まとめ
Azure OpenAIをAzure API Management(APIM)経由で利用する場合、標準のメトリクス機能だけでは「どのくらい使われているか」「どれくらい課金されるか」といった実態が把握しづらいという課題があります。
そのような課題に対して、emit-token-metric-policy
を活用することで、以下のようなトークンベースの可視化が実現できます:
- Prompt / Completion / Total トークン数の収集と時系列での可視化
- ユーザーやAPI単位でのディメンション分析
- Application Insightsへの統合による柔軟なクエリと監視
- Azure Monitor / Power BI 等との連携によるダッシュボード構築
これにより、利用状況の可視化だけでなく、コスト予測や部門別の利用分析、アラート設定など、より実践的な管理・運用が可能になります。
今後、OpenAIの社内利用が拡大していく中で、トークン消費の「見える化」は運用・予算管理において重要になるでしょう。本記事の内容がその一助になれば幸いです。
Discussion