細說Zabbix監控TCP狀態

Zabbix默認模板中是不能監控到TCP各個狀態的連接數的,需要我們自定義一個模板來實現。網上方法很多,並且很多都是一長串的腳本,有點讓人望而卻步。我個人總結就是先弄清楚TCP有哪些狀態,然後在zabbix          的agent上新增一條配置即可,具體操作按如下步驟。

1、在zabbix的/etc/zabbix/zabbix_agentd.d目錄下新增配置文件tcp_status.conf

# cat > /etc/zabbix/zabbix_agentd.d/tcp_status.conf << EOF

## 以下列出的2條UserParameter,2選1即可.

## 使用 netstat 命令來獲取TCP狀態連接數,需要修改netstat權限,即zabbix用戶在執行netstat命令時,需具有與netstat命令所有者相當的權限要先執行chmod 4755 /bin/netstat .

UserParameter=system.netstat[*],netstat -antp |grep -i \$1 |grep -v grep|wc -l

## 或者使用 ss 命令來獲取TCP狀態連接數,速度比netstat快,也不需要修改ss命令權限,但需要注意是ss列出來的ESTABLISHED是縮寫成ESTAB,且TIME-WAIT、SYN-SENT等狀態中間是中橫線,netstat用的是下劃線TIME_WAIT、SYN_SENT.

UserParameter=system.ss[*], ss -antp |grep -i \$1 |grep -v grep |wc -l

EOF

完成添加後,如下圖所示

image.png

說明:此處爲演示,netstat和ss都添加了

2、重啓zabbix-agent

# systemctl restart zabbix-agent

3、需要監控的TCP狀態主要包括如下幾種:

LISTEN、ESTABLISHED、TIME_WAIT、CLOSE_WAIT、LAST_ACK、SYN_SENT、SYN_RECV、FIN_WAIT1、FIN_WAIT2等。

然後使用zabbix_get命令先檢查一下,確認添加無誤且能獲取到數據。

使用system.netstat時,若不修改netstat命令權限,則會有如下相關提示,需賦予zabbix用戶在執行netstat命令時具有與netstat命令所有者相當的權限,即root權限。

image.png

使用system.ss時,不需要修改ss命令權限即可執行,但獲取TIME_WAIT時要用中橫線

image.png

image.png

說明:在1臺主機上驗證獲取數據正常後,就可以使用ansible等批量部署工具將配置推送到其它需要監控的節點上。

4、獲取數據正常後,接下來是在zabbix中創建模板。通常我們在Zabbix添加項(item)的步驟爲:

先創建模板①  (Template)-->② 應用(Application)-->③ 監控項(items)-->④觸發器(triggers),最後將模板應用到對應的主機上(此處創建模板時,將模板加到了Linux servers組中)。

① 在Configuration-->Templates中創建一個名爲"Template TCP Connections"的模板,並且歸屬於"Linux Servers"組中,這樣屬於Linux Servers組中的主機將自動繼承"Template TCP Connections"模板,如下圖所示。

image.png

創建的Templates狀態如下圖所示。

image.png

② 創建Application,名爲"TCP Connections",創建Application的用途是後續添加的items都歸屬於該Application,便於分類以及查找,如下圖所示。

image.png

③ 創建items,如下圖所示,點擊右上角的"Create item"。

image.png

添加TIME_WAIT的監控,相關設置如下圖所示,在item的名稱"Name"這裏,我們用了zabbix的位置變量,每次添加item時,我們只需要修改key中中括號的內容,方便快速添加。

image.png

添加完成後,狀態如下圖所示。

image.png

接下來,如果要繼續添加其它監控項,我們就可以使用Zabbix的Clone(克隆)功能,如下圖所示。

image.png

點擊"Clone"後,就相當於基於原有的item並重新複製了一個item,我們只需要修改key就可以了。

image.png

完成修改後,點擊下方的"Add"添加,顯示如下。

image.png

最後,我們用"Clone"方式添加完其它item項,最終顯示如下圖所示。

image.png

說明:此處均用netstat命令來完成添加,ss也可以,但要注意添加的TCP狀態名稱是用中橫線。

④ 爲需要設置閾值的items是添加觸發器,點擊右上角的"Create trigger",創建觸發器,如下圖所示。

image.png

觸發器的名稱最好與對應item相同,然後選擇嚴重等級(Severity),嚴重等級爲分:Not classified(未分類,需關注)、Information(普通信息,需關注)、Warning(警告)、Average(一般嚴重)、High(非常嚴重)、Disaster(災難),具體設置如下圖所示。

image.png

在添加觸發器表達式時,我們只需要點擊表達式對話框右邊的"Add"按鈕,選擇對應的item,先按默認完成添加,然後再按需修改表達式,較複雜的表達式都是手工按需求編寫的。

image.png

image.png

最後,以"Clone"方式完成其它item對應的trigger添加,完成後,如下圖所示。

image.png

說明:相關Trigger閾值需要根據實際情況進行設置調整。

⑤ 在所有主機上添加模板"Template TCP Connections",如下圖所示。

image.png

完成添加後,在"Latest data"中查看數據,如下圖所示。

image.png

說明:Application對話框是支持模糊匹配的,這也體現了在創建某一類items時,需創建Application的重要性。

最後,在Grafana中展示效果如下圖所示

image.png

image.png


總結:使用Grafana來展示數據確實比Zabbix自身圖表要有優勢,對Grafana感興趣的可以關注我前面分享的17篇文章,全是乾貨哦,後續會繼續分享使用經驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章