博客
关于我
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 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>