检测与收敛做什么
检测有两条口径:一是与期望值比(基线、模板渲染结果、配置管理工具的期望状态),回答「是否符合要求」;二是与上次快照比,回答「最近被改了什么」。前者适合合规与统一性检查,后者适合排障与变化追溯。收敛是检测之后动作的总称,可以是自动纠正、告警后人工处理,或只记录不处理。选哪种收敛策略取决于该项的风险与业务耦合度:高危项自动覆盖可能引发新故障,低风险项人工处理则必然堆积成告警噪音。
基本信息
| 适用场景 | 合规巡检、变更后验证、故障时追溯最近改动、批量收敛整组主机 |
|---|---|
| 检测方式 | 内容与指纹比对、配置管理工具的空跑模式、设备配置差异比对 |
| 追溯手段 | 变更留档、版本库比对、系统审计子系统记录文件写入者 |
| 关键约束 | 自动收敛会覆盖手工改动,必须先明确边界与豁免机制 |
典型使用场景
- 合规巡检:周期比对基线与实际,输出不符合项清单
- 故障排查:先看关键配置文件最近有没有被改,再看改动内容
- 变更后验证:变更窗口结束后立即比对,确认只改了该改的项
- 大促与重要节点前:提前收敛一批长期未处理的偏离项
- 设备侧巡检:网络与安全设备的运行配置与期望策略比对
- 批量收敛:对同一角色的多台主机统一下发期望配置
两条检测口径的落地
两条检测口径的落地
# 口径一:与上次快照比,回答最近改了什么
find /etc -type f -name '*.conf' -exec sha256sum {} + | sort > /var/lib/baseline/etc-$(date +%F).sum
sha256sum -c /var/lib/baseline/etc-2026-10-01.sum 2>/dev/null | grep -v ': OK$' # 只列变化项
diff -u /var/lib/baseline/sshd_config /etc/ssh/sshd_config | head -40 # 看具体改了哪几行
# 口径二:与期望值比,回答是否符合要求
# ansible-playbook site.yml --check --diff # 空跑,只报告将发生的变更
# 追溯「谁改的」:对关键配置目录设审计监控,再用审计工具查询
# auditctl -w /etc/ssh/sshd_config -p wa -k cfg_watch
# ausearch -k cfg_watch -ts recent # 输出写入者与时间收敛策略与取舍
| 策略 | 适用项 | 优点 | 风险 |
|---|---|---|---|
| 自动纠正 | 低风险、纯声明式项 | 收敛彻底,人工成本低 | 覆盖紧急热修,可能打断在手的排障 |
| 告警后人工 | 高危或与业务强耦合项 | 可控,保留人工判断 | 响应不及时则长期不符合 |
| 只记录不处理 | 审计与报表用途 | 零干扰,数据完整 | 问题只被记录,不会消失 |
| 豁免登记 | 确需长期偏离的项 | 避免反复覆盖 | 豁免不清会演变成事实标准 |
刚上检测时建议先只报不改跑一到两个周期:记录漂移集中在哪些文件、由谁改、是否属于正常运维动作。摸清来源后再决定哪些项可以自动收敛,能显著降低误覆盖带来的故障。
自动收敛与周期性调和任务叠加时,可能与正在进行的紧急处置冲突:运维刚手工关闭某项以止血,周期任务几分钟后又把它打开。高风险服务应设置维护标记或临时豁免,并在收敛后复核业务状态。