一、本次監控的服務器環境為:
操作系統版本:centos7
zabbix-agnet版本:3.0.8
zabbix-server版本: 3.4.10
二、在安裝之前先了解一下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 – 沒有任何連接狀態;
TCP連接過程是狀態的轉換,促使發生狀態轉換的是用戶調用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;傳送過來的數據段,特別那些包括以下標記的數據段SYN,ACK,RST和FIN;還有超時,上面所說的都會使TCP狀態發生變化。
詳解
1、LISTENING狀態
FTP服務啟動後首先處於偵聽(LISTENING)狀態。
2、ESTABLISHED狀態
ESTABLISHED的意思是建立連接。表示兩台機器正在通信。
3、CLOSE_WAIT
對方主動關閉連接或者網絡異常導致連接中斷,這時我方的狀態會變成CLOSE_WAIT 此時我方要調用close()來使得連接正確關閉
4、TIME_WAIT
我方主動調用close()斷開連接,收到對方確認後狀態變為TIME_WAIT。TCP協議規定TIME_WAIT狀態會一直持續2MSL(即兩倍的分 段最大生存期),以此來確保舊的連接狀態不會對新連接產生影響。處於TIME_WAIT狀態的連接佔用的資源不會被內核釋放,所以作為服務器,在可能的情 況下,盡量不要主動斷開連接,以減少TIME_WAIT狀態造成的資源浪費。
目前有一種避免TIME_WAIT資源浪費的方法,就是關閉socket的LINGER選項。但這種做法是TCP協議不推薦使用的,在某些情況下這個操作可能會帶來錯誤。
5、SYN_SENT狀態
SYN_SENT狀態表示請求連接,當你要訪問其它的計算機的服務時首先要發個同步信號給該端口,此時狀態為SYN_SENT,如果連接成功了就變為 ESTABLISHED,此時SYN_SENT狀態非常短暫。但如果發現SYN_SENT非常多且在向不同的機器發出,那你的機器可能中了衝擊波或震蕩波 之類的病毒了。這類病毒為了感染別的計算機,它就要掃描別的計算機,在掃描的過程中對每個要掃描的計算機都要發出了同步請求,這也是出現許多 SYN_SENT的原因。
三、服務端安裝部署
1、先在服務器上新建腳本vim
/etc/zabbix/tcp_connections.sh
#!/bin/bash
#netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “ESTABLISHED” |cut -d” ” -f2
#netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “TIME_WAIT” |cut -d” ” -f2
#netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “LISTEN” |cut -d” ” -f2
ARGS=1
if [ $# -ne “$ARGS” ];then
echo “Please input one arguement:”
fi
case $1 in
ESTABLISHED)
result=`netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “ESTABLISHED” |cut -d” ” -f2`
echo $result
;;
TIME_WAIT)
result=`netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “TIME_WAIT” |cut -d” ” -f2`
echo $result
;;
LISTEN)
result=`netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “LISTEN” |cut -d” ” -f2`
echo $result
;;
*)
echo “Usage:$0(TIME_WAIT|ESTABLISHED|LISTEN)”
;;
esac
2、給腳本賦可執行權限
chmod +x tcp_connections.sh
3、測試腳本是否正常
[root@host-172-22-22-10 zabbix]# ./tcp_connections.sh LISTEN
20
4、修改配置文件,加載腳本
vim zabbix_agentd.conf
新增一列
UserParameter=tcp.status[*],/etc/zabbix/tcp_connections.sh $1 $2
5、重啟服務
[root@host-172-22-22-10 zabbix]# service zabbix-agent restart
Redirecting to /bin/systemctl restart zabbix-agent.service
四、web端配置
新建三個監控項,健值分別是
tcp.status[ESTABLISHED]
tcp.status[TIME_WAIT]
tcp.status[LISTEN]


配完一般1分鐘後能採集到數據
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/228397.html