黑帽联盟

标题: zabbix监控tcp连接数 [打印本页]

作者: 定位    时间: 2018-5-4 13:43
标题: zabbix监控tcp连接数
tcp各个状态的意思:
ESTABLISHED       socket已经建立连接
CLOSED            socket没有被使用,无连接
CLOSING           服务器端和客户端都同时关闭连接
CLOSE_WAIT        等待关闭连接
TIME_WAIT         The socket is waiting after close to handle packets still in the network. 表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后就可回到CLOSED状态
LAST_ACK          The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 远端关闭,当前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.


1 搭建环境:
zabbix server :centos 6  ip 192.168.234.134
zabbix client (nginx) :centos 7  ip:192.168.234.133


2 监控方法:
第一种监控方法用ss
  1. /usr/sbin/ss state all | awk '{++S[$1]} END {for (a in S) {printf "%11-s %s\n",a,S[a]}}'
  2. LISTEN      9
  3. ESTAB       1
  4. State       1
  5. TIME-WAIT   110
复制代码
第二种监控方法用netstat
  1. /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
  2. LISTEN 9
  3. ESTABLISHED 1
  4. SYN_SENT 1
  5. TIME_WAIT 126
复制代码
3 监控脚本编写
vi /usr/local/zabbix/scripts/tcp_status.sh
  1. #!/bin/bash
  2. #this script is used to get tcp and udp connetion status
  3. #tcp status
  4. metric=$1
  5. tmp_file=/tmp/tcp_status.txt
  6. /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' > $tmp_file
  7.   
  8. case $metric in
  9.    closed)
  10.           output=$(awk '/CLOSED/{print $2}' $tmp_file)
  11.           if [ "$output" == "" ];then
  12.              echo 0
  13.           else
  14.              echo $output
  15.           fi
  16.         ;;
  17.    listen)
  18.           output=$(awk '/LISTEN/{print $2}' $tmp_file)
  19.           if [ "$output" == "" ];then
  20.              echo 0
  21.           else
  22.              echo $output
  23.           fi
  24.         ;;
  25.    synrecv)
  26.           output=$(awk '/SYN_RECV/{print $2}' $tmp_file)
  27.           if [ "$output" == "" ];then
  28.              echo 0
  29.           else
  30.              echo $output
  31.           fi
  32.         ;;
  33.    synsent)
  34.           output=$(awk '/SYN_SENT/{print $2}' $tmp_file)
  35.           if [ "$output" == "" ];then
  36.              echo 0
  37.           else
  38.              echo $output
  39.           fi
  40.         ;;
  41.    established)
  42.           output=$(awk '/ESTABLISHED/{print $2}' $tmp_file)
  43.           if [ "$output" == "" ];then
  44.              echo 0
  45.           else
  46.              echo $output
  47.           fi
  48.         ;;
  49.    timewait)
  50.           output=$(awk '/TIME_WAIT/{print $2}' $tmp_file)
  51.           if [ "$output" == "" ];then
  52.              echo 0
  53.           else
  54.              echo $output
  55.           fi
  56.         ;;
  57.    closing)
  58.           output=$(awk '/CLOSING/{print $2}' $tmp_file)
  59.           if [ "$output" == "" ];then
  60.              echo 0
  61.           else
  62.              echo $output
  63.           fi
  64.         ;;
  65.    closewait)
  66.           output=$(awk '/CLOSE_WAIT/{print $2}' $tmp_file)
  67.           if [ "$output" == "" ];then
  68.              echo 0
  69.           else
  70.              echo $output
  71.           fi
  72.         ;;
  73.    lastack)
  74.           output=$(awk '/LAST_ACK/{print $2}' $tmp_file)
  75.           if [ "$output" == "" ];then
  76.              echo 0
  77.           else
  78.              echo $output
  79.           fi
  80.          ;;
  81.    finwait1)
  82.           output=$(awk '/FIN_WAIT1/{print $2}' $tmp_file)
  83.           if [ "$output" == "" ];then
  84.              echo 0
  85.           else
  86.              echo $output
  87.           fi
  88.          ;;
  89.    finwait2)
  90.           output=$(awk '/FIN_WAIT2/{print $2}' $tmp_file)
  91.           if [ "$output" == "" ];then
  92.              echo 0
  93.           else
  94.              echo $output
  95.           fi
  96.          ;;
  97.          *)
  98.           echo -e "\e[033mUsage: sh  $0 [closed|closing|closewait|synrecv|synsent|finwait1|finwait2|listen|established|lastack|timewait]\e[0m"
  99.    
  100. esac
复制代码
4添加zabbix客户端配置文件
  1. vi /usr/local/zabbix/etc/zabbix_agentd.conf 添加
  2. UserParameter=tcp.status[*],/usr/local/zabbix/scripts/tcp_status.sh $1
复制代码
然后重启agentd服务

5 测试链接
  1. zabbix_get -s 192.168.234.133 -p 10050 -k tcp.status[timewait]
复制代码
6 倒入模板,确认出图
11.png

12.png





欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) Powered by Discuz! X2.5