用 Amazon Bedrock 发现“监控正常但数据错误”的 BI 看板故障

2026-09-03 36 预计阅读时间: 1 分钟
来源: aws.amazon.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

基础设施监控全部显示绿色,并不代表业务看板是正确的。BI 看板可能加载为空、停留在旧数据、指标突然归零,甚至展示格式正常但内容已经错误。AWS 团队的实践重点,是把看板内容验证自动化,并借助 Amazon Bedrock 扫描数百个看板,在异常出现后的不到一小时内通知负责人,把原本可能持续数天的问题提前暴露出来。

为什么传统监控看不见这类故障

CPU、内存、网络、数据库连接和任务状态监控,主要回答的是“系统是否运行”。看板内容验证回答的则是“用户看到的数据是否可信”。两者之间存在明显空档:

  • 数据管道任务成功结束,但上游输入实际为空。
  • 查询执行成功,却因为过滤条件变化返回零行。
  • 仪表盘服务正常,但缓存没有刷新,用户看到的是过期数据。
  • 指标有数值,但数值超出业务合理范围。
  • 页面和 API 都返回成功状态,但关键组件显示空白或错误提示。

因此,这类方案不能只检查 HTTP 状态码或云资源健康度,而要检查看板的可见内容、更新时间、关键数值和业务约束。AWS 摘要中提到的方案面向数百个看板自动扫描,并向看板所有者告警,目标是把平均检测时间从几天降到一小时以内。

一套可扩展的验证流程

可以把流程拆成五个阶段:

  1. 收集看板样本:通过 BI 平台 API、导出接口或浏览器自动化获取页面截图、组件文本、查询结果和元数据。
  2. 执行确定性检查:先检查页面是否为空、数据时间戳是否过旧、必需字段是否缺失、数值是否越界。
  3. 执行语义检查:把经过脱敏的截图、文本或结构化指标交给 Amazon Bedrock,判断内容是否与预期一致。
  4. 关联责任人:根据看板目录、标签或所有者元数据找到负责团队。
  5. 告警与留痕:把异常证据、检测时间、规则结果和模型判断写入告警系统,避免只发送一句“看板异常”。

这里的关键不是让模型取代所有规则,而是让规则和模型各自处理擅长的部分。时间戳、行数、范围和字段完整性适合用代码判断;“页面是否明显空白”“标题与指标是否错配”“多个组件是否呈现相互矛盾的状态”等视觉或语义问题,可以交给多模态或文本模型辅助判断。

一个可改造的 Bedrock 内容验证器

下面的示例假设你已经从看板系统拿到了一个 JSON 快照。快照包含看板名称、组件文本、最近更新时间和关键指标。示例使用 Amazon Bedrock Runtime 的 Converse API;运行前需要安装 boto3,配置 AWS 凭证,并确保目标区域和模型已获得访问权限。BEDROCK_MODEL_ID 应替换为账户中可用的模型 ID。

import json
import os
from datetime import datetime, timezone

import boto3


REGION = os.getenv("AWS_REGION", "us-east-1")
MODEL_ID = os.environ["BEDROCK_MODEL_ID"]

bedrock = boto3.client("bedrock-runtime", region_name=REGION)


def validate_dashboard(snapshot: dict) -> dict:
    """Use Bedrock as a semantic second pass after deterministic checks."""
    prompt = f"""
你是 BI 看板内容验证器。请只返回 JSON,不要使用 Markdown。
判断下面的看板快照是否存在内容故障,而不是判断 AWS 基础设施是否健康。

检查这些问题:
1. 页面或关键组件是否为空、明显报错或缺少数据;
2. 数据更新时间是否明显过旧;
3. 指标之间是否存在明显矛盾;
4. 标题、单位和数值是否明显错配。

返回格式:
{{
  "status": "pass" 或 "fail",
  "confidence": 0 到 1 之间的数字,
  "reasons": ["具体原因"],
  "evidence": ["支持判断的字段或组件"]
}}

看板快照:
{json.dumps(snapshot, ensure_ascii=False, indent=2)}
"""

    response = bedrock.converse(
        modelId=MODEL_ID,
        system=[{
            "text": "只根据输入快照判断。无法确定时降低 confidence,并说明缺失证据。"
        }],
        messages=[{
            "role": "user",
            "content": [{"text": prompt}],
        }],
        inferenceConfig={
            "temperature": 0,
            "maxTokens": 500,
        },
    )

    text = response["output"]["message"]["content"][0]["text"]
    return json.loads(text)


if __name__ == "__main__":
    snapshot = {
        "dashboard_id": "sales-overview",
        "title": "Sales Overview",
        "checked_at": datetime.now(timezone.utc).isoformat(),
        "last_data_refresh": "2025-01-15T08:00:00Z",
        "components": [
            {"name": "Revenue", "text": "$0", "unit": "USD"},
            {"name": "Orders", "text": "0", "unit": "count"},
            {"name": "Status", "text": "No data available"},
        ],
    }

    result = validate_dashboard(snapshot)
    print(json.dumps(result, ensure_ascii=False, indent=2))

可以这样运行:

python -m pip install boto3
export AWS_REGION=us-east-1
export BEDROCK_MODEL_ID="替换为已授权的模型ID"
aws sts get-caller-identity
python dashboard_validator.py

生产环境中,snapshot 通常由定时任务批量生成,而不是人工写入。调度器可以遍历看板目录,将每个快照放入队列,由 Lambda、容器任务或其他工作进程消费。模型返回 fail 后,再结合置信度、规则命中情况和重复次数决定是否告警。例如,低置信度结果可以进入人工复核,高置信度且连续两次失败的结果才通知所有者。

规模化运行时要控制什么

让模型看到足够证据

只把一句“看板异常”交给模型,无法得到稳定判断。输入应尽量包含组件名称、展示值、单位、数据更新时间、预期范围和最近几次检查结果。截图适合发现空白区域、错误提示和布局异常;结构化数据更适合检查精确数值。两者结合通常比单独使用任一输入更可靠。

控制成本和延迟

数百个看板不应该每分钟都把完整截图发送给模型。可以把检测分成两层:确定性规则先过滤明显正常或明显异常的样本,只有需要语义判断的样本才调用 Bedrock;对稳定看板降低检查频率,对关键业务看板提高频率;对相同内容使用哈希去重,避免重复推理。

保护数据

看板可能包含客户信息、财务指标或个人数据。发送前应进行脱敏、字段裁剪和访问控制,并记录调用者、模型 ID、输入摘要和判断结果。不要把不必要的原始明细直接放入提示词。模型结果应作为检测信号,而不是绕过原有权限系统的数据出口。

让告警能被处理

一条可执行的告警至少应包含:看板名称、所有者、检测时间、失败类型、证据字段、最近成功时间和建议动作。只有“AI 判断失败”而没有证据的告警,往往会很快被忽略。对于重复故障,还需要聚合告警,避免同一条数据管道导致数百条通知同时涌入。

落地检查清单

  • 先定义“空白、过期、错误、越界、矛盾”的可观测判定标准。
  • 将硬规则与 Bedrock 语义判断分层,避免把精确计算交给模型。
  • 为每个看板维护所有者、关键组件、刷新周期和预期范围。
  • 保存截图或结构化快照的最小必要证据,支持问题复盘。
  • 用低置信度人工复核和高置信度自动告警控制误报。
  • 通过批处理、缓存、哈希去重和分级频率控制调用成本。
  • 用平均检测时间、误报率、漏报率和修复耗时评估效果。

看板内容验证的价值,在于补上“服务健康”和“业务正确”之间的缺口。Amazon Bedrock 适合承担跨组件的语义与视觉判断,但稳定的生产方案仍然依赖清晰的规则、可靠的快照、明确的责任人和可追踪的告警闭环。把这些环节组合起来,才有机会将原本需要数天才被发现的静默故障压缩到一小时以内。


相关推荐