博客
关于我
zabbix3.4实现对tcp连接数及状态的监控
阅读量:513 次
发布时间: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监控效果图

这里写图片描述

你可能感兴趣的文章
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>