温馨提示×

CentOS backlog如何监控和预警

小樊
41
2025-11-15 23:52:53
栏目: 智能运维

CentOS backlog监控与预警

一 关键指标与定位

  • 理解backlog的组成:服务端有两个关键队列——半连接队列(SYN queue)全连接队列(accept queue)。队列溢出通常体现在SYN 丢弃/重传accept 队列溢出上。
  • 快速定位命令:
    • 查看监听套接字与队列使用情况:ss -tnlp(关注Recv-Q接近或达到Send-Q的监听端口)。
    • 查看内核最大backlog上限:cat /proc/sys/net/core/somaxconn(应用层backlog通常不能超过此值)。
    • 查看TCP层统计(含队列相关事件):netstat -s | grep -i listencat /proc/net/netstat | egrep 'ListenOverflows|TCPBacklogDrop'(不同内核版本字段名可能略有差异)。
    • 抓包观察SYN洪泛与重传: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丢弃/溢出)。

三 监控平台落地

  • Prometheus + Exporter + Alertmanager
    • 采集:使用node_exporternode_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"
      
    • 通知:通过Alertmanager配置邮件、企业微信、钉钉或Webhook。
  • Zabbix
    • 使用ss/netstat输出作为UserParameter采集各端口的Recv-QSend-Q,在模板中设置触发器(如Recv-Q/max_q > 0.8Recv-Q > 1000)并配置动作(邮件/短信/企业微信)。
  • 轻量替代
    • Nagios插件脚本化检查;或Monitorix做基础可视化(适合资源受限环境)。

四 预警策略与处置

  • 阈值建议
    • 预警分两级:
      • 注意:Recv-Q / Send-Q > 0.7(接近饱和,需关注趋势)。
      • 严重:Recv-Q / Send-Q > 0.9Recv-Q绝对值超过业务可承受上限(如1000)。
    • 同时监控溢出指标:ListenOverflowsTCPBacklogDropSYN_RCVD持续上升。
  • 处置顺序
    • 应用层:增大服务listen(backlog);优化accept并发与线程池;启用TCP_DEFER_ACCEPT等减少无效队列占用。
    • 内核层:适度提升net.core.somaxconn(如4096/8192),并同步评估net.ipv4.tcp_max_syn_backlog;必要时开启syncookies抵御SYN洪泛(权衡性能)。
    • 架构层:引入连接限流/排队(如Nginx/HAProxy限流与队列)、横向扩容连接复用(长连接/连接池)。

0