答案先说
Flashcat 灭火图健康度的核心不是把指标做成红绿灯,而是让值班人快速判断:哪个对象健康、哪个对象异常、哪个对象缺少数据。
灭火图卡片有三种状态:
| 状态 | 含义 | 健康值 | 值班动作 |
|---|---|---|---|
| 绿色 | 正常 | 100 | 可以认为当前对象健康 |
| 红色 | 异常 | 0 到 100 之间 | 进入排查,健康值越低越严重 |
| 灰色 | 未知 | 无健康值 | 解释为什么无数据,不能当作健康 |
一句话总结:绿色可以放心,红色要排查,灰色要解释。
详情卡片怎么计算健康值
详情卡片代表真实观测对象,例如接口、服务、数据库实例、Redis 实例、Kubernetes Node。健康度计算从详情卡片开始。
每张详情卡片会配置一个或多个健康指标和异常条件。例如:
成功率 < 95% 算异常
响应时间 > 50ms 算异常
无数据是否算异常:按对象类型配置
计算原则:
| 情况 | 卡片状态 |
|---|---|
| 指标有数据,异常条件未触发 | 绿色,健康值 100 |
| 指标无数据,且无数据未配置为异常 | 灰色,无健康值 |
| 任一异常条件触发 | 红色,根据偏离阈值程度计算健康值 |
| 多个异常条件同时触发 | 取最小健康值作为卡片整体健康值 |
取最小值比取平均值更适合故障现场,因为平均值容易掩盖最严重的异常维度。
健康值不是简单红绿灯
健康值表达异常程度。
| 异常条件 | 健康值变化 |
|---|---|
| 大于阈值算异常,例如延迟、错误数、连接数 | 当前值越高于阈值,健康值越低 |
| 小于阈值算异常,例如成功率、可用率、剩余容量 | 当前值越低于阈值,健康值越低 |
| 等于某个值算异常 | 一旦满足,健康值直接为 0 |
同样是成功率低于 95%,94.8% 和 70% 的处理优先级不同。同样是响应时间超过 50ms,55ms 和 500ms 也不是一个级别。健康值的作用就是把这种偏离程度量化出来。
路径类卡片怎么向上汇总
路径类卡片用于组织下层对象,例如首页卡片、分组卡片、服务分层卡片。它回答的问题是:这一组对象整体是否健康。
常见聚合方式:
| 聚合方式 | 适合场景 |
|---|---|
| 下层健康值最小值 | 强依赖链路,任一关键对象异常都要暴露 |
| 下层卡片健康值平均值 | 需要整体趋势,但不想被单点完全决定 |
| 下层正常卡片比例 | 大规模资源池,例如无状态实例组 |
| 下层正常且有数据卡片比例 | 需要把灰色数据缺失纳入可信度判断 |
| 下层异常卡片健康度平均值 | 关注异常对象整体严重程度 |
支付链路、核心交易链路这类强依赖场景,建议更保守。无状态实例池、节点池这类规模化资源,可以使用比例类算法。
灰色无数据怎么处理
灰色不是健康,它表示当前没有足够数据判断。
无数据策略要按对象类型配置:
| 对象类型 | 无数据建议 |
|---|---|
| 核心高频接口 | 通常应视为异常或至少重点解释 |
| 常驻服务实例 | 通常应视为异常 |
| 数据库、中间件、Kubernetes Node | 更倾向视为异常 |
| 低频接口、批处理任务 | 不一定异常,要结合业务时段 |
| 夜间无流量业务 | 不应简单飘红,要配置合理生效时间 |
如果核心接口突然变灰,可能是接口真的无流量,也可能是日志采集断了、字段变了、数据源查询失败。灰色太多,灭火图的可信度会下降。
异常条件怎么配置
异常条件要表达真实不健康,而不是普通指标波动。
更适合做健康条件的信号:
接口成功率持续低于目标
接口延迟持续高于可接受范围
服务错误率明显上升
数据库连接耗尽或主从延迟不可接受
消息堆积超过业务消费能力
节点不可调度或核心 Pod 不可用
不要把所有接口套同一个阈值。下单、支付、登录这类核心接口应该更严格;后台查询、低频管理接口可以根据实际影响设置不同阈值。
健康度和告警、SLO、FlashAI 的关系
灭火图健康度不是只服务页面展示。
| 能力 | 健康度的作用 |
|---|---|
| 告警 | 卡片飘红可以驱动对象告警,告警消息带出卡片入口和指标趋势 |
| SLO | 卡片健康状态可以作为 SLO 统计粒度 |
| FlashAI | AI 可以基于异常卡片、下钻路径和上下文做分析 |
| 巡检 | 绿色、红色、灰色状态可作为巡检入口 |
如果卡片长期误红、漏红或灰色不明,告警、SLO 和 AI 分析都会受到影响。
第一版验收清单
核心详情卡片是否都有明确健康指标
每个健康指标是否能稳定取到数据
正常业务时卡片是否大部分保持绿色
历史故障窗口里相关卡片是否会飘红
低频对象无数据时是否被合理处理
关键组件无数据时是否触发异常
路径类卡片是否能把下层异常正确向上体现
首页是否能帮助值班人快速判断影响层次
告警是否围绕真正需要响应的飘红对象发出
SLO 统计是否和团队对服务可用性的认知一致
常见问题
灰色卡片是不是没问题?
不是。灰色表示没有足够数据判断。它可能是正常无流量,也可能是采集、查询或字段问题。
为什么多个异常条件取最小健康值?
因为事故现场最需要暴露最严重的问题。平均值可能把严重异常稀释掉。
路径类卡片应该用最小值还是比例?
强依赖链路优先用最小值或保守聚合。大规模资源池可以用正常卡片比例。
健康度配置和告警配置是什么关系?
健康度定义对象是否异常,告警配置决定哪些异常对象要通知谁、何时通知、如何通知。
第一版健康度要做多复杂?
不要复杂。先选一条核心业务链路,验证 20 到 50 张详情卡片:该绿的绿,真异常稳定飘红,每张灰卡都能解释。