aws-samples/sample-bedrock-ops-lens

GitHub: aws-samples/sample-bedrock-ops-lens

一个可一键部署到 AWS 账户的 Amazon Bedrock 可观测性仪表板,整合成本、配额、延迟与错误等运维信号,并提供 MCP server 供 IDE 内查询。

Stars: 4 | Forks: 1

# Bedrock Ops Lens 一个您可以部署在自己 AWS 账户中的 Bedrock 可观测性仪表板,外加一个 MCP server,可将相同的数据暴露给 Claude Code、Cursor 和 Kiro(CLI 或 IDE)。 ![架构](https://raw.githubusercontent.com/aws-samples/sample-bedrock-ops-lens/main/images/architecture.png) ## 它的功能 Cost Explorer 会将所有 Bedrock 的数据汇总到一行。CloudWatch 是按账户划分的。调用日志是 S3 中的 JSON 格式。此仪表板将这三个信号结合在一起,让您可以在一处查看按账户、按模型、按标签的归因。MCP 将相同的数据暴露给您的 IDE,这样您可以直接提问,而无需点击切换标签页。 ## 两种使用方式 ``` flowchart TB subgraph A["Tier A. MCP only"] direction TB A1["You, in your IDE"] A2["bedrock-lens-mcp
running locally"] A1 --> A2 end subgraph B["Tier B. Full dashboard"] direction TB B1["You, in a browser
or in your IDE"] B2["Web dashboard
+ bedrock-lens-mcp"] B3["Hosted backend
with daily refresh"] B1 --> B2 --> B3 end bottom[("Your AWS account.
Bedrock, CloudWatch, Cost Explorer, Service Quotas.")] A2 --> bottom B3 --> bottom classDef tierBox fill:#fff8d6,stroke:#b89b1a,stroke-width:1px,color:#000 classDef innerBox fill:#dcd6f7,stroke:#6c5ce7,stroke-width:1px,color:#000 classDef sharedBox fill:#fff8d6,stroke:#b89b1a,stroke-width:1px,color:#000 class A,B tierBox class A1,A2,B1,B2,B3 innerBox class bottom sharedBox ``` | 层级 | 适用场景 | |---|---| | A. 仅 MCP | 您希望在 IDE 中快速获取答案,且无需基础设施。由于没有数据库,无法处理繁重的历史数据或标签归因工作。 | | C. 完整仪表板 | 适用于财务、领导层或任何无法访问 AWS 但需要相同洞察的人员。包括 Web UI 和 MCP。 | Tier A 非常轻量。MCP 在您的笔记本电脑上运行并实时调用 AWS API。适用于快速查询,但由于背后没有数据库支持,无法进行繁重的历史数据查询或按标签的成本归因。 Tier B 包含了其他所有内容。包括 Cloudscape Web 仪表板、登录、CloudFront、每日摄取器(ingester)、Aurora、Memcached,以及配置为与托管后端通信的相同 MCP。大多数团队会部署此层级,以便非工程师人员无需终端即可获得相同的洞察。 ## 快速开始 ``` git clone https://github.com/aws-samples/sample-bedrock-ops-lens.git cd sample-bedrock-ops-lens cp config.example.yaml config.yaml # then edit: deploy_region, monitored accounts/regions ALLOWED_EMAIL_DOMAINS=yourcompany.com ./deploy.sh --yes ``` 必须提供 `config.yaml`(它决定了部署区域以及要监控哪些账户/区域)。请在部署前复制示例文件并进行编辑;默认设置适用于单账户、单区域的配置。 该脚本处理一切事务:VPC、Aurora、Memcached、Cognito、CloudFront、WAF、schema、摄取器以及首次数据摄取运行。大约需要 12 分钟。完成时会打印仪表板 URL。 打开仪表板 URL 并注册。任何电子邮件域名与 `ALLOWED_EMAIL_DOMAINS` 匹配的用户都可以创建自己的账户;第一个通过验证的用户将被自动提升为管理员。 ## 连接 MCP 首先安装 MCP server。 ``` cd mcp pipx install -e . ``` 选择与您部署方式相匹配的选项。
选项 1. Tier A。无需部署,使用您的本地 AWS 凭证 最适合:快速的个人设置。MCP 直接调用 AWS。 ``` claude mcp add bedrock-lens -- bedrock-lens-mcp ```
选项 2. Tier B,无密码(如果您有 AWS 凭证,推荐使用) 最适合:任何拥有 AWS 凭证并已部署该技术栈的用户。使用 SigV4 签名,因此无需管理 Cognito 密码。 ``` FN_URL=$(aws cloudformation describe-stacks \ --stack-name BedrockOpsLens- \ --query 'Stacks[0].Outputs[?OutputKey==`BackendLambdaUrl`].OutputValue' \ --output text) claude mcp add bedrock-lens \ --env BEDROCK_LENS_FUNCTION_URL="$FN_URL" \ -- bedrock-lens-mcp ```
选项 3. 带有 Cognito 密码的 Tier B(适用于没有 AWS 凭证的用户) 最适合:与没有 AWS 凭证的人员共享访问权限。他们改为使用电子邮件和密码登录。 首先将您的凭证设置为环境变量,然后添加服务器。切勿提交密码。 ``` export BEDROCK_LENS_API=https://.cloudfront.net export BEDROCK_LENS_USER=you@yourcompany.com export BEDROCK_LENS_PASSWORD=... # paste the password here, do not check it in claude mcp add bedrock-lens \ --env BEDROCK_LENS_API="$BEDROCK_LENS_API" \ --env BEDROCK_LENS_USER="$BEDROCK_LENS_USER" \ --env BEDROCK_LENS_PASSWORD="$BEDROCK_LENS_PASSWORD" \ -- bedrock-lens-mcp ```
然后向 Claude 提问,例如: ## 每日刷新 如果您更改了计划或想要进行一次全新的运行,可手动进行数据回填(backfill): ``` aws lambda invoke \ --function-name BedrockOpsLens--ingester \ --invocation-type RequestResponse --cli-read-timeout 900 \ /tmp/out.json ``` ## 多账户数据 pipeline 中央 Lambda 会从您指向的每个账户中提取 Bedrock 数据。只需一个脚本即可完成所有操作:它通过 CloudFormation StackSet 将一个只读的 `BedrockOpsLensReader` 角色部署到每个账户中,重新配置中央摄取器以使用这些角色,并同步触发首次数据摄取运行,以便您立即看到真实数据。 ``` ./setup-pipeline.sh --scope [opts] ``` 对于 Cost Explorer,根本不需要每个账户的角色 —— 管理账户的 Cost Explorer 原生支持组织感知(org-aware),中央 Lambda 只需调用它一次即可。
选项 1. 仅我自己的账户(单账户) 最简单的情况。没有 StackSet。将 Reader 角色部署到中央账户本身;摄取器从这一个账户提取数据。 ``` ./setup-pipeline.sh --scope single ```
选项 2. 一个或多个 OU 下的所有账户(推荐用于组织) 服务管理的 StackSet,部署到您列出的 OU。自动部署已开启,因此稍后加入 OU 的账户会被自动接入。从管理账户运行,或者从委托管理员账户传递 `--delegated-admin`。 ``` ./setup-pipeline.sh --scope ou --ou-id ou-xxxx-yyyyyyyy ``` 对于多个 OU,请用逗号分隔。
选项 3. 整个组织根节点 与选项 2 相同,但针对组织中的每个账户。适用于小型组织,在这种情况下进行 OU 范围划分并不划算。 ``` ./setup-pipeline.sh --scope org-root ```
选项 4. 显式账户列表(无 AWS Organizations) 自我管理的 StackSet。不需要 AWS Organizations,但每个成员账户都需要预先配置 AWS 提供的 `AWSCloudFormationStackSetExecutionRole`(一次性操作,请参阅 [AWS 文档](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html))。 ``` ./setup-pipeline.sh --scope accounts \ --accounts 111111111111,222222222222,333333333333 ``` 或通过文件: ``` ./setup-pipeline.sh --scope accounts \ --accounts-file accounts.txt ```
该脚本是幂等的 —— 在添加或删除账户的任何时候都可以重新运行。使用 `--dry-run` 进行预览而不做任何更改,使用 `--skip-ingest` 跳过推出后的数据摄取运行。 ### `setup-pipeline.sh` 的作用 1. 验证中央技术栈是否存在(从 `.deploy-stack-name` 自动发现)。 2. 调用 `scripts/setup-multi-account.py`,通过适用于所选范围的正确 CloudFormation API 推出 Reader 角色(对于 `ou` / `org-root` 使用服务管理的 StackSet,对于 `accounts` 使用自我管理的 StackSet,对于 `single` 使用普通技术栈)。 3. 重新配置中央摄取器 Lambda 上的 `MONITORED_ACCOUNTS_MODE`(对于 `ou`/`org-root` 为 `discover-org`,对于 `accounts` 为 `explicit`,对于 `single` 为 `single`)。 4. 同步触发一次数据摄取运行并打印模块摘要。 完成此操作后,EventBridge 将于每天 UTC 时间 05:00 触发摄取器。在 OU 结构发生更改的任何时候,请重新运行该脚本。 ### 规模 已验证在单个摄取器 Lambda 中可端到端支持多达约 100 个账户。超过此数量,中央 Lambda 将开始触及 CloudWatch(50 TPS)和 Service Quotas(5 TPS)的按账户 API 限制。 对于较大的组织(200+ 账户),请按 OU 进行分片,并为每个分片运行一个 StackSet,每个分片产生自己的摄取器: ``` ./setup-pipeline.sh --scope ou --ou-id ou-engineering-... ./setup-pipeline.sh --scope ou --ou-id ou-data-... ./setup-pipeline.sh --scope ou --ou-id ou-experimental-... ``` 对于超大型客户(500+ 账户),拉取架构变得不再适合。请与我们联系,我们将引导您使用推送模式模式(CW Metric Streams → Firehose → S3 → 中央摄取器)。 ## 仪表板标签页 | 标签页 | 提供答案 | |---|---| | Overview | 时间窗口内的总请求、账户、token、错误率和支出 | | Quotas | 已应用配额与默认配额对比、峰值使用率、按严重性编码的利用率 | | Cost Insights | 真实的 Cost Explorer 金额、每日趋势、按账户和按模型的明细 | | Health and Errors | 按模型和账户划分的错误、每日和每小时趋势 | | Latency | 按模型划分的 p50、p90、p99 | | Capacity and Adoption | CRIS 采用率、限制率(throttle rates)、prompt 缓存机会、Claude 4 燃尽风险 | | Model Insights | 按模型深入分析:请求、token、缓存命中率、错误、账户 | | Model Lifecycle | 实时 ListFoundationModels 与使用情况结合、旧版本和 EOL 区间的时间线 | | Ops Review | LLM 综合的执行简报,涵盖前 3 大问题 | | Settings | 身份验证、摄取新鲜度、区域和账户范围、固定的标签键 | ## 成本 在空闲状态下(Aurora 暂停时),该技术栈每月的运行成本约为 50 美元。NAT Gateway 是最大的固定成本,约为 32 美元。Aurora 根据活动情况在 0 到 45 美元之间。ElastiCache Memcached 约为 13 美元。Lambda、CloudFront、S3、Cognito 和 WAF 加起来约为 5 美元。 ## 验证 ``` DASH_URL=$(aws cloudformation describe-stacks \ --stack-name BedrockOpsLens- \ --query 'Stacks[0].Outputs[?OutputKey==`DashboardUrl`].OutputValue' \ --output text) curl -sf "$DASH_URL/api/health" ``` 用于端到端的 UI 验证: ``` cd frontend DASH_URL="$DASH_URL" \ TEST_EMAIL="you@yourcompany.com" \ TEST_PASS="$BEDROCK_LENS_PASSWORD" \ npx playwright test tests/deployed-smoke.spec.js --project=chromium --reporter=list ``` ## 本地开发 ``` docker compose up -d psql -d bedrock_lens -f db/schema.sql psql -d bedrock_lens -f db/partitions.sql cd backend && PYTHONPATH=.. uvicorn app.main:app --port 8001 cd frontend && npm install && npm run dev ``` 前端地址为 http://localhost:5173。在 Lambda 中运行的相同 FastAPI 应用程序和相同的摄取器代码,在本地通过 uvicorn 运行。 ## 卸载 ``` ./deploy.sh destroy ``` Cognito User Pool 和 SPA bucket 是故意在删除后保留下来的,这样重新部署时就不会重置用户。如果您想要一个完全干净的账户,请手动删除它们。 ## 许可证 MIT License。有关详细信息,请参阅 `LICENSE`。
标签:逆向工具