webhook_sink)将 Robusta 发现的问题(finding)同步到 Flashduty On-call。Robusta 转发的 Prometheus 告警在触发时创建 Flashduty 告警,在 Alertmanager 发送恢复后自动恢复;Robusta 自己检测到的问题(如 CrashLoopBackoff、OOMKilled、镜像拉取失败)只通知一次,不会自动恢复。
在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 Robusta,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 Robusta,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 Robusta 中配置
1
添加 Webhook Sink
在安装 Robusta 时使用的 Helm values 文件(通常是
generated_values.yaml)中,向 sinksConfig 添加一个 webhook_sink:url:填写 Flashduty 集成的完整推送地址(以https://开头,包含integration_key)format:必须设置为json。默认值text发送的是纯文本,Flashduty 无法解析,会返回参数错误- 不要开启
slack_webhook。开启后 Robusta 发送的是 Slack 格式的正文,不含fingerprint,Flashduty 会拒绝 size_limit保持默认的4096即可。超过限制时 Robusta 会丢弃靠后的字段,enrichments最先被丢弃,Flashduty 不读取该字段
2
更新 Robusta
clusterName 会作为 cluster 标签写入告警,并参与 Alert Key 计算。多个集群推送到同一个集成时,请为每个集群设置不同的 clusterName。3
开启超时自动关闭
Robusta 自己检测到的问题(
source 为 KUBERNETES_API_SERVER 等)不发送恢复通知,这些告警会一直保持打开。请在接收该集成的协作空间中开启超时自动关闭,时长按团队处理问题的时效设定,例如 4 小时。Alert Key
Flashduty 用
cluster_name 加 fingerprint 计算 Alert Key。
- Prometheus 告警:
fingerprint是 Alertmanager 为告警计算的指纹,同一条告警从触发到恢复保持不变,所以触发、升级和恢复通知落在同一条 Flashduty 告警上 - Robusta 自己检测到的问题:
fingerprint由资源类型、名称、命名空间、节点和问题类型计算,同一个 Pod 反复出现的同类问题会合并到同一条告警
fingerprint 时 Flashduty 会拒绝,因为无法关联后续通知。
状态和告警等级
当请求中的
ends_at 不为空,或标题以 [RESOLVED] 开头时,Flashduty 将告警标记为恢复。Robusta 只为 Alertmanager 已恢复的 Prometheus 告警发送这类通知,请确认 Alertmanager 中 Robusta 接收器的 send_resolved 为 true(Robusta 自带的 Prometheus 默认已开启)。
Robusta 转发 Prometheus 告警时按告警的
severity 标签换算等级:critical、high、medium、error 为 HIGH,warning、low 为 LOW,info 和其他值为 INFO,debug 为 DEBUG。恢复通知保留最后一次的等级。
告警内容
- 标题:
title,恢复通知会去掉[RESOLVED]前缀 - 描述:
description,links中的链接(如 Prometheus 图表),以及恢复时间ends_at - 标签:
cluster、fingerprint、aggregation_key(告警名或问题类型)、finding_source(如PROMETHEUS、KUBERNETES_API_SERVER)、finding_type、severity(Robusta 原始等级)、resource(类型/命名空间/名称)、kind、namespace、node、container、source(固定为robusta),以及subject.labels中的资源标签和 Prometheus 告警标签(如alertname、pod)
排查问题
- Flashduty 返回 request body is not Robusta JSON:
webhook_sink没有设置format: json - Flashduty 返回 fingerprint is required:确认没有开启
slack_webhook,且没有把size_limit调得过小 - Prometheus 告警没有恢复:确认 Alertmanager 中 Robusta 接收器开启了
send_resolved,且告警已在 Alertmanager 中恢复 - CrashLoopBackoff 等告警没有恢复:这类问题 Robusta 只通知一次,请使用超时自动关闭或手动关闭
- 只想推送部分告警:使用 Robusta Sink 的
scope按命名空间、告警名等过滤
kubectl run crashy --image=busybox --restart=Always -- sh -c 'exit 1')验证投递,验证后删除该 Pod 并手动关闭告警。
字段含义请参阅 Robusta Webhook Sink。