开始使用可 AgentCore 观察性
Amazon Bedrock Amazon Bedrock 可 AgentCore 观测性可帮助您跟踪、调试和监控生产环境中的代理性能。本指南可帮助您在代理应用程序中实现可观察性功能。
主题
先决条件
在开始之前,请确保你有:
-
AWS 配置了凭据的@@ 账户 (
aws configure),并启用了您要使用的基础模型的模型访问权限。 -
已@@ 安装 Python 3.10+
-
在 Amazon 上@@ 启用交易搜索 CloudWatch。只有一次,首次使用的用户必须启用CloudWatch 交易搜索才能查看 Bedrock Amazon Bedrock 跨度和 AgentCore 轨迹
-
(仅限Non-runtime 代理)添加 OpenTelemetry 库 — 在 requirements.txt 文件中包含
aws-opentelemetry-distro(ADOT)。如果您在 AWS Lambda 上托管代理,请改为使用发行版 OpenTelemetry网站上的AWS Lambda 层。 AWS OpenTelemetry -
(仅限Non-runtime 代理)确保您的框架已配置为发出跟踪(例如,
strands-agents[otel]包)。有时您可能需要包括代理框架的自动分析器(例如,opentelemetry-instrumentation-langchain)。
Amazon Bedrock AgentCore 可观测性提供了两种配置监控以满足不同基础设施需求的方法:
-
亚马逊 Bedrock 代理商 AgentCore Runtime-hosted
-
Non-runtime 托管代理
作为每个 AWS 账户一次性设置,首次使用的用户需要在 Amazon 上启用 “交易搜索” CloudWatch。有两种方法可以做到这一点,即通过 API 和通过 CloudWatch 控制台。
第 1 步:启用交易搜索 CloudWatch
启用 Transaction Search 后,可能需要十分钟才能使用跨度进行搜索和分析。选择以下选项之一:
选项 1:使用 API 启用交易搜索
使用 API 启用交易搜索
-
使用 CLI AWS 创建策略,授予对 CloudWatch 日志中采集跨度的访问权限。
下面显示了如何使用格式化 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" } } } ]}' -
配置追踪线段的目的地。
下面显示了如何使用格式化 AWS CLI 命令的示例
UpdateTraceSegmentDestination。aws xray update-trace-segment-destination --destination CloudWatchLogs -
可选配置要索引的跨度数量。
使用配置所需的采样百分比
UpdateIndexingRule。aws xray update-indexing-rule --name "Default" --rule '{"Probabilistic": {"DesiredSamplingPercentage": number}}'
选项 2:在 CloudWatch 控制台中启用交易搜索
在 CloudWatch 控制台中启用交易搜索
-
打开 CloudWatch 控制台,网址为https://console.aws.amazon.com/cloudwatch/
。 -
在导航窗格中的 “设置” 下,选择 “设置”。
-
选择 “账户”,然后选择 “X-Ray 跟踪” 选项卡。
-
在 “交易搜索” 部分,选择查看设置。
-
在打开的页面上,选择编辑。
-
选择启用 Transaction Search。
-
选择 “面向 X-Ray 用户”,然后输入要编制索引的跟踪百分比。您可以免费索引 1% 的轨迹,稍后再根据需要调整此百分比。
-
选择保存。等待 Ingest OpenTelemetry 跨度显示为 “已启用” 后再发送跟踪。
现在让我们继续探讨配置可观测性的两种方法。
第 2 步:为 Amazon Bedrock AgentCore Runtime 托管的代理启用可观察性
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 Runtime 上运行,并使用 OpenTelemetry自动进行检测。调用您的代理并在 Amazon 的 GenAI 可观察性控制面板上查看跟踪、会话和指标: CloudWatch
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 步:为非亚马逊 Bedrock 代理启用可观察性 AgentCore-hosted
对于在 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 可观察性控制面板和日志中识别此代理。
注意
如果您设置为OTEL_EXPORTER_OTLP_TRACES_HEADERS将跨度传送到自己的日志组,则还必须添加 Amazon Lo CloudWatch gs 资源策略。该策略必须允许 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)
使用自动检测命令运行代理
aws-opentelemetry-distro在你的 requirements.txt 中,该opentelemetry-instrument命令将:
-
从您的环境变量中加载您的 OTEL 配置
-
自动检测 Strands、Amazon Bedrock 呼叫、代理工具和数据库以及代理发出的其他请求
-
将跟踪发送到 CloudWatch
-
使您能够在 GenAI 可观测性仪表板中可视化代理的决策过程
使用以下命令通过自动检测运行代理:
opentelemetry-instrument python agent.py
如果您在 AWS Lambda 上托管代理,请使用发行版网站 OpenTelemetry上的 AWS Lambda 层AWS_LAMBDA_EXEC_WRAPPER环境变量设置为/opt/otel-instrument。然后,该图层会自动对你的函数进行乐器。使用这种方法,您无需添加aws-opentelemetry-distro软件包或运行前面描述的opentelemetry-instrument命令。
代理可观察性不支持 ADOT 收集器
代理可观察性不支持 ADOT 收集器。要从 AgentCore 运行时之外托管的代理发送遥测数据,您必须使用 ADOT SDK 或 Lambda 层 AWS 。 OpenTelemetry
现在,您可以使用您在环境变量中配置的值在 Amazon 的 GenAI 可观察性控制面板上查看您的 CloudWatch 跟踪、会话和指标。YOUR-AGENT-NAME
要关联多个代理运行中的跟踪,您可以使用行李将会话 ID 与遥测 OpenTelemetry 数据相关联:
from opentelemetry import baggage, context ctx = baggage.set_baggage("session.id", session_id)
第 4 步:在亚马逊上使用 GenAI 可观察性观察您的代理 CloudWatch
实现可观测性后,您可以在以下位置查看收集的数据: CloudWatch
观察你的经纪人
-
在主机上打开 GenAI 可观察性 CloudWatch
-
你可以在控制面板上的 Bedrock Amazon B AgentCore edrock 上查看与模型调用和代理相关的数据。
-
在 Bedrock Agentcore 选项卡中,您可以查看 “代理视图”、“会话视图” 和 “跟踪视图”。
-
Agents View 列出了所有处于运行状态和未处于运行状态的代理,您还可以选择代理并查看更多详细信息,例如运行时指标、会话和特定于代理的跟踪。
-
在 “会话视图” 选项卡中,您可以浏览与代理关联的所有会话。
-
在跟踪视图选项卡中,您可以查看代理的跟踪和跨度信息。还可以通过选择轨迹来探索轨迹轨迹和时间轴。
查看日志 CloudWatch
要查看登录信息 CloudWatch
-
在左侧导航窗格中,展开日志,然后选择日志组
-
搜索您的代理的日志组:
-
标准日志 (stdout/stderr) 位置:
/aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>/[runtime-logs] <UUID> -
OTEL 结构化日志:
/aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>/runtime-logs
-
查看跟踪数据与跨度信息
查看轨迹和跨度
-
从左侧导航栏中选择 “交易搜索”
-
位置:代理
spans日志组 (/aws/bedrock-agentcore/runtimes/<agent_id>-<endpoint_name>) 中的default日志流,或者使用共享跨度目标的代理的aws/spans日志组中的日志流 -
按服务名称或其他条件筛选
-
选择一条跟踪以查看详细的执行图
查看指标
查看指标
-
从左侧导航栏中选择指标
-
浏览到
bedrock-agentcore命名空间 -
浏览可用指标
最佳实践
-
从简单开始,然后展开-Amazon Bedrock 提供的默认可观察性会自动 AgentCore 捕获大多数关键指标,包括模型调用、令牌使用情况和工具执行。
-
针对开发阶段进行配置-定制您的可观察性配置以匹配您当前的开发阶段,并逐步进行调整。
-
使用一致的命名-从一开始就为服务、跨度和属性建立命名约定
-
筛选敏感数据-通过筛选可观测性属性和有效载荷中的敏感数据,防止机密信息泄露。
-
设置警报-配置 CloudWatch 警报,以便在潜在问题影响用户之前通知您