zabbix系列(十一) 监控TCP链接数

一、本次监控的服务器环境为:

操作系统版本:centos7

zabbix-agnet版本:3.0.8

zabbix-server版本: 3.4.10

二、在安装之前先了解一下tcp的一些知识,各个状态的意义如下:

LISTEN - 侦听来自远方TCP端口的连接请求;

SYN-SENT - 在发送连接请求后等待匹配的连接请求;

 SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;

 ESTABLISHED - 代表一个打开的连接,数据可以传送给用户;

 FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

 FIN-WAIT-2 - 从远程TCP等待连接中断请求;

CLOSE-WAIT - 等待从本地用户发来的连接中断请求;

 CLOSING - 等待远程TCP对连接中断的确认;

 LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;

 TIME-WAIT - 等待足够的时间以确保远程TCP接收到连接中断请求的确认;

 CLOSED - 没有任何连接状态;

TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN;还有超时,上面所说的都会时TCP状态发生变化。

 

详解

1LISTENING状态

FTP服务启动后首先处于侦听(LISTENING)状态。

2ESTABLISHED状态

ESTABLISHED的意思是建立连接。表示两台机器正在通信

3、CLOSE_WAIT

    对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

4、TIME_WAIT

    我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAITTCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分 段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情 况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。

    目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。

5、SYN_SENT状态

SYN_SENT状态表示请求连接,当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为 ESTABLISHED,此时SYN_SENT状态非常短暂。但如果发现SYN_SENT非常多且在向不同的机器发出,那你的机器可能中了冲击波或震荡波 之类的病毒了。这类病毒为了感染别的计算机,它就要扫描别的计算机,在扫描的过程中对每个要扫描的计算机都要发出了同步请求,这也是出现许多 SYN_SENT的原因。

 

三、服务端安装部署

1、先在服务器上新建脚本vim /etc/zabbix/tcp_connections.sh 

 

#!/bin/bash
#netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | grep -w "ESTABLISHED" |cut -d" " -f2
#netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | grep -w "TIME_WAIT" |cut -d" " -f2
#netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | grep -w "LISTEN" |cut -d" " -f2

ARGS=1
if [ $# -ne "$ARGS" ];then
    echo "Please input one arguement:" 
fi
case $1 in
    ESTABLISHED)
        result=`netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | grep -w "ESTABLISHED" |cut -d" " -f2`
            echo $result 
            ;;
        TIME_WAIT)
            result=`netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | grep -w "TIME_WAIT" |cut -d" " -f2`
            echo $result 
            ;;
        LISTEN)
        result=`netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | grep -w "LISTEN" |cut -d" " -f2`
            echo $result 
            ;;
        *)
        echo "Usage:$0(TIME_WAIT|ESTABLISHED|LISTEN)"
    ;;
esac

 

2、给脚本赋可执行权限

chmod +x tcp_connections.sh 

3、测试脚本是否正常

[root@host-172-22-22-10 zabbix]# ./tcp_connections.sh LISTEN
20

4、修改配置文件,加载脚本

vim zabbix_agentd.conf

新增一列

UserParameter=tcp.status[*],/etc/zabbix/tcp_connections.sh $1 $2

 

5、重启服务

[root@host-172-22-22-10 zabbix]# service zabbix-agent restart
Redirecting to /bin/systemctl restart  zabbix-agent.service

四、web端配置

新建三个监控项,健值分别是

tcp.status[ESTABLISHED]

tcp.status[TIME_WAIT]

tcp.status[LISTEN]

 

配完一般1分钟后能采集到数据

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值