核心摘要
- 告警标签不是装饰字段,而是 Flashduty 后续路由、分派、聚合、静默、抑制和分析的基础。
- 第一版告警标签规范不要追求字段多,先保证
service、team、env、severity、resource五个标签稳定。 - 在核心标签稳定后,再补充
check、cluster、source,用于噪音分析、基础设施归因和告警源治理。 - 标签值要机器友好、命名统一、含义单一;不要把服务、环境、级别塞进同一个字段。
- 告警治理顺序应当是先补齐和清洗标签,再配置路由、分派、聚合、静默和抑制规则。
告警标签设计的核心结论
告警标签设计的目标不是“让告警看起来信息更多”,而是让每条告警都能稳定回答六个问题:
| 问题 | 依赖的主要标签 | 对应能力 |
|---|---|---|
| 这是谁的告警? | team、service |
路由、分派、责任统计 |
| 影响哪个业务对象? | service、resource |
聚合、排障、分析 |
| 属于哪个环境? | env |
分级通知、静默、降级处理 |
| 严重到什么程度? | severity |
通知强度、升级策略、报表 |
| 是哪类检查触发的? | check |
聚合、噪音分析、规则治理 |
| 来自哪个告警源或部署单元? | source、cluster |
接入治理、基础设施归因、抑制 |
第一版标签规范建议先固定这五个字段:
service
team
env
severity
resource
再逐步补充:
check
cluster
source
如果这些标签缺失或取值混乱,后续规则就会变成标题正则、描述关键字和例外条件的堆砌。路由难以稳定命中,分派策略容易误伤,降噪配置也会越来越难维护。
为什么标签决定路由、分派和降噪质量
只有标题的告警,例如 CPU usage high,系统很难判断它属于哪个服务、哪个团队、哪个环境、应该通知谁、是否需要电话升级,以及应该和哪些告警聚合。
带有结构化标签的告警就不同:
service=payment
team=payment-sre
env=production
severity=critical
cluster=prod-shanghai-01
resource=pod/payment-api-7d9c
check=http_5xx_rate
source=prometheus
这类告警可以按 team 路由,按 severity 命中分派策略,按 service 找值班表,按 resource 和 check 聚合,按 env 做静默或降级。
换句话说,告警标签决定了告警进入 Flashduty 以后能不能自动完成三件事:
- 准确路由:进入正确的协作空间或响应团队。
- 准确分派:根据服务、团队、环境和级别通知正确的人。
- 有效降噪:通过聚合、静默、抑制减少重复和低价值通知。
告警标签字段总览
| 标签 | 含义 | 示例 | 主要用途 | 设计重点 |
|---|---|---|---|---|
service |
业务服务或平台能力 | payment、gateway |
路由、分派、聚合、分析 | 表达业务对象,不表达团队或环境 |
team |
第一响应团队 | payment-sre、dba |
共享集成路由、责任统计 | 表达响应责任,避免和 service 混用 |
env |
运行环境 | production、staging、test |
分级通知、静默、Pipeline | 取值要统一,避免 prod 和 production 混用 |
severity |
严重程度 | critical、warning、info |
通知强度、升级策略、报表 | 映射标准要清楚,避免不同告警源各说各话 |
resource |
具体出问题对象 | 10.0.1.12、rds-payment-main |
排障、聚合 | 值要稳定,避免每次触发都变化 |
check |
告警检查项 | cpu_usage、http_5xx_rate |
噪音分析、规则治理 | 表达告警类型,便于识别高频噪音 |
cluster |
集群、地域或部署单元 | prod-shanghai-01 |
基础设施归因、抑制 | 用于区分部署单元和影响范围 |
source |
告警来源系统 | prometheus、zabbix |
接入质量和噪音来源分析 | 用于追踪告警源质量 |
service 和 team 不要混用
service 表达业务对象,team 表达响应责任。一个团队可以负责多个服务,一个服务也可能在不同阶段由不同团队负责。
如果把 service 当成团队使用,服务拆分、团队调整或值班关系变化时,路由和分派规则都会被迫跟着改。把两者拆开,才能让服务归属、协作空间路由、On-call 分派和责任统计保持清晰。
env 和 severity 决定通知强度
env 和 severity 经常一起决定告警通知方式。生产环境的 critical 告警可能需要电话升级,测试环境的同类告警则不一定需要打扰生产值班。
因此,这两个字段必须尽早统一。否则,同一类告警在不同来源里分别叫 prod、production、P0、critical,后续 Pipeline、路由和分派策略都会变复杂。
resource 和 check 决定能否正确聚合
聚合的本质是判断“哪些告警应该一起处理”。resource 指向具体对象,check 指向检查项,两者配合可以让系统区分同一服务下的不同问题。
例如,同一个 payment 服务里,http_5xx_rate 和 cpu_usage 不一定应该合并处理;同一个 check 触发在不同 resource 上,也可能代表不同影响范围。
标签值命名规则
标签值要稳定、可匹配、可读。建议遵守以下规则:
| 规则 | 原因 |
|---|---|
| 使用小写英文 | 降低大小写、编码和跨系统匹配成本 |
| 中划线或下划线二选一 | 避免同义不同写法 |
| 不要在标签值里放空格 | 便于脚本、模板和规则处理 |
| 不要混用缩写和全称 | 避免 prod 与 production 同时存在 |
| 不要把多个含义塞进一个标签 | 让路由、分派、聚合规则可以独立匹配 |
不要写:
service=payment-prod-critical
应该拆成:
service=payment
env=production
severity=critical
展示给人的中文名称,可以放在协作空间名称、通知模板、CMDB 或映射表里。用于规则匹配的标签值,尽量机器友好。
不同告警源要映射到同一套标签
Prometheus、Zabbix、云监控和自研系统的原始字段通常不同。不要让每个源保留自己的标签体系,要统一映射到标准标签。
| 原始字段 | 标准标签 | 说明 |
|---|---|---|
labels.app |
service |
应用名或服务名映射为业务对象 |
labels.owner |
team |
负责人或团队字段映射为第一响应团队 |
| Zabbix 主机组 | team 或 service |
根据主机组命名含义决定映射目标 |
CMDB owner_team |
team |
以 CMDB 责任团队作为响应责任 |
CMDB service_name |
service |
以 CMDB 服务名作为业务对象 |
| 云资源地域 | cluster |
用于地域、集群或部署单元归因 |
| 云产品类型 | source_product |
用于区分云产品类型和后续分析 |
能在源头改的,就在源头改。源头短期改不了的,再用 Flashduty 标签增强提取、映射或补齐。
标签增强、Pipeline、路由和降噪的关系
Flashduty 中告警处理的大致顺序是:
告警事件进入集成
→ 标签增强
→ 告警处理 Pipeline
→ 路由分发
→ 协作空间内降噪、分派、通知
这几个能力的分工要清楚:
| 问题 | 使用的能力 | 判断依据 |
|---|---|---|
| 缺少标准标签 | 标签增强 | 从已有字段、CMDB 或固定映射中补齐标签 |
| 标签值脏或不一致 | Pipeline | 清洗、转换、过滤或规范化告警内容 |
| 告警应该进入哪个空间 | 路由规则 | 根据 team、service、env、severity 等字段匹配 |
| 告警应该通知谁 | 分派策略 | 根据服务责任、团队和值班关系通知 |
| 重复告警太多 | 降噪配置 | 根据 service、resource、check、cluster 等字段聚合、静默或抑制 |
不要把所有责任判断都写进 Pipeline。Pipeline 负责让告警变干净,路由负责决定进入哪个空间,分派策略负责决定通知谁,降噪配置负责减少重复和低价值通知。
标签如何支撑自动化降噪和分派
| 自动化能力 | 常用标签 | 设计重点 |
|---|---|---|
| 路由 | team、service、env、severity、cluster |
标签要少而稳定,必须有兜底路由 |
| 聚合 | service、check、resource、cluster、env |
先定义哪些告警应该一起处理 |
| 静默和抑制 | env、service、cluster、check |
少依赖标题和描述关键字 |
| 分派 | service、team、severity、env |
贴近责任边界和通知强度 |
| 分析 | service、team、source、check |
找出噪音来源和规则治理重点 |
这里的关键不是“每个能力都配置一套复杂规则”,而是让所有自动化能力共享同一套稳定标签。标签越稳定,路由、分派、聚合、静默、抑制和分析之间的规则越容易对齐。
落地步骤
告警标签治理不建议全公司同时推进。更稳妥的方式是先选一个试点空间,用真实告警验证字段设计。
- 选一个试点空间,不要全公司同时推进。
- 找 20 条真实高频告警,覆盖主要告警源。
- 列出现有字段,映射到标准标签。
- 决定哪些字段源头改,哪些用标签增强补。
- 用真实告警预览标签增强和 Pipeline 效果。
- 再配置路由、降噪、静默和分派策略。
顺序不要反。先有稳定标签,再写自动化规则。
上线验收清单
每条生产告警是否都有 service
每条生产告警是否都有 team
env 是否统一使用 production/staging/test/dev
severity 是否统一映射到 critical/warning/info/ok
resource 是否稳定,不会每次触发都变
check 是否能表达告警类型
共享集成路由是否能用 team 或 service 命中
无法匹配的告警是否进入兜底空间
Critical 告警是否能按 severity 命中分派策略
测试环境告警是否不会走生产电话升级
静默和抑制是否不用依赖标题关键字
分析看板是否能按服务、团队、来源看出噪音
如果这份清单里有多项无法通过,优先回到标签设计和字段映射,而不是继续叠加路由例外和通知例外。
FAQ
标签字段是不是越多越好?
不是。第一版只保留后续响应链路一定会用到的字段。字段越多,越容易出现命名不一致、值不稳定和规则不可维护。
service 和 team 有什么区别?
service 是告警影响的业务对象,team 是第一响应团队。路由和分派时,两者都重要,但含义不同。不要用团队名代替服务名,也不要用服务名代替响应团队。
中文标签值能不能用?
能用,但不推荐作为规则匹配字段。中文、空格、标点和大小写会增加跨系统匹配、脚本处理和模板维护成本。展示给人的中文名称,可以放在协作空间名称、通知模板、CMDB 或映射表中。
什么时候用标签增强?
存量系统短期改不动时,用标签增强补字段、做映射、删敏感标签。高频告警源最终应该回到源头标准化,这样路由、分派和降噪规则才不会长期依赖补丁式转换。
为什么要有兜底空间?
兜底空间不是长期承接全部告警,而是暴露标签缺失、路由错误和规则遗漏。兜底空间告警越多,说明标签治理越需要优先做。
告警降噪应该先做聚合还是先改标签?
先改标签。聚合、静默和抑制都依赖稳定字段。如果 service、resource、check、env 这些标签不稳定,降噪规则只能依赖标题和描述关键字,后续维护成本会越来越高。
结论
告警标签设计的本质,是把“谁负责、影响什么、严重程度、来自哪里、能否合并处理”这些判断前置到结构化字段里。
在 Flashduty 中,先稳定 service、team、env、severity、resource,再补充 check、cluster、source,后续路由、分派、聚合、静默、抑制和噪音分析才会简单。标签越稳定,告警治理越少依赖标题正则和人工例外。