View a markdown version of this page

AgentCore Observability の使用を開始する - Amazon Bedrock AgentCore

AgentCore Observability の使用を開始する

Amazon Bedrock Amazon Bedrock AgentCore Observability は、本番環境でのエージェントパフォーマンスのトレース、デバッグ、モニタリングに役立ちます。このガイドは、エージェントアプリケーションにオブザーバビリティ機能を実装するのに役立ちます。

前提条件

開始する前に、以下を確認してください。

  • AWS 使用する Foundation Model に対してモデルアクセスが有効になっている認証情報が設定されたアカウント ()。 aws configure

  • Python 3.10 以降がインストールされている

  • Amazon CloudWatch でトランザクション検索を有効にします。初めて使用するユーザーは、CloudWatch トランザクション検索を有効にして Bedrock Amazon Bedrock AgentCore のスパンとトレースを表示する必要があります。

  • (ランタイム以外のエージェントのみ) OpenTelemetry ライブラリを追加する – requirements.txt ファイルに aws-opentelemetry-distro (ADOT) を含めます。 AWS Lambda でエージェントをホストする場合は、代わりに AWS Distro AWS for OpenTelemetry ウェブサイトの Lambda Layer for OpenTelemetry を使用します。

  • (ランタイム以外のエージェントのみ) フレームワークがトレース (strands-agents[otel]パッケージなど) を出力するように設定されていることを確認します。エージェントフレームワークの自動計測 ( など) opentelemetry-instrumentation-langchain を含める必要がある場合があります。

Amazon Bedrock AgentCore Observability には、さまざまなインフラストラクチャニーズに合わせてモニタリングを設定する方法が 2 つあります。

  1. Amazon Bedrock AgentCore Runtime-hosted エージェント

  2. ランタイム以外のホストエージェント

AWS アカウントごとに 1 回限りの設定として、ユーザーが初めて Amazon CloudWatch でトランザクション検索を有効にする必要があります。これを行うには、API と CloudWatch コンソールの 2 つの方法があります。

トランザクション検索を有効にすると、スパンが検索と分析に使用できるようになるまでに 10 分かかる場合があります。以下のいずれかのオプションを選択します。

オプション 1: API を使用してトランザクション検索を有効にする

API を使用してトランザクション検索を有効にするには

  1. AWS CLI を使用して CloudWatch Logs にスパンを取り込むアクセスを許可するポリシーを作成します。

    AWS CLI コマンドを でフォーマットする方法の例を以下に示しますPutResourcePolicy

    aws logs put-resource-policy --policy-name MyResourcePolicy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "TransactionSearchXRayAccess", "Effect": "Allow", "Principal": { "Service": "xray.amazonaws.com" }, "Action": "logs:PutLogEvents", "Resource": [ "arn:partition:logs:region:account-id:log-group:aws/spans:*", "arn:partition:logs:region:account-id:log-group:/aws/application-signals/data:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:partition:xray:region:account-id:*" }, "StringEquals": { "aws:SourceAccount": "account-id" } } } ]}'
  2. トレースセグメントの送信先を設定します。

    AWS CLI コマンドを でフォーマットする方法の例を以下に示しますUpdateTraceSegmentDestination

    aws xray update-trace-segment-destination --destination CloudWatchLogs
  3. オプション インデックスを作成するスパンの量を設定します。

    で必要なサンプリングの割合を設定しますUpdateIndexingRule

    aws xray update-indexing-rule --name "Default" --rule '{"Probabilistic": {"DesiredSamplingPercentage": number}}'

オプション 2: CloudWatch コンソールでトランザクション検索を有効にする

CloudWatch コンソールでトランザクション検索を有効にするには

  1. CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/ を開いてください。

  2. Setup のナビゲーションペインで、Settings を選択します。

  3. アカウントを選択し、X-Ray トレースタブを選択します。

  4. トランザクション検索セクションで、設定の表示を選択します。

  5. 開いたページで、編集 を選択します。

  6. [トランザクション検索の有効化] を選択します。

  7. X-Ray ユーザーの場合は を選択し、インデックスを作成するトレースの割合を入力します。トレースの 1% に無料でインデックスを作成し、必要に応じて後で調整できます。

  8. [保存] を選択します。トレースを送信する前にOpenTelemetry スパンの取り込みが有効が表示されるまで待ちます。

次に、オブザーバビリティを設定する 2 つの方法を見てみましょう。

ステップ 2: Amazon Bedrock AgentCore ランタイムホストエージェントのオブザーバビリティを有効にする

Amazon Bedrock AgentCore Runtime-hosted エージェントは、Amazon Bedrock AgentCore 環境内で直接デプロイおよび実行され、最小限の設定で自動計測を提供します。AgentCore CLI を使用してエージェントをデプロイする場合、ランタイムは OpenTelemetry を使用してエージェントを自動的に計測します。追加の OTEL ライブラリや設定は必要ありません。

完全な例については、このノートブックを参照してください。

エージェントプロジェクトを作成する

AgentCore CLI を使用して新しいプロジェクトを作成します。これにより、プロジェクトフォルダ、仮想環境、依存関係が設定されます。

npm install -g @aws/agentcore agentcore create --name StrandsClaudeGettingStarted

プロジェクトのエージェントディレクトリで、デフォルトのエージェントコードを独自のエージェントロジックに置き換えます。Strands Agents SDK を使用する例を次に示します。

## app/StrandsClaudeGettingStarted/main.py from strands import Agent, tool from strands_tools import calculator from bedrock_agentcore.runtime import BedrockAgentCoreApp from strands.models import BedrockModel app = BedrockAgentCoreApp() @tool def weather(): """Get weather""" return "sunny" model = BedrockModel( model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0", ) agent = Agent( model=model, tools=[calculator, weather], system_prompt="You're a helpful assistant. You can do simple math calculation, and tell the weather." ) @app.entrypoint def strands_agent_bedrock(payload): """Invoke the agent with a payload""" user_input = payload.get("prompt") response = agent(user_input) return response.message['content'][0]['text'] if __name__ == "__main__": app.run()

エージェントをデプロイして呼び出す

エージェントを AgentCore ランタイムにデプロイします。AgentCore CLI は、パッケージング、デプロイ、自動 OTEL 計測を処理します。

cd StrandsClaudeGettingStarted agentcore deploy

デプロイ後、エージェントは AgentCore ランタイムで実行され、OpenTelemetry を使用して自動的に計測されます。エージェントを呼び出し、Amazon CloudWatch の GenAI Observability ダッシュボードでトレース、セッション、メトリクスを表示します。

agentcore invoke

または、 AWS SDK を使用してプログラムでエージェントを呼び出すこともできます。

import boto3, json client = boto3.client('bedrock-agentcore') response = client.invoke_agent_runtime( agentRuntimeArn="YOUR_AGENT_RUNTIME_ARN", runtimeSessionId="my-observability-session-001", payload=json.dumps({"prompt": "What is 2 + 2?"}), qualifier="DEFAULT" ) print(json.loads(response['response'].read()))

ステップ 3: Amazon Bedrock AgentCore でホストされていないエージェントのオブザーバビリティを有効にする

Amazon Bedrock AgentCore ランタイムの外部で実行されているエージェントの場合、独自のインフラストラクチャにデプロイされたエージェントに同じモニタリング機能を提供できます。これにより、エージェントが実行される場所に関係なく、一貫したオブザーバビリティが可能になります。次の手順を使用して、エージェントの監視に必要な環境変数を設定します。

完全な例については、GitHub ウェブサイトの「Amazon EKS でのエージェントのサンプル」を参照してください。

AWS 環境変数を設定する

export AWS_ACCOUNT_ID=<account id> export AWS_DEFAULT_REGION=<default region> export AWS_REGION=<region> export AWS_ACCESS_KEY_ID=<access key id> export AWS_SECRET_ACCESS_KEY=<secret key>

CloudWatch ログ記録を設定する

Amazon CloudWatch でエージェントのロググループとログストリームを作成します。これを使用して、以下の環境変数を設定できます。

OpenTelemetry 環境変数を設定する

export AGENT_OBSERVABILITY_ENABLED=true # Activates the ADOT pipeline export OTEL_PYTHON_DISTRO=aws_distro # Uses AWS Distro for OpenTelemetry export OTEL_PYTHON_CONFIGURATOR=aws_configurator # Sets AWS configurator for ADOT SDK export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf # Configures export protocol export OTEL_EXPORTER_OTLP_LOGS_HEADERS=x-aws-log-group=<YOUR-LOG-GROUP>,x-aws-log-stream=<YOUR-LOG-STREAM>,x-aws-metric-namespace=<YOUR-NAMESPACE> # Directs logs to CloudWatch groups export OTEL_EXPORTER_OTLP_TRACES_HEADERS=x-aws-log-group=<YOUR-LOG-GROUP>,x-aws-log-stream=<YOUR-TRACES-LOG-STREAM> # (Optional) Directs spans to your log group instead of the aws/spans log group. Requires ADOT version 0.18.0 or later. export OTEL_RESOURCE_ATTRIBUTES=service.name=<YOUR-AGENT-NAME> # Identifies your agent in observability data export OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false # AWS Lambda Layer for OpenTelemetry only: disables Application Signals export OTEL_LOGS_EXPORTER=otlp # AWS Lambda Layer for OpenTelemetry only: exports logs over OTLP export OTEL_METRICS_EXPORTER=awsemf # AWS Lambda Layer for OpenTelemetry only: exports metrics as CloudWatch EMF

<YOUR-AGENT-NAME> を一意の名前に置き換えて、GenAI Observability ダッシュボードとログでこのエージェントを識別します。

注記

独自のロググループにスパンを配信OTEL_EXPORTER_OTLP_TRACES_HEADERSするように を設定する場合は、Amazon CloudWatch Logs リソースポリシーも追加する必要があります。このポリシーでは、X-Ray (xray.amazonaws.com) がそのロググループlogs:PutLogEventsで を呼び出すことを許可する必要があります。「 API を使用してトランザクション検索を有効にする」に示されているのと同じポリシーを、 のロググループの ARN とともに使用しますResource。このポリシーがないと、X-Ray はロググループにスパンを配信できません。

ローカルでエージェントを作成する

# Create agent.py - Strands agent that is a weather assistant from strands import Agent from strands_tools import http_request # Define a weather-focused system prompt WEATHER_SYSTEM_PROMPT = """You are a weather assistant with HTTP capabilities. You can: 1. Make HTTP requests to the National Weather Service API 2. Process and display weather forecast data 3. Provide weather information for locations in the United States When retrieving weather information: 1. First get the coordinates or grid information using https://api.weather.gov/points/{latitude},{longitude} or https://api.weather.gov/points/{zipcode} 2. Then use the returned forecast URL to get the actual forecast When displaying responses: - Format weather data in a human-readable way - Highlight important information like temperature, precipitation, and alerts - Handle errors appropriately - Convert technical terms to user-friendly language Always explain the weather conditions clearly and provide context for the forecast. """ # Create an agent with HTTP capabilities weather_agent = Agent( system_prompt=WEATHER_SYSTEM_PROMPT, tools=[http_request], # Explicitly enable http_request tool ) response = weather_agent("What's the weather like in Seattle?") print(response)

自動計測コマンドを使用してエージェントを実行する

requirements.txt aws-opentelemetry-distroの では、 opentelemetry-instrument コマンドは次のようになります。

  • 環境変数から OTEL 設定をロードする

  • ストランド、Amazon Bedrock コール、エージェントツールとデータベース、およびエージェントによって行われたその他のリクエストを自動的に計測する

  • CloudWatch にトレースを送信する

  • GenAI Observability ダッシュボードでエージェントの意思決定プロセスを視覚化できます

次のコマンドを使用して、自動計測でエージェントを実行します。

opentelemetry-instrument python agent.py

AWS Lambda でエージェントをホストする場合は、 AWS Distro AWS for OpenTelemetry ウェブサイトの Lambda Layer for OpenTelemetry を使用します。関数に Layer を追加し、AWS_LAMBDA_EXEC_WRAPPER環境変数を に設定します/opt/otel-instrument。次に、レイヤーは関数を自動計測します。この方法では、aws-opentelemetry-distroパッケージを追加したり、前述のopentelemetry-instrumentコマンドを実行したりする必要はありません。

ADOT Collector はエージェントのオブザーバビリティではサポートされていません

ADOT Collector は、エージェントのオブザーバビリティではサポートされていません。AgentCore ランタイムの外部でホストされているエージェントからテレメトリを送信するには、ADOT SDK または AWS Lambda Layer for OpenTelemetry を使用する必要があります。

環境変数で設定した YOUR-AGENT-NAME の値を使用して、Amazon CloudWatch の GenAI Observability Dashboard でトレース、セッション、メトリクスを表示できるようになりました。

複数のエージェント実行にまたがるトレースを関連付けるには、OpenTelemetry パーティクルを使用してセッション ID をテレメトリデータに関連付けることができます。

from opentelemetry import baggage, context ctx = baggage.set_baggage("session.id", session_id)

ステップ 4: Amazon CloudWatch で GenAI オブザーバビリティを使用してエージェントを監視する

オブザーバビリティを実装したら、CloudWatch で収集されたデータを表示できます。

エージェントを監視する

  1. CloudWatch コンソールで GenAI Observability を開きます。

  2. Bedrock Amazon Bedrock AgentCore のダッシュボードで、モデル呼び出しとエージェントに関連するデータを表示できます。

  3. Bedrock エージェントコアタブでは、エージェントビュー、セッションビュー、トレースビューを表示できます。

  4. エージェントビューには、ランタイム時ではなくオンになっているすべてのエージェントが一覧表示されます。エージェントを選択して、ランタイムメトリクス、セッション、エージェントに固有のトレースなどの詳細を表示することもできます。

  5. セッションビュータブでは、エージェントに関連付けられたすべてのセッションをナビゲートできます。

  6. トレースビュータブでは、エージェントのトレースとスパン情報を確認できます。また、トレースを選択してトレースの軌跡とタイムラインを調べます。

CloudWatch のログを表示

CloudWatch でログを表示するには

  1. CloudWatch コンソールを開く

  2. 左側のナビゲーションペインで、ログを展開し、ロググループを選択します。

  3. エージェントのロググループを検索します。

    • 標準ログ (stdout/stderr) の場所: /aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>/[runtime-logs] <UUID>

    • OTEL 構造化ログ: /aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>/runtime-logs

トレースとスパンを表示します

トレースとスパンを表示するには

  1. CloudWatch コンソールを開く

  2. 左側のナビゲーションからトランザクション検索を選択する

  3. 場所: エージェントのspansロググループ内のログストリーム (/aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>)default、または共有スパン送信先を使用するエージェントのaws/spansロググループ内のログストリーム

  4. サービス名またはその他の基準でフィルタリングする

  5. トレースを選択して詳細な実行グラフを表示する

メトリクスの表示

メトリクスを表示するには

  1. CloudWatch コンソールを開く

  2. 左側のナビゲーションからメトリクスを選択する

  3. bedrock-agentcore 名前空間を参照する

  4. 利用可能なメトリクスを調べる

ベストプラクティス

  1. シンプルから始めて展開 - Amazon Bedrock AgentCore が提供するデフォルトのオブザーバビリティは、モデル呼び出し、トークンの使用、ツールの実行など、最も重要なメトリクスを自動的にキャプチャします。

  2. 開発ステージ用に を設定する - 現在の開発フェーズに合わせてオブザーバビリティ設定を調整し、徐々に調整します。

  3. 一貫した命名を使用する - サービス、スパン、属性の命名規則を最初から確立する

  4. 機密データのフィルタリング - オブザーバビリティ属性とペイロードから機密データをフィルタリングすることで、機密情報の漏洩を防止します。

  5. アラートの設定 - ユーザーに影響を与える前に潜在的な問題を通知するように CloudWatch アラームを設定します。