Azure SDKのGenAI監視更新:マルチエージェント向けSpan/Log Processor追加の影響と確認点

Azure SDK documentation update: Add the span and log record processors for multi-agent GENAI systemsは、マルチエージェント型の生成AIシステムで「どのメインエージェントに紐づく処理か」をトレースとログに持たせやすくする更新です。結論から言うと、すべてのAzure SDK利用者がすぐにコードを変更する必要はありません。主な対象は、Pythonの azure-monitor-opentelemetry を使ってAzure Monitor/Application InsightsへGenAIアプリのテレメトリを送っているチームです。

今回の変更は、Azure SDK for PythonリポジトリのPR #46703で確認できる内容で、azure-monitor-opentelemetry の 1.8.8 (Unreleased) にGenAI main-agent attribution processorを登録する変更が追加されています。PR上ではDraft扱いのため、実運用では「リリース済みパッケージに入ったか」「既存のSpanProcessorやLogRecordProcessorと競合しないか」を確認してから適用するのが安全です。(GitHub)

目次

Azure SDK documentation updateの要点

今回の更新は、Azure SDK for Python内のAzure Monitor OpenTelemetry Distroに関する変更です。PR #46703では、トレース設定時に _GenAIMainAgentSpanProcessor()、ログ設定時に _GenAIMainAgentLogRecordProcessor() を登録する差分が追加されています。どちらも「最初に登録する」コメント付きで追加されており、既存のカスタムプロセッサより前に動かす意図が読み取れます。(GitHub)

確認項目内容
対象パッケージazure-monitor-opentelemetry
対象言語Python
変更の目的マルチエージェントGenAIシステムでメインエージェント情報をspan/logへ伝播しやすくする
主な追加処理SpanProcessorとLogRecordProcessorの自動登録
リリース状態1.8.8 (Unreleased) のCHANGELOGに追加
破壊的変更PRチェックリスト上は「breaking changesなし」。ただしDraft/未リリース状態では最終判断しない

ポイントは、この更新が「新しいAzureサービスの追加」ではなく、GenAIアプリの観測性を高めるためのテレメトリ処理の追加であることです。アプリの業務ロジックを変えるものではありませんが、Azure Monitor上でのトレース分析、ログ検索、障害調査のやり方には影響します。

何が変わるのか

今回のPRでは、CHANGELOG.md に「multi-agent GenAI systemsで microsoft.gen_ai.main_agent.* 属性を自動伝播するため、GenAI main-agent attribution processorsを登録する」という内容が追加されています。さらに _configure.py では、Exporter側からGenAI用のSpanProcessorとLogRecordProcessorをimportし、tracing/loggingのセットアップ時に登録する変更が入っています。(GitHub)

実務的には、次のような変化として理解すると分かりやすいです。

観点変更前に起きやすいこと変更後に期待されること
トレース分析子エージェントやツール実行のspanだけを見ると、どの親エージェント起点か分かりにくいmicrosoft.gen_ai.main_agent.* 属性により、メインエージェント単位で追跡しやすくなる
ログ分析ログとspanの関連はあっても、ログ側にメインエージェント情報がない場合がある現在のspanからログレコードへメインエージェント属性をコピーしやすくなる
障害調査「どのエージェントが遅いのか」「どの会話で失敗したのか」を横断的に探しにくいエージェント名、エージェントID、会話IDを軸に調査しやすくなる
カスタム処理独自Processorで属性付与・削除をしている場合、順序により結果が変わる既存Processorが新しい属性を扱う可能性が出るため、設定確認が必要

関連するExporter側のPR #46700では、microsoft.gen_ai.main_agent.name、microsoft.gen_ai.main_agent.id、microsoft.gen_ai.main_agent.version、microsoft.gen_ai.main_agent.conversation_id といった属性のマッピングが追加されています。親spanの microsoft.gen_ai.main_agent.* を子spanへ引き継ぐだけでなく、必要に応じて gen_ai.agent.* や gen_ai.conversation.id からのフォールバックも扱う構成です。(GitHub)

なぜマルチエージェントGenAIで重要なのか

マルチエージェント型のGenAIアプリでは、1つのユーザー依頼が複数の処理に分岐します。たとえば、問い合わせ対応AIであれば、受付エージェント、分類エージェント、検索エージェント、回答生成エージェント、確認エージェントが順番または並列で動くことがあります。

この場合、従来のWebアプリのように「HTTPリクエスト1件=処理1件」と見なすだけでは不十分です。障害調査では、次のような問いに答える必要があります。

調査したいこと必要になる情報
回答品質が落ちた原因はどこかどのメインエージェント配下で失敗したか
レイテンシが急増した原因はどこかどの子エージェント、ツール、検索処理が遅いか
特定ユーザーの会話だけ失敗したかconversation IDやthread IDに相当する属性
コスト増の原因はどこかどのエージェントがモデル呼び出しを増やしているか
ログとトレースを突き合わせたいspan属性とlog属性の一貫性

OpenTelemetryのGenAI semantic conventionsでも、gen_ai.conversation.id は会話やセッションを相関するための識別子として扱われ、gen_ai.operation.name には invoke_agent などの値が定義されています。アプリ開発者が会話履歴を管理する場合、カスタムのspan/log record processorなどで会話IDをspanやlogに追加できることも説明されています。(OpenTelemetry)

今回のAzure SDK側の変更は、この流れに沿って、Azure Monitorへ送るテレメトリで「メインエージェント帰属」を扱いやすくするものです。

対応すべき人、様子見でよい人

今回の更新は、Azure SDK利用者全員に同じ影響があるわけではありません。特に確認すべきなのは、Azure Monitor OpenTelemetry Distro for Pythonを使い、GenAIアプリのトレースやログを収集しているチームです。

利用状況対応優先度理由
Pythonで azure-monitor-opentelemetry を使い、マルチエージェントGenAIを監視している高新しい属性により、トレース・ログ分析の設計が変わる可能性がある
span_processors や log_record_processors を独自に指定している高新しいProcessorが先に登録されるため、属性の上書き・削除・フィルタ処理を確認する必要がある
Azure Monitor/Application InsightsでGenAI関連ログをKQL分析している中customDimensions などに新しい属性が出る可能性がある
単一エージェント、または通常のWeb/API監視だけに使っている低直接のメリットは限定的
.NET、Java、Node.jsだけを使っている低今回のPRはPythonリポジトリのDistro変更
Azure Monitorを使っていない低直接の影響は少ない

特に注意したいのは、カスタムProcessorを使っているケースです。Microsoft LearnのAPIリファレンスでは、configure_azure_monitor が span_processors と log_record_processors を受け取れることが説明されており、spanやlog recordをエクスポート前に処理できます。今回の変更で組み込みProcessorが追加されると、自社のProcessorが受け取る属性セットが変わる可能性があります。(Microsoft Learn)

まず確認すべき変更ファイル

PR #46703で変更されているファイルは、主に CHANGELOG.md と _configure.py です。ファイル数は少ないものの、影響はAzure Monitor OpenTelemetry Distroの初期化処理に関わります。(GitHub)

ファイル変更内容実務上の確認ポイント
sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md1.8.8 (Unreleased) のFeatures AddedにGenAI main-agent attribution processorsを追加リリースノートに正式反映されたか確認する
azure/monitor/opentelemetry/_configure.pyExporter側のGenAI ProcessorをimportExporterパッケージ側の対応バージョンが必要になる
_setup_tracing_GenAIMainAgentSpanProcessor() を最初に登録独自SpanProcessorとの順序・上書き有無を確認する
_setup_logging_GenAIMainAgentLogRecordProcessor() を最初に登録独自LogRecordProcessorやログフィルタとの競合を確認する

関連PR #46700では「Distro changes – #46703. The exporter needs to be released first.」と説明されており、Distro側だけでなくExporter側のリリース状況も確認すべきです。(GitHub)

移行前に確認するチェックリスト

この更新を取り込む前に、次の順番で確認すると失敗を減らせます。

手順確認内容判断基準
依存パッケージを確認azure-monitor-opentelemetry と関連Exporterのバージョン対象機能が入った正式リリースか
リリースノートを確認1.8.8 以降のCHANGELOGDraft PRではなく、リリース済みの記載か
初期化コードを確認configure_azure_monitor() の呼び出し箇所複数回初期化していないか
カスタムProcessorを確認span_processors、log_record_processors の中身属性の削除、上書き、フィルタがないか
ステージングで検証代表的なマルチエージェント処理を実行新属性がspan/logに入るか
KQLやダッシュボードを確認既存クエリ、Workbook、アラート新属性を活用できるか、既存条件が壊れないか

なお、PyPI上の azure-monitor-opentelemetry は確認時点で 1.8.7 が最新として表示され、リリース日は2026年3月19日です。今回のPRで触れられている 1.8.8 (Unreleased) の機能を使う前に、実際に対象バージョンが公開されたかを必ず確認してください。(PyPI)

設定確認の基本

PythonでAzure Monitor OpenTelemetry Distroを使う場合、基本的には configure_azure_monitor() を呼び出してApplication Insightsの接続情報を設定します。Microsoft Learnでは、接続文字列を環境変数 APPLICATIONINSIGHTS_CONNECTION_STRING で設定する方法と、configure_azure_monitor に直接渡す方法が示されています。(Microsoft Learn)

import os
from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
    connection_string=os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"],
)

既存のカスタムProcessorがある場合は、次のような設定をしている箇所を探します。

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
    connection_string=os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"],
    span_processors=[
        # 自社のSpanProcessor
    ],
    log_record_processors=[
        # 自社のLogRecordProcessor
    ],
)

今回のPRでは、GenAI main-agent attribution processorがDistro内部で先に登録される差分になっています。したがって、独自Processorでは次の点を確認してください。

確認箇所注意点
属性の削除処理microsoft.gen_ai.main_agent.* を不要なカスタム属性として消していないか
属性の上書き処理gen_ai.agent.* や gen_ai.conversation.id を別の値で上書きしていないか
ログ整形処理log recordのattributesを再作成して、新属性を落としていないか
サンプリング処理メインエージェント単位の分析に必要なspanを落としすぎていないか
PII対策GenAI関連属性やログに機密情報が混ざっていないか

Azure Monitorで確認するKQL例

リリース後に検証する場合は、まずAzure Monitor LogsやApplication Insightsで新しい属性が入っているかを確認します。実際のテーブル名や格納先は構成によって異なるため、以下は調査の出発点として使ってください。

traces
| where timestamp > ago(24h)
| extend main_agent_name = tostring(customDimensions["microsoft.gen_ai.main_agent.name"])
| extend main_agent_id = tostring(customDimensions["microsoft.gen_ai.main_agent.id"])
| extend conversation_id = tostring(customDimensions["microsoft.gen_ai.main_agent.conversation_id"])
| where isnotempty(main_agent_name) or isnotempty(conversation_id)
| summarize count() by main_agent_name, main_agent_id
| order by count_ desc

依存関係やリクエスト側も確認したい場合は、dependencies や requests を対象に同じ属性を探します。

dependencies
| where timestamp > ago(24h)
| extend main_agent_name = tostring(customDimensions["microsoft.gen_ai.main_agent.name"])
| where isnotempty(main_agent_name)
| summarize avg_duration_ms = avg(duration), count() by main_agent_name, target
| order by avg_duration_ms desc

ログ側でメインエージェント単位のエラーを見たい場合は、次のように確認します。

traces
| where timestamp > ago(24h)
| where severityLevel >= 3
| extend main_agent_name = tostring(customDimensions["microsoft.gen_ai.main_agent.name"])
| extend conversation_id = tostring(customDimensions["microsoft.gen_ai.main_agent.conversation_id"])
| summarize error_count = count() by main_agent_name, conversation_id
| order by error_count desc

この検証で属性が見つからない場合は、単に更新が効いていないとは限りません。アプリ側や利用しているGenAIフレームワークが、そもそも gen_ai.agent.name、gen_ai.agent.id、gen_ai.conversation.id などの元になる属性を出していない可能性があります。

よくある失敗パターン

Draft PRをリリース済み機能として扱う

今回のPR #46703は、確認時点でDraftとして表示されています。CHANGELOGに Unreleased として記載されている段階では、本番環境の更新判断をしない方が安全です。正式リリース後に、PyPI、GitHubのrelease notes、依存関係のバージョンを確認してから取り込みましょう。(GitHub)

Exporter側の対応を見落とす

Distro側のPRは、Exporter側から _GenAIMainAgentSpanProcessor と _GenAIMainAgentLogRecordProcessor をimportしています。関連PR #46700ではExporter側にProcessor実装が追加されているため、Distroだけを見て判断すると依存関係を見落とす可能性があります。(GitHub)

内部クラスを直接importして使う

今回のProcessor名は _GenAIMainAgentSpanProcessor のようにアンダースコアで始まっています。Pythonでは慣例的に内部実装を示す名前です。PRの意図はDistroの設定処理で自動登録することなので、公式ドキュメントで案内されるまでは、アプリコードから直接importして使う設計は避けるのが無難です。

既存のログ整形で属性を落とす

ログレコードを独自に整形している場合、attributes を作り直す処理によって新しい microsoft.gen_ai.main_agent.* が消えることがあります。特に、ログ出力前に「許可リスト方式」で属性を残している場合は、許可リストに新属性を追加する必要があります。

機密情報対策を後回しにする

今回の変更自体は主にメインエージェント属性の伝播ですが、GenAIのテレメトリ全体では入力メッセージ、出力メッセージ、システム指示などが扱われる場合があります。OpenTelemetryのGenAI仕様でも、入力・出力メッセージやsystem instructionsには機密情報が含まれる可能性があると注意されています。GenAI監視を強化する際は、プロンプト、回答、会話ID、ユーザーIDの扱いを同時に見直してください。(OpenTelemetry)

実務での活用シーン

この更新が入ると、マルチエージェントGenAIの運用では次のような分析がしやすくなります。

活用シーン使い方
障害調査エラーlogを main_agent.name で集計し、失敗しやすいエージェントを特定する
性能分析main_agent.name と依存関係のdurationを組み合わせ、遅い処理を見つける
品質改善conversation ID単位で失敗パターンを追跡し、プロンプトやツール選択を改善する
コスト管理メインエージェント単位でモデル呼び出しの増加傾向を分析する
リリース検証新バージョンのエージェントが旧バージョンより遅くなっていないか確認する

特に効果が大きいのは、複数のエージェントが同じモデルや同じ検索基盤を共有しているケースです。単純な依存関係グラフだけでは「どの上位エージェントの文脈で遅くなったか」が見えにくいため、メインエージェント属性を分析軸に加える価値があります。

本番適用時の判断基準

正式リリース後に取り込む場合でも、すぐに全環境へ展開するのではなく、段階的に検証するのがおすすめです。

判断項目本番適用してよい目安
パッケージ状態PyPIまたは公式リリースノートで対象バージョンが公開済み
依存関係DistroとExporterの対応バージョンがそろっている
既存Processor新属性を消したり上書きしたりしないことを確認済み
テレメトリ量新属性追加によるログ量・課金影響を確認済み
セキュリティ会話IDやエージェントIDの扱いが社内ルールに合っている
運用監視KQL、Workbook、アラートが新属性に対応済み

判断に迷う場合は、まずステージング環境で代表的な会話フローを実行し、spanとlogに microsoft.gen_ai.main_agent.* が入るかを確認してください。値が入らない場合は、Azure SDK側ではなく、アプリやGenAIフレームワーク側で元になる gen_ai.* 属性が不足している可能性があります。

次に取るべき行動

今回のAzure SDK documentation updateは、マルチエージェントGenAIシステムの可観測性を高めるための重要な下準備です。ただし、確認時点では 1.8.8 (Unreleased) に向けたPR段階の情報であり、正式リリース済み機能として扱うべきではありません。

まずは、自社アプリが azure-monitor-opentelemetry を使っているか、configure_azure_monitor() に独自の span_processors や log_record_processors を渡しているかを確認してください。そのうえで、正式リリース後にステージング環境で新属性の出力、既存KQLへの影響、機密情報の扱いを検証します。

マルチエージェントGenAIを本番運用しているチームにとって、次に見るべきポイントは「パッケージを上げるか」だけではありません。どのエージェントを分析軸にするか、どの会話IDを安全に保持するか、どのログを残しどの情報を落とすかまで含めて、監視設計を見直すタイミングと考えるべきです。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次