metadata.uid)对应一条 Flashduty 告警,告警等级由报告摘要里各严重程度的数量决定。
在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 Trivy Operator,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 Trivy Operator,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 Trivy Operator 中配置
需要有修改 Trivy Operator 部署配置的权限,且 Operator 所在网络能通过 HTTPS 访问 Flashduty 推送地址。
1
设置 Webhook 广播地址
通过 Helm 安装时,设置 不使用 Helm 时,在 Operator 的部署中设置环境变量
operator.webhookBroadcastURL 为 Flashduty 的完整推送地址(需包含 integration_key):OPERATOR_WEBHOOK_BROADCAST_URL。可选项:operator.webhookBroadcastTimeout(请求超时,默认 30s)。保持 operator.webhookSendDeletedReports 为默认的 false 即可。开启后每条消息会被包一层 verb 和 operatorObject(Flashduty 能解析),但报告被删除时发送的对象不含任何标识,Flashduty 会忽略这类消息。2
开启超时自动关闭
Operator 只在报告生成或变化时推送,不发送“已解决”通知,所以漏洞被修复后,只有该报告被重新扫描且摘要里不再有任何级别的问题时,Flashduty 才会自动恢复对应告警。工作负载滚动更新会产生新的 ReplicaSet 和新的报告对象,旧报告对应的告警不会收到恢复。请在接收这些告警的协作空间中开启 超时自动关闭,计时起点选择 故障触发,超时时长建议设置为 7 天。
3
验证
Trivy Operator 没有测试按钮。重启或等待 Operator 完成一次扫描后,在 Flashduty 中确认出现对应工作负载的告警。想快速触发,可以部署一个使用旧版本镜像的工作负载(例如
nginx:1.16)。Alert Key
Flashduty 使用报告对象的 UID(请求体中的
metadata.uid)作为 Alert Key。Trivy Operator 会在报告变化时重新推送同一个对象,UID 保持不变,这些推送会合并到同一条告警;不同的工作负载、容器或报告类型对应不同的 UID,互不影响。工作负载被重建、报告对象被删除后重新生成时会得到新的 UID,对应一条新的告警。
报告名称、镜像标签、扫描器版本和摘要数量的变化都不会改变 Alert Key。缺少 metadata.uid 的请求会被拒绝。请求体超过 4 MiB 时会返回参数错误;描述最多列出最严重的 10 条发现,大报告不会让告警变大。
状态和告警等级
Flashduty 按报告摘要(
report.summary)中的数量映射告警等级:
同一个报告对象再次推送且摘要变为全 0 时,对应告警自动恢复。
没有严重程度摘要的报告(SBOM 报告、合规报告)以及报告被删除的消息,Flashduty 返回成功但不创建告警。
标签
告警描述包含摘要数量,以及最严重的前 10 条问题。暴露密钥只列出规则 ID 和文件路径,不包含匹配到的内容。完整报告可用
kubectl get vulnerabilityreports -n <namespace> -o yaml 查看。
排查问题
- 没有收到告警:确认
operator.webhookBroadcastURL已生效(查看 Operator Pod 的环境变量OPERATOR_WEBHOOK_BROADCAST_URL),Operator 日志中没有推送失败;Operator 不检查响应状态,也不重试失败的请求 - 没有恢复:Operator 不发送“已解决”通知;只有报告重新扫描且摘要全为 0 才会恢复,其余情况请开启协作空间的超时自动关闭
- 同一工作负载出现多条告警:每个报告对象(漏洞、暴露密钥、配置审计等)和每个容器各有一个 UID,各对应一条告警
- 推送被拒绝,提示缺少 metadata.uid:请求体不是 Trivy Operator 的报告对象