带宽告警需综合出口利用率、活跃连接与TCP异常信号联动判断,分场景动态设阈值,并预置三层自动化响应及反向压测验证闭环。

带宽跑满不是“某个数字超了就报警”,而是要结合连接状态、请求速率、后端响应和资源水位做综合判断。单纯看流出带宽峰值,容易在大促或CDN回源时误报;但完全不盯带宽,又可能错过网卡打满、TCP重传飙升、连接被丢弃等真实瓶颈。
关键指标必须联动采集
不能只盯着 nginx_http_bytes_sent_total 这类累计值。需实时计算并关联以下三组指标:
-
出口带宽利用率:用 Prometheus 抓取
rate(nginx_http_bytes_sent_total[1m]) * 8(单位转为 bps),再除以服务器实际网卡带宽(如 1Gbps = 10⁹ bps) -
活跃连接与等待队列:通过
nginx_stub_status模块获取Active connections和Waiting数值,若 Waiting 持续 > 200 且带宽利用率 > 90%,大概率是后端慢导致连接积压 -
TCP 层异常信号:配合
node_exporter抓取node_netstat_Tcp_RetransSegs(重传段数)和node_netstat_Tcp_InErrs(入错包),重传率 > 1% 或入错包突增,说明链路或网卡已濒临饱和
告警阈值要分场景动态设定
固定阈值会失效。推荐按时间维度+业务特征分级触发:
- 日常时段(非高峰):带宽利用率 > 85% 持续 90 秒 + Waiting > 150 → 触发“中危”告警,通知值班运维核查后端延迟
- 大促/活动期间:启用基线模式,用过去 3 小时同时间段的 P95 带宽值 × 1.4 作为动态上限,超限即告警
- 紧急熔断条件(自动执行):带宽 > 98% 且
netstat -s | grep "retransmitted"每分钟增长 > 500 次 → 立即执行限流脚本,关闭非核心接口路由
响应动作必须预置且可验证
告警发出后,人工响应太慢。应提前部署自动化响应链:
- 第一层(秒级):调用 Nginx 的
limit_conn指令临时限制每个 IP 连接数,配置写入独立 conf 文件并nginx -s reload - 第二层(10 秒内):检查
/proc/net/dev中对应网卡的drop字段,若每秒 drop > 100,自动触发ethtool -K eth0 gro off关闭 GRO,缓解中断风暴 - 第三层(人工介入前):自动抓取
ss -ti输出中 retrans、rto、rtt 异常的 top 5 连接,并推送至运维群附带诊断建议(如“发现 3 个连接 RTO > 3s,建议检查上游服务健康状态”)
验证闭环不能只靠图表
监控系统自身是否可信,得用反向验证:
- 每月用
iperf3对网卡做压测,确认监控上报带宽值与实测误差 - 在测试环境模拟带宽打满:用
tc qdisc add dev eth0 root tbf rate 100mbit burst 32kbit latency 400ms限速,验证告警是否准时触发、限流是否生效 - 所有自动响应脚本必须带 dry-run 模式,上线前先输出将执行的命令,避免误操作


















