CentOS backlog监控与预警
一 关键指标与定位
ss -tnlp(关注Recv-Q接近或达到Send-Q的监听端口)。cat /proc/sys/net/core/somaxconn(应用层backlog通常不能超过此值)。netstat -s | grep -i listen 或 cat /proc/net/netstat | egrep 'ListenOverflows|TCPBacklogDrop'(不同内核版本字段名可能略有差异)。tcpdump -i any 'tcp[tcpflags] & tcp-syn != 0' -nn(配合SYN_RCVD计数判断半连接压力)。二 命令行巡检与阈值示例
#!/usr/bin/env bash
THRESHOLD=${1:-1000} # 默认阈值
ALERT_EMAIL=${2:-admin@example.com}
# 获取每个监听端口的 Recv-Q(当前排队)与 Send-Q(最大队列)
ss -tnlp | awk '$1=="LISTEN" {
port=$4; gsub(/.*:/,"",port);
q=$2; gsub(/.*,/,"",q); # Recv-Q
max=$3; gsub(/.*,/,"",max); # Send-Q
if (q+0 > 0) printf "port=%s recv_q=%s max_q=%s\n", port, q, max
if (q+0 > THRESHOLD) alert=1
} END {
if (alert) {
echo "Backlog超过阈值 $THRESHOLD" | mail -s "Backlog Alert" "$ALERT_EMAIL"
}
}'
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}' | egrep 'SYN_RECV|ESTABLISHED'(SYN_RECV升高常伴随SYN丢弃/溢出)。三 监控平台落地
node_sockstat/node_netstat等采集socket/网络统计;或在应用侧暴露backlog相关指标(如每个端口的当前排队数)。groups:
- name: backlog
rules:
- alert: HighListenBacklog
expr: node_sockstat_TCP_listen_backlog > on() group_left kube_pod_info{namespace="default"}) 1000
for: 1m
labels:
severity: warning
annotations:
summary: "High listen backlog on {{ $labels.instance }}:{{ $labels.port }}"
description: "Current backlog={{ $value }} exceeds threshold=1000"
ss/netstat输出作为UserParameter采集各端口的Recv-Q与Send-Q,在模板中设置触发器(如Recv-Q/max_q > 0.8或Recv-Q > 1000)并配置动作(邮件/短信/企业微信)。四 预警策略与处置
Recv-Q / Send-Q > 0.7(接近饱和,需关注趋势)。Recv-Q / Send-Q > 0.9或Recv-Q绝对值超过业务可承受上限(如1000)。ListenOverflows、TCPBacklogDrop、SYN_RCVD持续上升。net.core.somaxconn(如4096/8192),并同步评估net.ipv4.tcp_max_syn_backlog;必要时开启syncookies抵御SYN洪泛(权衡性能)。