Agentic AI アプリケーションの計装
15 minutes注意: このセクションでは複数のファイルを変更する必要があります。 変更箇所がわからない場合やアプリケーションが動作しなくなった場合は、
~/workshop/agentic-ai/app-with-instrumentationフォルダにある モデルソリューションを参照してください。
Agentic AI アプリケーションを OpenTelemetry で計装し、Kubernetes にデプロイするには、いくつかのステップが必要です:
requirements.txtファイルに計装パッケージを追加するopentelemetry-instrumentを使用してアプリケーションを起動するように Dockerfile を更新する- 計装パッケージを含む新しい Docker イメージをビルドする
- 環境変数を含む Kubernetes マニフェストを更新する
- Kubernetes マニフェストをデプロイする
計装パッケージの追加
次に、いくつかの計装パッケージをインストールする必要があります。~/workshop/agentic-ai/base-app/requirements.txt を開いて編集し、ファイルの末尾に以下のパッケージを追加します:
各パッケージの説明は以下の通りです:
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.txt
Dockerfile の更新
次に、OpenTelemetry 計装を有効にする必要があります。これは、opentelemetry-instrument でアプリケーションが起動されるように Dockerfile を更新することで行います。~/workshop/agentic-ai/base-app/Dockerfile を開いて編集し、最後の行を以下のように更新します:
ヒント: 以下のコマンドを実行して、変更内容をモデルソリューションと比較できます:
diff ~/workshop/agentic-ai/base-app/Dockerfile ~/workshop/agentic-ai/app-with-instrumentation/Dockerfile
更新された Docker イメージのビルド
新しいタグで更新された Docker イメージをビルドします:
ConfigMap の定義
アプリケーションを Kubernetes にデプロイする際、テレメトリー(メトリクス、トレース、ログ)を明確でユニークな環境識別子とともに Splunk Observability Cloud に送信したいと考えます。これにより、異なるデプロイメント間でのデータのフィルタリング、比較、トラブルシューティングが容易になります。
これを実現するために、deployment.environment という名前の OpenTelemetry リソース属性を設定します。値をハードコーディングするのではなく、EC2 インスタンスに既に存在する INSTANCE 環境変数から値を取得します。これにより、各デプロイメントに正しい環境名が自動的にタグ付けされます。
この設定を Kubernetes ConfigMap に保存し、後からアプリケーション Pod に環境変数として注入できるようにします。
以下のコマンドで ConfigMap を作成します:
このコマンドの動作:
- 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 タグ を更新します:
同じファイルで、Begin: Add Environment Variables と End: Add Environment Variables というコメントの間に、以下の 環境変数 を追加します:
ヒント: 貼り付ける前に
:set pasteと入力すると、viによる自動インデントを防ぐことができます。
注意: スクロールしないとテキストの一部が表示されない場合があります。 右上の
Copy text to clipboardボタンを使用して、すべてのテキストをコピーしてください。
注意: YAML ではインデントが重要です。新しい環境変数が既存の環境変数と揃っていることを確認してください。
以下の環境変数は Agentic AI モニタリングに固有のもので、説明は以下の通りです:
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: OTLP メトリクスエクスポーターが、出力されるメトリクスに対して累積合計、デルタ、またはメモリ効率の良いテンポラリティのいずれを報告するかを決定します。Agentic AI モニタリングではDELTAに設定することが推奨されます。OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: Agentic 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
更新されたアプリケーションのデプロイ
以下のようにマニフェストファイルを使用して、更新されたアプリケーションをデプロイできます:
Kubernetes でのアプリケーションテスト
新しいアプリケーション Pod が正常に起動し、古い Pod がなくなっていることを確認します:
次に、以下のコマンドを実行してアプリケーションをテストします:
トラブルシューティング
トラブルシューティングが必要な場合は、以下のコマンドを使用してアプリケーションログを確認します: