首页/系统与基础设施/自动化运维速查/巡检失败的容错与重试
巡检与自助运维60 条

巡检失败的容错与重试

容错的第一步是把暂时性失败与确定性失败分开:前者指数退避加重试上限,后者直接标记异常并交人工修复。结果需区分不可达、采集失败、检查不通过三种状态,并保留首次失败痕迹,否则重试会同时掩盖配置错误并制造重试风暴。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​‌‌‌​​​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

容错要回答三个问题

巡检必然有目标采集失败:设备离线、凭证过期、链路抖动、命令不兼容。容错与重试要回答的是哪些失败值得重试、重试几次、重试仍失败后结果如何呈现。核心原则是把暂时性失败与确定性失败分开:前者退避重试,后者直接记为异常,避免用重试掩盖凭证或配置错误。

基本信息

值得重试连接超时、被拒、瞬时超时等暂时性失败
不应重试认证失败、命令不存在、目标不存在等确定性失败
退避策略指数退避加随机抖动,避免集中重试
上限控制最大尝试次数与单目标总时长双上限
终态处理写入失败清单,按严重级别进入告警或工单

典型使用场景

  • 跨广域网采集:链路抖动频繁,有限重试可显著降低无意义失败噪音
  • 大批量巡检中的个别目标:单台失败不应中断整批任务,失败需按目标隔离
  • 被检端连接数打满:短暂退避后重试成功率明显提升,比立即重试更有效
  • 计划内停机:应识别为预期不可达,跳过重试并单独统计,不混入故障数
  • 结果对齐:重试成功后需覆盖首次失败记录,避免同一目标出现矛盾结果

失败分类与处置

失败表现性质处置
连接超时或被拒暂时性退避后重试
认证失败确定性立即标记异常并通知负责人
命令不存在或权限不足确定性跳过并记录脚本版本与目标信息
回显解析失败多为配置问题保留原始回显供人工核对一次

退避重试与失败分类

退避重试与失败分类
# 指数退避加抖动:避免失败目标在同一时刻集中重试
for i in 1 2 3; do
  if ./collect.sh www01 >> out.txt 2> err.txt; then break; fi
  sleep $(( (2 ** i) + RANDOM % 3 ))     # 2、4、8 秒级退避并打散节拍
done
# 认证类错误重试无意义,直接归入待修清单
if grep -q -e Permission.denied -e Authentication.failed err.txt; then
  echo www01-auth-failed >> need_fix.txt   # 交凭证或权限修复流程
fi
# 首次失败信息另存,避免被后续成功覆盖而丢失偶发线索
[ -s err.txt ] && cp err.txt first_fail_www01_$(date +%F).log
重试会把失败流量放大到被检端。没有退避与次数上限的重试,在目标过载时会持续加码,把一次可恢复的超时拖成持续不可用,巡检脚本因此成为压垮服务的一环。
巡检结果至少要区分不可达、采集失败、检查不通过三种状态。三者合并成一个失败计数时,网络问题会掩盖真实的配置偏差,后续排查与环境治理都失去依据。

易错点

  • 无限重试:单台故障目标占满任务时长,整批巡检无法按时收敛
  • 认证失败也重试:浪费窗口并延误凭证修复,异常被拖到下一个周期才被看见
  • 重试成功覆盖原始记录:偶发问题丢失现场,无法做趋势与根因分析
  • 计划内停机不排除:维护窗口产生大量已知误报,团队对告警逐步麻木

数据来源与参考

  • Ansible 官方文档:retries/until 与 ignore_errors 语义
  • RFC 6298 TCP 重传超时与退避算法
  • ITIL 4 服务管理实践:事件管理

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/inspection-failure-tolerance-retry.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​‌‌‌​​​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​