3. 核验流程设计:核验触发条件、核验步骤、核验结果判定标准、核验报告生成
值班基线核验流程是 On-Call 自动化的核心执行单元。一个设计良好的核验流程必须覆盖从触发到报告归档的完整闭环,确保每次核验可重复、可追溯、可判定。本节从四个维度拆解核验流程的设计要点。
3.1 核验触发条件
触发条件决定了核验流程何时启动。根据值班场景的差异,触发条件分为三类:
| 触发类型 | 触发时机 | 典型场景 | 优先级 |
|---|---|---|---|
| 定时触发 | 固定时间窗口(如每 4 小时、每日 08:00) | 基线数据周期性刷新、值班交接前预检 | 低 |
| 事件触发 | 特定运维事件发生后(如告警风暴、变更完成) | 故障恢复后基线核验、变更后配置漂移检测 | 高 |
| 人工触发 | 值班人员手动发起 | 怀疑数据异常、临时合规检查 | 最高 |
设计建议: 生产环境中建议采用“定时 + 事件”双触发模式。定时触发作为保底,事件触发应对突发变化。人工触发应保留为应急通道,且每次人工触发需记录操作者身份与原因。
3.2 核验步骤
核验步骤采用“五阶段流水线”模型,每个阶段输出明确的中间产物,便于问题定位与回滚。
- 数据采集阶段:从 CMDB、监控系统、日志平台拉取当前基线快照。采集需支持幂等性,避免重复采集导致数据污染。
- 数据清洗阶段:去除空值、异常值、过期数据。清洗规则需与基线版本号绑定,确保不同版本间清洗逻辑可追溯。
- 规则匹配阶段:将清洗后的数据与预定义的核验规则库进行逐条比对。规则库支持 AND/OR 组合逻辑,每条规则包含阈值、容忍度、生效范围。
- 差异分析阶段:对匹配失败的条目进行根因分类(配置漂移、数据延迟、规则过期等)。差异分析结果直接影响判定标准。
- 结果聚合阶段:将各规则的匹配结果按服务、模块、地域等维度聚合,生成结构化的核验结果集。
关键约束: 每个步骤必须设置超时阈值(默认 30 秒)。超时后步骤应自动重试 1 次,重试仍超时则标记为“步骤异常”并跳过,避免单步骤阻塞整个流程。
3.3 核验结果判定标准
判定标准采用“三级判定 + 加权评分”模型,避免单一指标误判。每条核验规则独立评分,最终按权重聚合为整体判定结果。
| 判定等级 | 评分区间 | 含义 | 值班动作 |
|---|---|---|---|
| 通过 | ≥ 90 分 | 基线数据与预期完全一致,无漂移 | 自动归档,无需人工介入 |
| 警告 | 70 – 89 分 | 存在少量差异,但未超过业务容忍阈值 | 生成告警通知,值班人员 15 分钟内确认 |
| 失败 | < 70 分 | 关键基线项偏离,可能影响业务连续性 | 立即升级至 SRE 负责人,触发应急变更流程 |
避坑提示: 判定标准中的“容忍阈值”必须与业务方协商确认,不能由 SRE 单方面设定。例如:DNS 解析延迟基线容忍度通常为 50ms,但交易核心链路可能要求 10ms。阈值写死在规则库中,变更需走审批流程。
3.4 核验报告生成
核验报告是流程的最终交付物,需同时满足机器解析与人工阅读两种场景。报告采用“摘要 + 详情”双层结构:
- 摘要层:包含核验 ID、触发类型、时间戳、整体判定等级、通过率、耗时。摘要层用于值班 Dashboard 展示与告警聚合。
- 详情层:包含每条规则的匹配结果、差异详情、根因分类、原始数据快照。详情层用于问题排查与事后审计。
报告格式支持 JSON(供下游系统消费)与 HTML(供值班人员浏览器查看)。HTML 报告内嵌折叠面板,默认只展示摘要,点击可展开详情。
3.5 流程完整示例
以下是一个完整的核验流程伪代码,展示触发、执行、判定、报告生成的全链路:
# 伪代码:核验流程主循环
def run_verification(trigger_type, baseline_version):
# 1. 触发条件校验
if not is_trigger_allowed(trigger_type):
return {"status": "rejected", "reason": "trigger not allowed"}
# 2. 数据采集
raw_data = collect_baseline_snapshot(baseline_version)
if raw_data is None:
return {"status": "failed", "step": "collect", "error": "timeout"}
# 3. 数据清洗
clean_data = clean_baseline(raw_data, baseline_version)
# 4. 规则匹配
rule_results = match_rules(clean_data, load_rules(baseline_version))
# 5. 差异分析
diff_analysis = analyze_differences(rule_results)
# 6. 结果聚合与评分
score = aggregate_score(diff_analysis)
grade = determine_grade(score)
# 7. 报告生成
report = generate_report(
trigger_type=trigger_type,
baseline_version=baseline_version,
grade=grade,
score=score,
details=diff_analysis
)
# 8. 报告归档与通知
archive_report(report)
if grade == "FAILED":
notify_oncall_escalation(report)
elif grade == "WARNING":
notify_oncall_confirmation(report)
return report
工程落地要点: 核验流程必须支持“幂等重跑”。同一基线版本、同一触发条件下多次执行,结果应完全一致。建议在流程入口处增加去重 ID(由 trigger_type + baseline_version + timestamp 哈希生成),避免重复触发导致数据混乱。