变更窗口静默是什么
变更窗口静默指发布流水线在变更前后自动创建与撤销静默:范围精确限定到本次变更的服务,带明确过期时间与变更单号,验证通过后提前撤销。它的价值是把预期波动和真实故障分开——发布期间的重启与连接抖动本来就会触发告警,不处理会淹没值班人;处理不当又会把真实故障一起盖住,因此范围与时长是设计重点。
基本信息
| 实现方式 | 流水线调用 amtool 或 Alertmanager API 创建与撤销静默 |
|---|---|
| 关键参数 | matcher、--duration、--comment、--author |
| 撤销方式 | amtool silence expire 或到期自动失效 |
| 适用场景 | 滚动发布、重启类变更、数据库变更窗口 |
| 权限要求 | 具备 Alertmanager 写权限的机器人账号 |
典型使用场景
- 滚动发布:抑制该服务的可用性与错误率告警,避免每台重启都触发
- 数据库变更:DDL 或数据迁移窗口内抑制长事务与锁等待类告警
- 扩容缩容:节点增减时的探活抖动按时间窗口抑制
- 配置推送:批量下发配置期间抑制连接重置类告警
- 网络变更:链路割接窗口内的抖动按计划静默
落地要点
- 静默范围按服务级别设置,实例级 matcher 盖不住新拉起的实例
- 时长略长于预期变更耗时,但要有明确上限,不要设成几个小时
- 变更单号写进 comment,事后查静默能直接对应到发布记录
- 验证通过后立即撤销静默,让后续真实故障正常报警
- 变更失败时不用静默兜底,应关闭静默并转人工排查
流水线钩子示例
流水线钩子示例
# 变更前创建静默
SID=$(amtool silence add \
--alertmanager.url=$AM \
--author=ci \
--comment="deploy-$BUILD_ID order-svc" \
--duration=90m \
'service="order-svc"')
echo "静默 ID: $SID"
# 验证通过后提前撤销
amtool silence expire --alertmanager.url=$AM "$SID"
# 查看当前生效静默,确认没有范围过大的残留
amtool silence query --alertmanager.url=$AM静默参数读法
| 参数 | 含义 | 建议 |
|---|---|---|
| matcher | 静默匹配的标签 | 按服务级设置,别用实例级 |
| duration | 静默时长 | 略长于变更耗时并设上限 |
| comment | 说明与变更单号 | 必须能追溯到发布记录 |
| author | 创建者 | 使用流水线专用账号 |
| expire | 提前撤销 | 验证通过后立即执行 |
静默范围过大或忘记撤销,会在变更结束后继续掩盖真实故障;建议每次发布结束都检查一遍当前生效的静默列表。