并发度是巡检的第一参数
采集并发度决定巡检向生产环境施加的瞬时压力。被检端要同时承受连接建立、命令解释、磁盘读取、日志扫描等开销;采集端则受限于自身进程数、文件描述符、连接池与出口带宽。并发没有普适最优值,它应当由被检端最脆弱的那个环节决定,并按目标类型分组设置,而不是全局写死一个数字。
基本信息
| 控制对象 | 同一时刻活跃的采集会话数 |
|---|---|
| 常用手段 | 固定并发池、令牌桶限速、队列深度限制 |
| 被检端瓶颈 | 连接并发上限、进程与文件句柄上限、实例 CPU |
| 采集端瓶颈 | 进程数、文件描述符、出口带宽与专线质量 |
| 观测方式 | 被检端连接数与负载、采集端队列积压时长 |
典型使用场景
- 首次全量接入:目标多且承压能力未知,先用低并发探路,观察被检端表现后再逐档提高
- 网络设备采集:设备 CPU 弱、并发会话数少,上限必须明显低于服务器类目标
- 数据库巡检:采集语句会争抢连接与 I/O,需在低谷执行并按实例限流
- 跨机房或跨专线采集:带宽受限时,过高并发会把采集流量变成拥塞来源
- 与备份、发布窗口重叠:临时下调并发,避免与已有重负载任务叠加
常见限流手段对照
| 手段 | 作用点 | 副作用 |
|---|---|---|
| 固定并发池 | 采集端活跃会话数 | 目标耗时不均时吞吐被浪费 |
| 令牌桶限速 | 单位时间新增任务数 | 突发被平滑,长尾任务变长 |
| 目标侧冷却 | 同一目标两次采集的最小间隔 | 重试场景下拉长整体收敛时间 |
| 分组分级 | 按目标类型设不同上限 | 配置项增多,需维护分组规则 |
并发与限流基本写法
并发与限流基本写法
# 用队列加固定工作进程数控制并发,而不是一次性拉起全部目标
cat targets.txt | xargs -P 8 -n 1 ./collect.sh # -P 8:最多 8 个并发采集
# 单次采集加超时,防止挂死会话长期占用并发槽
timeout 30 ./collect.sh www01 || echo www01 >> timeout.txt
# 重试前加随机抖动,避免失败目标在同一秒集中重试
sleep $((RANDOM % 5))
# 采集完毕立刻释放连接,缩短被检端连接占用时间
ssh -o BatchMode=yes -o ConnectTimeout=5 ops@www01 uptime并发调高比调低危险得多:被检端一旦被打满,采集失败会触发重试,重试又加剧拥塞,形成正反馈。上调应逐档进行并同步观察被检端指标,同时保留一键降档的能力。
限流按目标类型分组才有效。服务器、数据库、网络设备、存储的承受能力差一个数量级;用同一并发跑全部目标时,实际上限被迫取最弱一档,其余目标长期低效采集。