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

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

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

zabbix

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

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

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. 创建模板

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

2.设置模板

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

3.添加监控项

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

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

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

为了方便大家添加,我已经将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 模板下面添加和设置的,大家不要设置错了

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

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

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

添加完之后我们点击update

三、添加主机

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

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

进行查看

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


四、出图结果

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


小结:

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

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

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

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

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

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


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



给TA打赏
共{{data.count}}人
人已打赏
Zabbix

Zabbix 新版微信告警

2017-6-14 22:54:53

Zabbix

ZABBIX 忘记登录密码

2017-7-27 17:28:17

2 条回复 A文章作者 M管理员
  1. 有个问题,根据上文的配置方式来看,比如16:23 的数据看此时是取得了tcp11种状态的值,但是取值时16:23 这个时刻tcp_status.sh
    ①这个脚本应该被执行了1次,写了一次tmp_file 然后取得了11种值;
    ②脚本被执行了11次也写了11次tmp_file。
    如果是第二种,那么会不会有延迟问题,显示的16:23的数据其实有几个值是前后几秒的?

    • zabbix 默认获取脚本的时间是60秒,不可能随时获取。

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索