博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zabbix3.4实现对tcp连接数及状态的监控
阅读量:512 次
发布时间:2019-03-07

本文共 4283 字,大约阅读时间需要 14 分钟。

zabbix3.4实现对tcp连接数及状态的监控

一、获取TCP连接数相关方法

方法一:[root@host-47-98-97-124 scripts]# netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}'LISTEN 6ESTABLISHED 64TIME_WAIT 100方法二:[root@host-47-98-97-124 scripts]# ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}'LISTEN 6ESTAB 64TIME-WAIT 100总结:netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多。

二、TCP状态信息描述

ESTABLISHED       socket已经建立连接  CLOSED            socket没有被使用,无连接  CLOSING           服务器端和客户端都同时关闭连接  CLOSE_WAIT        等待关闭连接  TIME_WAIT         表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后就可回到CLOSED状态  LAST_ACK          远端关闭,当前socket被动关闭后发送FIN报文,等待对方ACK报文  LISTEN            监听状态  SYN_RECV          接收到SYN报文  SYN_SENT          已经发送SYN报文  FIN_WAIT1         The socket is closed, and the connection is shutting down  FIN_WAIT2         Connection is closed, and the socket is waiting for a shutdown from the remote end.

三、实现zabbix对tcp状态监控

第一步:导入tcp状态监控模板可以从网上下载tcp状态监控模板,也可以自定义状态监控模板,在这里就不演示了。第二步:编写tcp状态监控脚本方法一:#!/bin/bashif [ $# -ne 1 ];then    echo "Follow the script name with an argument "ficase $1 in     established)   #socket已经建立连接         result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | grep -w ESTABLISHED | cut -d " "  -f 2`        echo $result        ;;    listen)        #监听状态          result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | grep -w LISTEN | cut -d " "  -f 2`        echo $result        ;;    timewait)     #表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后就可回到CLOSED状态         result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | grep -w TIME_WAIT | cut -d " "  -f 2`        echo $result        ;;    closed)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/CLOSED/{print $2}'`        echo $result        ;;    closewait)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/CLOSE_WAIT/{print $2}'`        if [ "$result" == "" ];then               echo 0        else           echo $result        fi        ;;    closing)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/CLOSING/{print $2}'`        echo $result        ;;    finwait1)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/FIN_WAIT1/{print $2}'`        echo $result        ;;    finwait2)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/FIN_WAIT2/{print $2}'`        echo $result        ;;    lastack)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/LAST_ACK /{print $2}'`        echo $result        ;;    synrecv)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/SYN_RECV/{print $2}'`        echo $result        ;;    synsent)        result=`netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}' | awk '/SYN_SENT/{print $2}'`        echo $result        ;;          *)          echo -e "\e[033mUsage: sh  $0 [closed|closing|closewait|synrecv|synsent|finwait1|finwait2|listen|established|lastack|timewait]\e[0m"esac方法二:[root@host-47-98-97-124 scripts]# cat Tcp-status.sh #!/bin/bashif [ $# -ne 1 ];then    echo "Follow the script name with an argument "ficase $1 in     LISTEN)        result=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/LISTEN/{print $2}'`        if [ "$result" == "" ];then               echo 0        else           echo $result        fi        ;;    ESTAB)        result=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/ESTAB/{print $2}'`        if [ "$result" == "" ];then               echo 0        else           echo $result        fi        ;;    CLOSE-WAIT)        result=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/CLOSE-WAIT/{print $2}'`        if [ "$result" == "" ];then               echo 0        else           echo $result        fi        ;;    TIME-WAIT)        result=`ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}' | awk '/TIME-WAIT/{print $2}'`        if [ "$result" == "" ];then               echo 0        else           echo $result        fi        ;; esac

四、grafana监控效果图

这里写图片描述

你可能感兴趣的文章