AI Toolkitでのトレース
AI Toolkitは、AIアプリケーションのパフォーマンスを監視および分析するのに役立つトレース機能を提供します。生成AIモデルとのやり取りを含むAIアプリケーションの実行をトレースして、その動作とパフォーマンスに関する洞察を得ることができます。
AI Toolkitは、トレースデータを収集するためのローカルHTTPおよびgRPCサーバーをホストします。コレクターサーバーはOTLP(OpenTelemetry Protocol)と互換性があり、ほとんどの言語モデルSDKはOTLPを直接サポートするか、それをサポートするための非Microsoftインストルメンテーションライブラリを持っています。AI Toolkitを使用して、収集されたインストルメンテーションデータを視覚化します。
OTLPをサポートし、生成AIシステムのセマンティック規則に従うすべてのフレームワークまたはSDKがサポートされています。次の表に、互換性がテストされた一般的なAI SDKを示します。
Azure AI Inference | Azure AI Foundry Agents Service | Anthropic | Gemini | LangChain | OpenAI SDK | OpenAI Agents SDK | |
---|---|---|---|---|---|---|---|
Python | ✅ | ✅ | ✅ (traceloop)1,2 | ✅ | ✅ (LangSmith)1,2 | ✅ (opentelemetry-python-contrib)1 | ✅ (Logfire)1,2 |
TS/JS | ✅ | ✅ | ✅ (traceloop)1,2 | ❌ | ✅ (traceloop)1,2 | ✅ (traceloop)1,2 | ❌ |
- 括弧内のSDKは、公式SDKがOTLPをサポートしていないため、OTLPサポートを追加する非Microsoftツールです。
- これらのツールは、生成AIシステムに対するOpenTelemetryのルールを完全に遵守していません。
トレースを開始する方法
-
ツリービューでトレースを選択して、トレースウェブビューを開きます。
-
コレクターの開始ボタンを選択して、ローカルOTLPトレースコレクターサーバーを起動します。
-
コードスニペットでインストルメンテーションを有効にします。さまざまな言語とSDKのコードスニペットについては、「インストルメンテーションのセットアップ」セクションを参照してください。
-
アプリを実行してトレースデータを生成します。
-
トレースウェブビューで、更新ボタンを選択して新しいトレースデータを表示します。
インストルメンテーションのセットアップ
トレースデータを収集するために、AIアプリケーションでトレースをセットアップします。以下のコードスニペットは、さまざまなSDKと言語のトレースをセットアップする方法を示しています。
プロセスはすべてのSDKで類似しています。
- LLMまたはエージェントアプリにトレースを追加します。
- OTLPトレースエクスポーターをセットアップして、AITKローカルコレクターを使用します。
Azure AI Inference SDK - Python
インストール
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http azure-ai-inference[opentelemetry]
セットアップ
import os
os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true"
os.environ["AZURE_SDK_TRACING_IMPLEMENTATION"] = "opentelemetry"
from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
resource = Resource(attributes={
"service.name": "opentelemetry-instrumentation-azure-ai-agents"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
endpoint="https://:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
BatchLogRecordProcessor(OTLPLogExporter(endpoint="https://:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))
from azure.ai.inference.tracing import AIInferenceInstrumentor
AIInferenceInstrumentor().instrument(True)
Azure AI Inference SDK - TypeScript/JavaScript
インストール
npm install @azure/opentelemetry-instrumentation-azure-sdk @opentelemetry/api @opentelemetry/exporter-trace-otlp-proto @opentelemetry/instrumentation @opentelemetry/resources @opentelemetry/sdk-trace-node
セットアップ
const { context } = require('@opentelemetry/api');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const {
NodeTracerProvider,
SimpleSpanProcessor
} = require('@opentelemetry/sdk-trace-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto');
const exporter = new OTLPTraceExporter({
url: 'https://:4318/v1/traces'
});
const provider = new NodeTracerProvider({
resource: resourceFromAttributes({
'service.name': 'opentelemetry-instrumentation-azure-ai-inference'
}),
spanProcessors: [new SimpleSpanProcessor(exporter)]
});
provider.register();
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const {
createAzureSdkInstrumentation
} = require('@azure/opentelemetry-instrumentation-azure-sdk');
registerInstrumentations({
instrumentations: [createAzureSdkInstrumentation()]
});
Azure AI Foundry Agent Service - Python
インストール
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http azure-ai-inference[opentelemetry]
セットアップ
import os
os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true"
os.environ["AZURE_SDK_TRACING_IMPLEMENTATION"] = "opentelemetry"
from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
resource = Resource(attributes={
"service.name": "opentelemetry-instrumentation-azure-ai-agents"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
endpoint="https://:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
BatchLogRecordProcessor(OTLPLogExporter(endpoint="https://:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))
from azure.ai.agents.telemetry import AIAgentsInstrumentor
AIAgentsInstrumentor().instrument(True)
Azure AI Foundry Agent Service - TypeScript/JavaScript
インストール
npm install @azure/opentelemetry-instrumentation-azure-sdk @opentelemetry/api @opentelemetry/exporter-trace-otlp-proto @opentelemetry/instrumentation @opentelemetry/resources @opentelemetry/sdk-trace-node
セットアップ
const { context } = require('@opentelemetry/api');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const {
NodeTracerProvider,
SimpleSpanProcessor
} = require('@opentelemetry/sdk-trace-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto');
const exporter = new OTLPTraceExporter({
url: 'https://:4318/v1/traces'
});
const provider = new NodeTracerProvider({
resource: resourceFromAttributes({
'service.name': 'opentelemetry-instrumentation-azure-ai-inference'
}),
spanProcessors: [new SimpleSpanProcessor(exporter)]
});
provider.register();
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const {
createAzureSdkInstrumentation
} = require('@azure/opentelemetry-instrumentation-azure-sdk');
registerInstrumentations({
instrumentations: [createAzureSdkInstrumentation()]
});
Anthropic - Python
インストール
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-anthropic
セットアップ
from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
resource = Resource(attributes={
"service.name": "opentelemetry-instrumentation-anthropic-traceloop"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
endpoint="https://:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
BatchLogRecordProcessor(OTLPLogExporter(endpoint="https://:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))
from opentelemetry.instrumentation.anthropic import AnthropicInstrumentor
AnthropicInstrumentor().instrument()
Anthropic - TypeScript/JavaScript
インストール
npm install @traceloop/node-server-sdk
セットアップ
const { initialize } = require('@traceloop/node-server-sdk');
const { trace } = require('@opentelemetry/api');
initialize({
appName: 'opentelemetry-instrumentation-anthropic-traceloop',
baseUrl: 'https://:4318',
disableBatch: true
});
Google Gemini - Python
インストール
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-google-genai
セットアップ
from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
resource = Resource(attributes={
"service.name": "opentelemetry-instrumentation-google-genai"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
endpoint="https://:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
BatchLogRecordProcessor(OTLPLogExporter(endpoint="https://:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))
from opentelemetry.instrumentation.google_genai import GoogleGenAiSdkInstrumentor
GoogleGenAiSdkInstrumentor().instrument(enable_content_recording=True)
LangChain - Python
インストール
pip install langsmith[otel]
セットアップ
import os
os.environ["LANGSMITH_OTEL_ENABLED"] = "true"
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "https://:4318"
LangChain - TypeScript/JavaScript
インストール
npm install @traceloop/node-server-sdk
セットアップ
const { initialize } = require('@traceloop/node-server-sdk');
initialize({
appName: 'opentelemetry-instrumentation-langchain-traceloop',
baseUrl: 'https://:4318',
disableBatch: true
});
OpenAI - Python
インストール
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-openai-v2
セットアップ
from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
from opentelemetry.instrumentation.openai_v2 import OpenAIInstrumentor
# Set up resource
resource = Resource(attributes={
"service.name": "opentelemetry-instrumentation-openai"
})
# Set up tracer provider
trace.set_tracer_provider(TracerProvider(resource=resource))
# Configure OTLP exporter
otlp_exporter = OTLPSpanExporter(
endpoint="https://:4318/v1/traces"
)
# Add span processor
trace.get_tracer_provider().add_span_processor(
BatchSpanProcessor(otlp_exporter)
)
# Set up logger provider
logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
BatchLogRecordProcessor(OTLPLogExporter(endpoint="https://:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))
# Enable OpenAI instrumentation
OpenAIInstrumentor().instrument()
OpenAI - TypeScript/JavaScript
インストール
npm install @traceloop/instrumentation-openai @traceloop/node-server-sdk
セットアップ
const { initialize } = require('@traceloop/node-server-sdk');
initialize({
appName: 'opentelemetry-instrumentation-openai-traceloop',
baseUrl: 'https://:4318',
disableBatch: true
});
OpenAI Agents SDK - Python
インストール
pip install logfire
セットアップ
import logfire
import os
os.environ["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"] = "https://:4318/v1/traces"
logfire.configure(
service_name="opentelemetry-instrumentation-openai-agents-logfire",
send_to_logfire=False,
)
logfire.instrument_openai_agents()
例: Azure AI Inference SDKでトレースをセットアップする
以下のエンドツーエンドの例では、PythonでAzure AI Inference SDKを使用し、トレースプロバイダーとインストルメンテーションをセットアップする方法を示しています。
前提条件
この例を実行するには、以下の前提条件が必要です。
開発環境のセットアップ
以下の手順を使用して、この例を実行するために必要なすべての依存関係を含む事前設定された開発環境をデプロイします。
-
GitHubパーソナルアクセストークンの設定
無料のGitHub モデルをモデルの例として使用します。
GitHub 開発者設定を開き、新しいトークンを生成を選択します。
重要トークンには
models:read
のアクセス許可が必要です。そうでない場合、認証エラーが返されます。トークンはMicrosoftサービスに送信されます。 -
環境変数の作成
以下のいずれかのコードスニペットを使用して、トークンをクライアントコードのキーとして設定するための環境変数を作成します。
<your-github-token-goes-here>
を実際のGitHubトークンに置き換えてください。bash
export GITHUB_TOKEN="<your-github-token-goes-here>"
powershell
$Env:GITHUB_TOKEN="<your-github-token-goes-here>"
Windowsコマンドプロンプト
set GITHUB_TOKEN=<your-github-token-goes-here>
-
Pythonパッケージのインストール
以下のコマンドは、Azure AI Inference SDKでトレースするために必要なPythonパッケージをインストールします。
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http azure-ai-inference[opentelemetry]
-
トレースのセットアップ
-
プロジェクトのためにコンピューター上に新しいローカルディレクトリを作成します。
mkdir my-tracing-app
-
作成したディレクトリに移動します。
cd my-tracing-app
-
そのディレクトリでVisual Studio Codeを開きます。
code .
-
-
Pythonファイルの作成
-
my-tracing-app
ディレクトリに、main.py
という名前のPythonファイルを作成します。トレースをセットアップし、Azure AI Inference SDKとやり取りするためのコードを追加します。
-
以下のコードを
main.py
に追加し、ファイルを保存します。import os ### Set up for OpenTelemetry tracing ### os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true" os.environ["AZURE_SDK_TRACING_IMPLEMENTATION"] = "opentelemetry" from opentelemetry import trace, _events from opentelemetry.sdk.resources import Resource from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.sdk._logs import LoggerProvider from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from opentelemetry.sdk._events import EventLoggerProvider from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter github_token = os.environ["GITHUB_TOKEN"] resource = Resource(attributes={ "service.name": "opentelemetry-instrumentation-azure-ai-inference" }) provider = TracerProvider(resource=resource) otlp_exporter = OTLPSpanExporter( endpoint="https://:4318/v1/traces", ) processor = BatchSpanProcessor(otlp_exporter) provider.add_span_processor(processor) trace.set_tracer_provider(provider) logger_provider = LoggerProvider(resource=resource) logger_provider.add_log_record_processor( BatchLogRecordProcessor(OTLPLogExporter(endpoint="https://:4318/v1/logs")) ) _events.set_event_logger_provider(EventLoggerProvider(logger_provider)) from azure.ai.inference.tracing import AIInferenceInstrumentor AIInferenceInstrumentor().instrument() ### Set up for OpenTelemetry tracing ### from azure.ai.inference import ChatCompletionsClient from azure.ai.inference.models import UserMessage from azure.ai.inference.models import TextContentItem from azure.core.credentials import AzureKeyCredential client = ChatCompletionsClient( endpoint = "https://models.inference.ai.azure.com", credential = AzureKeyCredential(github_token), api_version = "2024-08-01-preview", ) response = client.complete( messages = [ UserMessage(content = [ TextContentItem(text = "hi"), ]), ], model = "gpt-4.1", tools = [], response_format = "text", temperature = 1, top_p = 1, ) print(response.choices[0].message.content)
-
-
コードの実行
-
Visual Studio Codeで新しいターミナルを開きます。
-
ターミナルで、コマンド
python main.py
を使用してコードを実行します。
-
-
AI Toolkitでトレースデータを確認する
コードを実行してトレースウェブビューを更新すると、リストに新しいトレースが表示されます。
トレースを選択して、トレースの詳細ウェブビューを開きます。
左側のスパンツリービューで、アプリの完全な実行フローを確認します。
右側のスパン詳細ビューでスパンを選択し、入力 + 出力タブで生成AIメッセージを確認します。
メタデータタブを選択して、生のメタデータを表示します。
学んだこと
この記事では、以下の方法を学びました。
- Azure AI Inference SDKとOpenTelemetryを使用して、AIアプリケーションでトレースをセットアップする。
- OTLPトレースエクスポーターを構成して、トレースデータをローカルコレクターサーバーに送信する。
- アプリケーションを実行してトレースデータを生成し、AI Toolkitウェブビューでトレースを表示する。
- PythonやTypeScript/JavaScriptなどの複数のSDKや言語、OTLPを介した非Microsoftツールでトレース機能を使用する。
- 提供されたコードスニペットを使用して、さまざまなAIフレームワーク(Anthropic、Gemini、LangChain、OpenAIなど)をインストルメント化する。
- コレクターの開始および更新ボタンを含むトレースウェブビューUIを使用して、トレースデータを管理する。
- 環境変数やパッケージのインストールなど、開発環境をセットアップしてトレースを有効にする。
- スパンツリーと詳細ビューを使用して、生成AIメッセージフローとメタデータを含むアプリの実行フローを分析する。