请启用 Javascript 以查看内容

zabbix监控TCP状态

 ·   ·  ☕ 3 分钟  ·  ✍ CNSRE

zabbix-agent 服务器配置

脚本内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
cat /etc/zabbix/scripts/auto_detection_tcp_state.sh
#!/bin/bash
#TCP连接数及状态

if [ $# -ne 1 ];then
        echo -e "\033[32mUsage: sh $0 {ESTABLISHED|LISTEN|TIME_WAIT|CLOSED|CLOSE_WAIT|CLOSING|FIN_WAIT1|FIN_WAIT2|LAST_ACK|SYN_RECV|SYN_SENT}\033[0m"
        exit 1
fi

case $1 in 
        #socket已经建立连接
        ESTABLISHED)   
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "ESTABLISHED")
        echo $result
        ;;
        #监听状态  
        LISTEN)       
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "LISTEN")
        echo $result
        ;;
        #表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后就可回到CLOSED状态
        TIME_WAIT)     
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "TIME_WAIT")
        echo $result
        ;;
        #socket没有被使用,无连接
        CLOSED)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "CLOSED")
        echo $result
        ;;
        #等待关闭连接
        CLOSE_WAIT)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "CLOSE_WAIT")
        echo $result
        ;;
        #服务器端和客户端都同时关闭连接
        CLOSING)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "CLOSING")
        echo $result
        ;;
        #套接字已关闭,连接正在关闭
        FIN_WAIT1)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "FIN_WAIT1")
        echo $result
        ;;
        #连接已关闭,套接字正在等待从远程端关闭
        FIN_WAIT2)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "FIN_WAIT2")
        echo $result
        ;;
        #远端关闭,当前socket被动关闭后发送FIN报文,等待对方ACK报文
        LAST_ACK)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "LAST_ACK")
        echo $result
        ;;
        #接收到SYN报文
        SYN_RECV)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "SYN_RECV")
        echo $result
        ;;
        #已经发送SYN报文
        SYN_SENT)
        result=$(netstat -an | awk '/^tcp/ {print $0}'|grep -wc "SYN_SENT")
        echo $result
        ;;  
        *)
        echo -e "\033[32mUsage: sh $0 {ESTABLISHED|LISTEN|TIME_WAIT|CLOSED|CLOSE_WAIT|CLOSING|FIN_WAIT1|FIN_WAIT2|LAST_ACK|SYN_RECV|SYN_SENT}\033[0m"
esac

编辑zabbix_agent配置文件

添加以下内容

1
2
3
vim  /etc/zabbix/zabbix_agentd.conf
 ##添加此行
 UserParameter=tcp.state[*],/etc/zabbix/scripts/auto_detection_tcp_state.sh $1

重启zabbix-agent

1
 service zabbix_agentd restart

授权并验证脚本

1
2
3
4
5
chmod +x auto_detection_tcp_state.sh
./auto_detection_tcp_state.sh   LISTEN
9
zabbix_get -s 10.0.10.243 -k "tcp.state[LISTEN]"
9

Zabbix监控平台配置

模板

点击下载zabbix_tcp_templates.xml

导入TCP状态监控模板

配置->模板->导入(右上角)->选择下载的模板文件->最后点击导入
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

关联模板

要把导入的模板关联到相对应的主机上边、配置->点击你的主机->``模板->选择刚才导入模板,点击添加,最后点击更新`即可。
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

最后展示

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

TCP 相关材料

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

Time_Wait状态产生的原因,危害,如何避免
什么是time_Wait?如何产生的?

附送送几个自定义脚本

接口健康检查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
healthyCheck=https://validation.xxx.cn/healthyCheck
if [ $# -ne 1 ];then
            echo "Follow the script name with an argument"
fi
case  $1 in
        healthyCheck)
        curl -k -s $healthyCheck  |awk -F '"|:|,' '{print $4}'
        ;;
        *)
        echo -e "\033[5;31m Usage: sh -bash [Boradlink|Hcmini]\033[0m"
esac

监控磁盘IO

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash
Device=`iostat |awk  '{print $1}' |  awk 'NR==7{print}'` 
if [ $# -ne 1 ];then
    echo "Follow the script name with an argument"
fi
case $1 in
    rrqm)
        iostat -dxk 1 1|grep -w $Device |awk '{print $3}'
        ;;
    rps)
        iostat -dxk 1 1|grep -w $Device  |awk '{print $4}'
        ;;
    wps)
        iostat -dxk 1 1|grep -w $Device |awk '{print $5}'
        ;;
    rKBps)
        iostat -dxk 1 1|grep -w $Device |awk '{print $6}'
        ;;
    wKBps)
        iostat -dxk 1 1|grep -w $Device |awk '{print $7}'
        ;;
    avgrq-sz)
        iostat -dxk 1 1|grep -w $Device |awk '{print $8}'
        ;;
    avgqu-sz)
        iostat -dxk 1 1|grep -w $Device |awk '{print $9}'
        ;;
    await)
        iostat -dxk 1 1|grep -w $Device |awk '{print $10}'
        ;;
    svctm)
        iostat -dxk 1 1|grep -w $Device |awk '{print $13}'
        ;;
    util)
        iostat -dxk 1 1|grep -w $Device |awk '{print $14}'
        ;;
    *)
        echo -e "\e[033mUsage: sh $0 [rrqm|rps|wps|rKBps|wKBps|avgqu-sz|avgrq-sz|await|svctm|util]\e[0m"
esac
eof

文章链接
https://www.cnsre.cn/posts/210425130327/

分享

CNSRE
作者
CNSRE
一个📚学习中的👨‍💻SRE运维工程师🚀🚀🚀


目录