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)。

## 它的功能
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 . ``` 选择与您部署方式相匹配的选项。
\
--query 'Stacks[0].Outputs[?OutputKey==`BackendLambdaUrl`].OutputValue' \
--output text)
claude mcp add bedrock-lens \
--env BEDROCK_LENS_FUNCTION_URL="$FN_URL" \
-- bedrock-lens-mcp
```
.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 只需调用它一次即可。
该脚本是幂等的 —— 在添加或删除账户的任何时候都可以重新运行。使用 `--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`。
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-选项 3. 带有 Cognito 密码的 Tier B(适用于没有 AWS 凭证的用户)
最适合:与没有 AWS 凭证的人员共享访问权限。他们改为使用电子邮件和密码登录。 首先将您的凭证设置为环境变量,然后添加服务器。切勿提交密码。 ``` export BEDROCK_LENS_API=https://选项 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 ```标签:逆向工具