Splunk Observability Cloud によるエージェント型 AI アプリケーションの監視
エージェント型AIアプリケーションの計装
注意: このセクションでは複数のファイルを変更する必要があります。 変更箇所が不明な場合、またはアプリケーションが動作しなくなった場合は、
~/workshop/agentic-ai/app-with-instrumentationフォルダにある このセクションの想定される解答を参照してください。
エージェント型AIアプリケーションをOpenTelemetryで計装し、Kubernetesにデプロイするには、 いくつかの手順が必要です:
requirements.txtファイルに計装パッケージを追加するopentelemetry-instrumentを使用してアプリケーションを起動するようDockerfileを更新する- 計装パッケージを含む新しいDockerイメージをビルドする
- 環境変数を使用してKubernetesマニフェストを更新する
- Kubernetesマニフェストをデプロイする
計装パッケージの追加 #
次に、いくつかの計装パッケージをインストールする必要があります。~/workshop/agentic-ai/base-app/requirements.txt を
編集用に開き、ファイルの末尾に以下のパッケージを追加します:
splunk-opentelemetry==2.8.0
splunk-otel-instrumentation-langchain==0.1.7
splunk-otel-genai-emitters-splunk==0.1.7
splunk-otel-util-genai==0.1.9
opentelemetry-instrumentation-flask==0.59b0これらのパッケージの説明は以下の通りです:
splunk-opentelemetry: Splunk版のOpenTelemetry Pythonディストリビューションで、Pythonアプリケーションを計装して分散トレースをキャプチャし、Splunk APMにレポートします。splunk-otel-instrumentation-langchain: LangChain LLM/チャットワークフロー向けのOpenTelemetry計装を提供するパッケージです。splunk-otel-genai-emitters-splunk: Splunk Platformでのストレージとフィルタリングを最適化するために、Splunkスキーマの評価結果ログ用エミッターを提供するパッケージです。splunk-otel-util-genai: OpenTelemetryセマンティック規約を使用した生成AIワークロードの計装を容易にするAPIとデータ型を提供するユーティリティ関数を含むパッケージです。opentelemetry-instrumentation-flask: OpenTelemetry WSGIミドルウェアを基盤として、FlaskアプリケーションのWebリクエストを追跡するライブラリです。
進む前に作業内容を確認してください
以下のコマンドを実行して、変更内容を想定される解答と比較します:
diff ~/workshop/agentic-ai/base-app/requirements.txt ~/workshop/agentic-ai/app-with-instrumentation/requirements.txtDockerfileの更新 #
次に、OpenTelemetry計装を有効にする必要があります。これはDockerfileを更新して、
アプリケーションが opentelemetry-instrument で起動されるようにすることで実現します。~/workshop/agentic-ai/base-app/Dockerfile
ファイルを編集用に開き、最後の行を以下のように更新します:
# Run the server with instrumentation
CMD ["opentelemetry-instrument", "python", "main.py"]進む前に作業内容を確認してください
以下のコマンドを実行して、変更内容を想定される解答と比較します:
diff ~/workshop/agentic-ai/base-app/Dockerfile ~/workshop/agentic-ai/app-with-instrumentation/Dockerfile更新されたDockerイメージのビルド #
新しいタグを付けて更新されたDockerイメージをビルドします:
cd ~/workshop/agentic-ai/base-app
docker build --platform linux/amd64 -t localhost:9999/agentic-ai-app:app-with-instrumentation .
docker push localhost:9999/agentic-ai-app:app-with-instrumentationヒント: イメージのビルドに時間がかかりすぎる場合は、ビルド済みのイメージを使用することを 検討してください。その場合は、
~/workshop/agentic-ai/base-app/k8s.yamlファイルのイメージ名をlocalhost:9999/agentic-ai-app:app-with-instrumentationの代わりにghcr.io/splunk/agentic-ai-app:app-with-instrumentationに更新してください。
ConfigMapの定義 #
アプリケーションをKubernetesにデプロイする際、テレメトリー(メトリクス、トレース、ログ)を 明確で一意な環境識別子とともにSplunk Observability Cloudに送信したいと考えています。 これにより、異なるデプロイメント間でデータのフィルタリング、比較、トラブルシューティングが容易になります。
これを実現するために、deployment.environment という名前のOpenTelemetryリソース属性を設定します。
値をハードコーディングする代わりに、EC2インスタンスに既に存在する INSTANCE 環境変数から
値を導出します。これにより、各デプロイメントが正しい環境名で自動的にタグ付けされます。
この設定をKubernetes ConfigMapに保存し、後でアプリケーションPodに環境変数として 注入できるようにします。
以下のコマンドでConfigMapを作成します:
kubectl create configmap instance-config \
--from-literal=OTEL_RESOURCE_ATTRIBUTES=deployment.environment=agentic-ai-$INSTANCE \
-n travel-agentこのコマンドの動作:
- OpenTelemetryが期待する
OTEL_RESOURCE_ATTRIBUTES環境変数を定義します。 $INSTANCEの値に応じて、deployment.environmentをagentic-ai-shw-1c43のような値に設定します。travel-agentネームスペースにConfigMapを作成します。
次のステップでKubernetesデプロイメントを構成する際に、このConfigMapを参照します。
Kubernetesマニフェストの更新 #
OpenTelemetry計装、特にAI Agent Monitoringでは、計装データの収集、処理、エクスポートの 方法を定義する多数の環境変数を設定する必要があります。
~/workshop/agentic-ai/base-app/k8s.yaml ファイルを編集用に開きます。計装を含むイメージを
使用するようにイメージタグを更新します:
image: localhost:9999/agentic-ai-app:app-with-instrumentation同じファイルで、Begin: Add Environment Variables と End: Add Environment Variables の
コメントの間に以下の環境変数を追加します:
ヒント: 貼り付ける前に
:set pasteと入力すると、viが貼り付けたコードを自動インデントするのを防げます。
# Begin: Add Environment Variables
# Service Name
- name: OTEL_SERVICE_NAME
value: "travel-planner"
# Additional OTEL configuration
- name: OTEL_RESOURCE_ATTRIBUTES
valueFrom:
configMapKeyRef:
name: instance-config
key: OTEL_RESOURCE_ATTRIBUTES
- name: SPLUNK_OTEL_AGENT
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(SPLUNK_OTEL_AGENT):4317"
- name: OTEL_EXPORTER_OTLP_PROTOCOL
value: "grpc"
- name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
value: "DELTA"
- name: OTEL_PYTHON_EXCLUDED_URLS
value: "^(https?://)?[^/]+(/health)?$"
- name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT
value: "true"
- name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT_MODE
value: "SPAN"
- name: OTEL_INSTRUMENTATION_GENAI_EMITTERS
value: "span_metric,splunk"
- name: SPLUNK_PROFILER_ENABLED
value: "true"
# End: Add Environment Variables注意: スクロールしないとテキストの一部が表示されない場合があります。 右上の
Copy text to clipboardボタンを使用して、 すべてのテキストをコピーしたことを確認してください。
注意: yamlではインデントが重要です。新しい環境変数が既存の環境変数と 揃っていることを確認してください。
以下の環境変数はエージェント型AIモニタリングに固有のもので、説明は以下の通りです:
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: OTLPメトリクスエクスポーターが、出力するメトリクスに対して累積合計、デルタ、またはメモリ効率の良いテンポラリティのどれを報告するかを決定します。エージェント型AIモニタリングではDELTAに設定することが推奨されます。OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: エージェント型AIアプリケーションからのメッセージキャプチャを有効/無効にするために使用します。このワークショップではtrueに設定しています。OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT_MODE: メッセージのキャプチャ方法を定義します。このワークショップではSPANに設定しており、スパンイベントストアを使用してメッセージがキャプチャされます。OTEL_INSTRUMENTATION_GENAI_EMITTERS: このワークショップではspan_metric,splunkに設定しており、スパンとメトリクスの両方のデータ、およびSplunk固有の機能がキャプチャされます。
進む前に作業内容を確認してください
以下のコマンドを実行して、変更内容を想定される解答と比較します:
diff ~/workshop/agentic-ai/base-app/k8s.yaml ~/workshop/agentic-ai/app-with-instrumentation/k8s.yaml更新されたアプリケーションのデプロイ #
以下のようにマニフェストファイルを使用して、更新されたアプリケーションをデプロイできます:
kubectl apply -f ~/workshop/agentic-ai/base-app/k8s.yamlKubernetesでのアプリケーションテスト #
新しいアプリケーションPodが正常に起動し、古いPodが存在しないことを確認します:
kubectl get pods -n travel-agentNAME READY STATUS RESTARTS AGE
travel-planner-langchain-68977dc5c4-4w7p9 1/1 Running 0 41s次に、以下のコマンドを実行してアプリケーションをテストします:
curl http://travel-planner.localhost/travel/plan \
-H "Content-Type: application/json" \
-d '{
"origin": "Seattle",
"destination": "Tokyo",
"user_request": "We are planning a week-long trip to Seattle from Tokyo. Looking for boutique hotel, business-class flights and unique experiences.",
"travelers": 2
}'トラブルシューティング #
トラブルシューティングが必要な場合は、以下のコマンドを使用してアプリケーションログを確認します:
kubectl logs -l app=travel-planner-langchain -n travel-agent -f
