ZABBIX 3.2 监控服务器TCP连接状态

摘要:TCP的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB;或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击,或是是time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想:

先来Review一下:

[[email protected] ~]# netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
TIME_WAIT 99
CLOSE_WAIT 44
FIN_WAIT1 1
FIN_WAIT2 5
ESTABLISHED 275
LAST_ACK 1
LISTEN 25

可以使用man netstat查看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 - 没有任何连接状态;

一、编写配置文件

我们查看我们设置的Include目录,这下面的*.conf文件都是可以读取的

[[email protected] ~]#  grep "Include" /etc/zabbix/zabbix_agentd.conf
### Option: Include
# Include=
Include=/etc/zabbix/zabbix_agentd.d/*.conf

编写配置文件

[[email protected] zabbix_agentd.d]# ls
status.conf  tcp_status.sh  userparameter_mysql.conf

[[email protected] zabbix_agentd.d]# cat status.conf 
UserParameter=tcp.status[*],/etc/zabbix/zabbix_agentd.d/tcp_status.sh "$1"

UserParameter= 后面是key的名称
/etc/zabbix/zabbix_agentd.d 存放脚本的路径
以前的文章有写过,大家可以看我的zabbix板块

编写查看Tcp 状态脚本:

[[email protected] zabbix_agentd.d]# cat tcp_status.sh 
#!/bin/bash
#this script is used to get tcp and udp connetion status
#tcp status
metric=$1
tmp_file=/tmp/tcp_status.txt
/bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' > $tmp_file
case $metric in
   closed)
          output=$(awk '/CLOSED/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   listen)
          output=$(awk '/LISTEN/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   synrecv)
          output=$(awk '/SYN_RECV/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   synsent)
          output=$(awk '/SYN_SENT/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   established)
          output=$(awk '/ESTABLISHED/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   timewait)
          output=$(awk '/TIME_WAIT/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   closing)
          output=$(awk '/CLOSING/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   closewait)
          output=$(awk '/CLOSE_WAIT/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
        ;;
   lastack)
          output=$(awk '/LAST_ACK/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
         ;;
   finwait1)
          output=$(awk '/FIN_WAIT1/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
         ;;
   finwait2)
          output=$(awk '/FIN_WAIT2/{print $2}' $tmp_file)
          if [ "$output" == "" ];then
             echo 0
          else
             echo $output
          fi
         ;;
         *)
          echo -e "\e[033mUsage: sh  $0 [closed|closing|closewait|synrecv|synsent|finwait1|finwait2|listen|established|lastack|timewait]\e[0m"
esac

因为脚本是把tcp的一些信息存放在/tmp/下,为了zabbix可以读取到我们设置zabbix可以读的权限

[root@zhdya02 zabbix_agentd.d]# chmod +x tcp_status.sh 
[root@zhdya02 zabbix_agentd.d]# chown zabbix.zabbix /tmp/tcp_status.txt

二、WEB界面配置

  1. 创建模版
  1. 设置模板
  1. 添加监控项

添加完基本上就是下面这样:

为了方便大家添加,我已经将name和key整理如下. 手动添加即可

Name                 Key
CLOSED              tcp.status[closed]
CLOSE_WAIT          tcp.status[closewait]
CLOSING             tcp.status[closing]
ESTABLISHED         tcp.status[established]
FIN WAIT1           tcp.status[finwait1]
FIN WAIT2           tcp.status[finwait2]
LAST ACK            tcp.status[lastack]
LISTEN              tcp.status[listen]
SYN RECV            tcp.status[synrecv]
SYN SENT            tcp.status[synsent]
TIME WAIT           tcp.status[timewait]

当然直接导入也可:

链接:http://pan.baidu.com/s/1sle6oNj 密码:oqgs

三、添加主机

进行查看

四、出图结果

小结:

因为tcp连接数不太好设置触发器,因为业务不同,具体设置多少还是要根据需求来。因为我这是个人博客监控所以连接数是多少都可以!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏七夜安全博客

Python3实现ICMP远控后门(上)

2423
来自专栏海说

15、TCP/IP协议

15、TCP/IP协议       几台孤立计算机系统组在一起形成网络,几个孤立网络连在一起形成一个网络的网络,即互连网。一个互连网就是一组通过相同协议族互连在...

2230
来自专栏jeremy的技术点滴

TCP细节分析

3316
来自专栏JavaQ

TCP的三次握手和四次挥手

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP工作在网络OSI七...

3436
来自专栏北京马哥教育

以女朋友为例讲解 TCP/IP 三次握手与四次挥手

背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次。 从好上开始,到现在,一年多也算坚持下来了。 问题 有时候聊天的过程中,我的网络或者她的网...

31910
来自专栏JetpropelledSnake

HCNP学习笔记之ICMP协议与ping原理以及用Python实现ping

2014
来自专栏java初学

TCP/IP三次握手与四次挥手

2987
来自专栏小筱月

三次握手和四次挥手

OSI参考模型中的网络层,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。(TCP在运输层,IP在网络层)

1101
来自专栏zhisheng

那些不能遗忘的知识点回顾——计算机网络系列(笔试面试高频题)

前两天发表了“那些不能遗忘的知识点回顾——操作系统系列(笔试面试高频题)”和“那些不能遗忘的知识点回顾——C/C++系列(笔试面试高频题)”文章,没看的赶紧在公...

4146
来自专栏QQ会员技术团队的专栏

从 TCP 三次握手说起:浅析TCP协议中的疑难杂症 ( 1 )

说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼点。本文就是来说说这些头疼点...

7.2K11

扫码关注云+社区

领取腾讯云代金券