博客
关于我
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监控效果图

这里写图片描述

你可能感兴趣的文章
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>