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
完成添加後,如下圖所示
說明:此處爲演示,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權限。
使用system.ss時,不需要修改ss命令權限即可執行,但獲取TIME_WAIT時要用中橫線
說明:在1臺主機上驗證獲取數據正常後,就可以使用ansible等批量部署工具將配置推送到其它需要監控的節點上。
4、獲取數據正常後,接下來是在zabbix中創建模板。通常我們在Zabbix添加項(item)的步驟爲:
先創建模板① (Template)-->② 應用(Application)-->③ 監控項(items)-->④觸發器(triggers),最後將模板應用到對應的主機上(此處創建模板時,將模板加到了Linux servers組中)。
① 在Configuration-->Templates中創建一個名爲"Template TCP Connections"的模板,並且歸屬於"Linux Servers"組中,這樣屬於Linux Servers組中的主機將自動繼承"Template TCP Connections"模板,如下圖所示。
創建的Templates狀態如下圖所示。
② 創建Application,名爲"TCP Connections",創建Application的用途是後續添加的items都歸屬於該Application,便於分類以及查找,如下圖所示。
③ 創建items,如下圖所示,點擊右上角的"Create item"。
添加TIME_WAIT的監控,相關設置如下圖所示,在item的名稱"Name"這裏,我們用了zabbix的位置變量,每次添加item時,我們只需要修改key中中括號的內容,方便快速添加。
添加完成後,狀態如下圖所示。
接下來,如果要繼續添加其它監控項,我們就可以使用Zabbix的Clone(克隆)功能,如下圖所示。
點擊"Clone"後,就相當於基於原有的item並重新複製了一個item,我們只需要修改key就可以了。
完成修改後,點擊下方的"Add"添加,顯示如下。
最後,我們用"Clone"方式添加完其它item項,最終顯示如下圖所示。
說明:此處均用netstat命令來完成添加,ss也可以,但要注意添加的TCP狀態名稱是用中橫線。
④ 爲需要設置閾值的items是添加觸發器,點擊右上角的"Create trigger",創建觸發器,如下圖所示。
觸發器的名稱最好與對應item相同,然後選擇嚴重等級(Severity),嚴重等級爲分:Not classified(未分類,需關注)、Information(普通信息,需關注)、Warning(警告)、Average(一般嚴重)、High(非常嚴重)、Disaster(災難),具體設置如下圖所示。
在添加觸發器表達式時,我們只需要點擊表達式對話框右邊的"Add"按鈕,選擇對應的item,先按默認完成添加,然後再按需修改表達式,較複雜的表達式都是手工按需求編寫的。
最後,以"Clone"方式完成其它item對應的trigger添加,完成後,如下圖所示。
說明:相關Trigger閾值需要根據實際情況進行設置調整。
⑤ 在所有主機上添加模板"Template TCP Connections",如下圖所示。
完成添加後,在"Latest data"中查看數據,如下圖所示。
說明:Application對話框是支持模糊匹配的,這也體現了在創建某一類items時,需創建Application的重要性。
最後,在Grafana中展示效果如下圖所示
總結:使用Grafana來展示數據確實比Zabbix自身圖表要有優勢,對Grafana感興趣的可以關注我前面分享的17篇文章,全是乾貨哦,後續會繼續分享使用經驗。