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

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

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

zabbix

TCP 11种状态图 (我也记不住所有的)

15.jpg-43.3kB

TCP连接可以使用命令获取

[root@abcdocker ~]# 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 - 没有任何连接状态;

一、编写配置文件

[root@abcdocker zabbix]# grep "Include" zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf

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

编写配置文件

[root@abcdocker 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板块

复制脚本

[root@abcdocker 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@abcdocker zabbix_agentd.d]# chmod +x tcp_connection_status.sh 
[root@abcdocker zabbix_agentd.d]# chown zabbix.zabbix /tmp/tcp_status.txt

重点: 这里要添加执行权限和tcp_status的属主属组


执行脚本测试

既然脚本写完了,我们就需要执行一下

[root@abcdocker zabbix_agentd.d]# zabbix_get -s 127.0.0.1  -k tcp.status[established]
8
[root@abcdocker zabbix_agentd.d]# zabbix_get -s 127.0.0.1  -k tcp.status[lastack]
0
[root@abcdocker zabbix_agentd.d]# zabbix_get -s 127.0.0.1  -k tcp.status[finwait1]
0
[root@abcdocker zabbix_agentd.d]# zabbix_get -s 127.0.0.1  -k tcp.status[timewait]
101

如果没有zabbix_get需要yum安装

二、WEB界面配置

1. 创建模板

image_1bm1ikg6lds1hccvuq1p9r2nk9.png-85.6kB

2.设置模板

image_1bm1ilq1ptdt1b7615d51o74qchm.png-61.1kB

3.添加监控项

image_1bm1iopf8bi019nd1mntt5219er13.png-59kB

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

image_1bm1iqdcl8hn1icu9dr13uigkt1g.png-77.5kB

为了方便大家添加,我已经将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

可以直接使用模板导入即可


4.添加图表

我们所有的操作都在TCP 模板下面添加和设置的,大家不要设置错了

image_1bm1j07lu1mrp1bbl28l1l5u19kh1t.png-49.8kB

11.png-80.6kB

image_1bm1j58g6aajv1j7c1n45ls63m.png-72.8kB

添加完之后我们点击update

三、添加主机

image_1bm1jevep1u9i3801mke1o517i643.png-34.3kB

image_1bm1jhhd91lqmvn91fu91htl1i7m4g.png-55.5kB

进行查看

image_1bm1jiase13m36oomsn1b2m1ah54t.png-19.1kB


四、出图结果

12.png-112.2kB


小结:

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

关于tcp最大连接可以参考下面的文章

http://www.cnblogs.com/fjping0606/p/4729389.html

13.png-120.4kB

关于ZABBIX更多相关文章请前往 ZABBIX板块

参考 http://john88wang.blog.51cto.com/2165294/1586234/


愿各位与君同勉 (点个赞在走呗!)



「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
abcdocker运维博客
2 条回复 A 作者 M 管理员
  1. 有个问题,根据上文的配置方式来看,比如16:23 的数据看此时是取得了tcp11种状态的值,但是取值时16:23 这个时刻tcp_status.sh ①这个脚本应该被执行了1次,写了一次tmp_file 然后取得了11种值; ②脚本被执行了11次也写了11次tmp_file。 如果是第二种,那么会不会有延迟问题,显示的16:23的数据其实有几个值是前后几秒的?
    • zabbix 默认获取脚本的时间是60秒,不可能随时获取。
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论
网站搭建
加入我们
  • 站长QQ:381493251一键联系
  • abcdocker 微信公众号
    abcdocker QQ群