View a markdown version of this page

开始使用可 AgentCore 观察性 - Amazon Bedrock AgentCore

开始使用可 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 可观测性提供了两种配置监控以满足不同基础设施需求的方法:

  1. 亚马逊 Bedrock 代理商 AgentCore Runtime-hosted

  2. Non-runtime 托管代理

作为每个 AWS 账户一次性设置,首次使用的用户需要在 Amazon 上启用 “交易搜索” CloudWatch。有两种方法可以做到这一点,即通过 API 和通过 CloudWatch 控制台。

启用 Transaction Search 后,可能需要十分钟才能使用跨度进行搜索和分析。选择以下选项之一:

选项 1:使用 API 启用交易搜索

使用 API 启用交易搜索

  1. 使用 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" } } } ]}'
  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. 在导航窗格中的 “设置” 下,选择 “设置”

  3. 选择 “账户”,然后选择 “X-Ray 跟踪” 选项卡。

  4. 在 “交易搜索” 部分,选择查看设置

  5. 在打开的页面上,选择编辑

  6. 选择启用 Transaction Search

  7. 选择 “面向 X-Ray 用户”,然后输入要编制索引的跟踪百分比。您可以免费索引 1% 的轨迹,稍后再根据需要调整此百分比。

  8. 选择保存。等待 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 OpenTelemetry 将图层添加到您的函数中,然后将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

观察你的经纪人

  1. 在主机上打开 GenAI 可观察性 CloudWatch

  2. 你可以在控制面板上的 Bedrock Amazon B AgentCore edrock 上查看与模型调用和代理相关的数据。

  3. 在 Bedrock Agentcore 选项卡中,您可以查看 “代理视图”、“会话视图” 和 “跟踪视图”。

  4. Agents View 列出了所有处于运行状态和未处于运行状态的代理,您还可以选择代理并查看更多详细信息,例如运行时指标、会话和特定于代理的跟踪。

  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 警报,以便在潜在问题影响用户之前通知您