zabbix--監控 TCP 連接狀態


命令測試

​ Tcp的連接狀態對於我們web服務器來說是至關重要的,從TCP的連接狀態中可以看出網絡的連接情況,服務器的壓力情況,對服務器的並發有很好的直觀反映;尤其是並發量ESTAB;或者是syn_recv值,假如這個值比較大的話我們可以認為是不是受到了攻擊,或是是time_wait值比較高的話,我們要考慮看我們內核是否需要調優,太高的time_wait值的話會占用太多端口,要是端口少的話后果不堪設想。

我們可以利用下面命令來查詢11中狀態的連接數,下面我們也可以利用這個命令來寫腳本。

[root@access01 ~]# netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
LISTEN 57
ESTABLISHED 1197
TIME_WAIT 309

 

zabbix 客戶端配置

1.編寫tcp狀態獲取腳本

# vim /etc/zabbix/scripts/tcp_conn_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

2.給腳本賦予執行權限並執行腳本進行測試,給tcp_status.txt文本zabbix權限

# chmod +x /etc/zabbix/scripts/tcp_conn_status.sh

# bash /etc/zabbix/scripts/tcp_conn_status.sh established
1239

# chown zabbix.zabbix /tmp/tcp_status.txt

3.編寫zabbix子配置文件

# vim /etc/zabbix/zabbix_agentd.d/userparameter_tcp_conn.conf
UserParameter=tcp.status[*],/etc/zabbix/scripts/tcp_conn_status.sh $1

4.啟動zabbix-agent

# systemctl restart zabbix-agent.service

 

zabbix 服務端配置

✏️ 本文所使用模板鏈接:https://pan.baidu.com/s/1pq-2Swff1XzeHwVkvABQEQ 提取碼:2iab

首先在服務器上面測試能否獲取到值

# zabbix_get -s 172.24.115.5 -k tcp.status[established]
826

1.創建模板

2.創建該模板下的11個監控項,下面示例其中一個

3.創建該模板下的圖形

4.關聯該模板到客戶端主機

5.進行數據查看

6.在grafana上面進行繪圖展示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM