内容
# Bedrock Ops Lens
Bedrock Ops Lens 是一个可观测性仪表盘,您可以在自己的 AWS 账户中部署,同时它还包括一个 MCP 服务器,向 Claude Code、Cursor 和 Kiro(CLI 或 IDE)公开相同的数据。

## 功能描述
Cost Explorer 将 Bedrock 的所有功能整合到一行。CloudWatch 按账户显示。调用日志存储在 S3 中为 JSON 格式。该仪表盘连接这三个信号,您可以在一个地方看到每个账户、每个模型、每个标签的归因信息。MCP 向您的 IDE 公开相同的数据,您可以提问而不是点击标签。
## 使用方式
```mermaid
flowchart TB
subgraph A["Tier A. MCP only"]
direction TB
A1["您,在您的 IDE 中"]
A2["bedrock-lens-mcp<br/>在本地运行"]
A1 --> A2
end
subgraph B["Tier B. 完整仪表盘"]
direction TB
B1["您,在浏览器中<br/>或在您的 IDE 中"]
B2["Web 仪表盘<br/>+ bedrock-lens-mcp"]
B3["托管后端<br/>每日刷新"]
B1 --> B2 --> B3
end
bottom[("您的 AWS 账户。<br/>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 中快速获得答案,无需基础设施。不能进行大量历史或标签归因工作,因为没有数据库。 |
| B. 完整仪表盘 | 财务、领导层或任何没有 AWS 访问权限的人需要相同的洞察力。包括 Web UI 和 MCP。 |
Tier A 很轻量。MCP 在您的笔记本电脑上运行,并实时调用 AWS APIs。适用于快速查找,但不能进行大量历史工作或每个标签的成本归因,因为它后面没有数据库。
Tier B 是其他所有内容。Cloudscape Web 仪表盘、登录、CloudFront、每日摄取器、Aurora、Memcached,以及与托管后端连接的相同 MCP。大多数团队部署此内容,以便非工程师可以获得相同的洞察力,而无需终端。
## 快速开始
```bash
git clone https://github.com/aws-samples/sample-bedrock-ops-lens.git
cd sample-bedrock-ops-lens
cp config.example.yaml config.yaml # 然后编辑:deploy_region,monitored accounts/regions
ALLOWED_EMAIL_DOMAINS=yourcompany.com ./deploy.sh --yes
```
`config.yaml` 是必需的(它驱动部署区域和要监控的账户/区域)。复制示例并在部署前编辑它;默认设置适用于单账户、单区域设置。
脚本处理所有内容:VPC、Aurora、Memcached、Cognito、CloudFront、WAF、模式、摄取器和首次摄取运行。大约 12 分钟。完成后,它会打印仪表盘 URL。
打开仪表盘 URL 并注册。任何电子邮件域与 `ALLOWED_EMAIL_DOMAINS` 匹配的用户都可以创建自己的账户;第一个经过验证的用户会自动晋升为管理员。
## 连接 MCP
首先安装 MCP 服务器。
```bash
cd mcp
pipx install -e .
```
选择与您的部署方式相匹配的选项。
<details>
<summary><b>选项 1. Tier A. 无部署,使用您的本地 AWS 凭证</b></summary>
最适合:快速的个人设置。MCP 直接调用 AWS。
```bash
claude mcp add bedrock-lens -- bedrock-lens-mcp
```
</details>
<details>
<summary><b>选项 2. Tier B,无密码(如果您有 AWS 凭证,则推荐)</b></summary>
最适合:任何具有 AWS 凭证并已部署堆栈的人。使用 SigV4 签名,因此无需管理 Cognito 密码。
```bash
FN_URL=$(aws cloudformation describe-stacks \
--stack-name BedrockOpsLens-<suffix> \
--query 'Stacks[0].Outputs[?OutputKey==`BackendLambdaUrl`].OutputValue' \
--output text)
claude mcp add bedrock-lens \
--env BEDROCK_LENS_FUNCTION_URL="$FN_URL" \
-- bedrock-lens-mcp
```
</details>
<details>
<summary><b>选项 3. Tier B 带有 Cognito 密码(适用于没有 AWS 凭证的用户)</b></summary>
最适合:与没有 AWS 凭证的人共享访问权限。他们使用电子邮件和密码登录。
在设置环境变量之前,请设置您的凭证,然后添加服务器。不要提交密码。
```bash
export BEDROCK_LENS_API=https://<distribution>.cloudfront.net
export BEDROCK_LENS_USER=you@yourcompany.com
export BEDROCK_LENS_PASSWORD=... # 在此处粘贴密码,不要检查
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
```
</details>
然后询问 Claude 类似的问题:
> 运行 bedrock-lens 健康检查。
> 我们过去 30 天的 Bedrock 支出是多少,哪一天的支出最大?
> 我们是否正在使用任何旧版或即将过期的模型?
> 运行过去 14 天的运维审查,并总结前 3 个问题。
## 每日刷新
部署后,EventBridge 每天 UTC 时间 05:00 调用摄取器。摄取器从 S3 读取 CloudWatch 指标、Cost Explorer、Service Quotas、Bedrock APIs 和 Bedrock 调用日志,然后将所有内容写入 Aurora 并更新缓存生成。第二天早上打开仪表盘,昨天的數據就有了。
如果您更改计划或需要重新运行,请手动回填:
```bash
aws lambda invoke \
--function-name BedrockOpsLens-<suffix>-ingester \
--invocation-type RequestResponse --cli-read-timeout 900 \
/tmp/out.json
```
## 多账户数据管道
中心 Lambda 从您指向的所有账户中提取 Bedrock 数据。一个脚本完成了整个过程:它通过 CloudFormation StackSet 将只读 `BedrockOpsLensReader` 角色部署到每个账户,重新配置中心摄取器以使用这些角色,并同步触发第一个摄取运行,以便您立即看到真实数据。
```bash
./setup-pipeline.sh --scope <single|ou|org-root|accounts> [opts]
```
对于 Cost Explorer,不需要每个账户的角色 - 管理账户的 Cost Explorer 原生支持组织,中心 Lambda 调用它一次。
<details>
<summary><b>选项 1. 仅限我的账户(single)</b></summary>
最简单的用例。没有 StackSet。读取器角色部署到中心账户本身;摄取器从此账户拉取数据。
```bash
./setup-pipeline.sh --scope single
```
</details>
<details>
<summary><b>选项 2. 一个或多个 OU 下的所有账户(推荐用于组织)</b></summary>
服务托管的 StackSet,部署到您列出的 OU。自动部署已开启,因此后期加入 OU 的账户将自动加入。 从管理账户运行,或从委托管理员账户传递 `--delegated-admin`。
```bash
./setup-pipeline.sh --scope ou --ou-id ou-xxxx-yyyyyyyy
```
对于多个 OU,请用逗号分隔。
</details>
<details>
<summary><b>选项 3. 整个组织根目录</b></summary>
与选项 2 相同,但目标是组织中的每个账户。适用于小型组织,其中 OU 范围不是必需的。
```bash
./setup-pipeline.sh --scope org-root
```
</details>
<details>
<summary><b>选项 4. 显式账户列表(无 AWS 组织)</b></summary>
自管理 StackSet。不需要 AWS 组织,但每个成员账户需要 AWS 提供的 `AWSCloudFormationStackSetExecutionRole` 预先配置(一次,按照 [AWS 文档](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html))。
```bash
./setup-pipeline.sh --scope accounts \
--accounts 111111111111,222222222222,333333333333
```
或通过文件:
```bash
./setup-pipeline.sh --scope accounts \
--accounts-file accounts.txt
```
</details>
该脚本是幂等的 - 随时重新运行,添加或删除账户。使用 `--dry-run` 预览而不做任何更改,使用 `--skip-ingest` 跳过部署后的摄取运行。
### `setup-pipeline.sh` 执行的操作
1. 验证中心堆栈存在(从 `.deploy-stack-name` 自动发现)。
2. 调用 `scripts/setup-multi-account.py` 通过正确的 CloudFormation API 推出读取器角色,具体取决于所选范围(`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 形状发生变化时,请重新运行脚本。
### 规模
已验证可扩展到约 100 个账户,每个摄取器 Lambda。超出此范围,中心 Lambda 开始达到 CloudWatch(50 TPS)和 Service Quotas(5 TPS)的每个账户 API 限制。
对于较大的组织(200+ 账户),请按 OU 分片并为每个分片运行一个 StackSet,每个分片生成自己的摄取器:
```bash
./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 → 中心摄取器)。
## 仪表盘选项卡
| 选项卡 | 答案 |
|---|---|
| 概览 | 总请求数、账户数、令牌数、错误率、窗口内的花费 |
| 配额 | 已应用与默认配额、峰值使用量、严重程度编码的利用率 |
| 成本洞察 | 真实的 Cost Explorer 美元、每日趋势、按账户和模型分类的明细 |
| 健康和错误 | 按模型、账户、每日和每小时趋势显示的错误 |
| 延迟 | 按模型显示的 p50、p90、p99 |
| 容量和采用率 | CRIS 采用率、限制速率、提示缓存机会、Claude 4 降级风险 |
| 模型洞察 | 按模型深入分析:请求、令牌、缓存命中率、错误、账户 |
| 模型生命周期 | Live ListFoundationModels 加入使用情况,旧版和 EOL 波段的时间线 |
| 运维审查 | LLM 综合的执行摘要,涵盖前 3 个问题 |
| 设置 | 身份验证身份、摄取新鲜度、区域和账户范围、固定的标签键 |
## 成本
空闲时,Aurora 暂停,堆栈运行成本约为每月五十美元。NAT Gateway 是最大的固定成本,约为每月三十两美元。Aurora 根据活动情况在零至四十五美元之间。ElastiCache Memcached 约为每月十三美元。Lambda、CloudFront、S3、Cognito 和 WAF 总共约为每月五美元。
## 验证
```bash
DASH_URL=$(aws cloudformation describe-stacks \
--stack-name BedrockOpsLens-<suffix> \
--query 'Stacks[0].Outputs[?OutputKey==`DashboardUrl`].OutputValue' \
--output text)
curl -sf "$DASH_URL/api/health"
```
进行端到端 UI 验证:
```bash
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
```
## 本地开发
```bash
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 应用程序和摄取器代码相同。
## 删除
```bash
./deploy.sh destroy
```
Cognito User Pool 和 SPA 存储桶在删除时故意保留,以便重新部署不会重置用户。如需完全清理账户,请手动删除它们。
## 许可证
MIT License。详情请参见 `LICENSE`。