zabbix監控指令碼之tcp狀態檢測
阿新 • • 發佈:2021-10-16
指令碼
#!/bin/bash
state=$1
ss -nat | awk 'NR!=1 {state[$1]++} END {for (i in state) print i,state[i]}' | awk '/'$state'/{print $2}'
註釋
利用awk中的陣列取出所有狀態及個數
root@agent-active:~# ss -nat | awk 'NR!=1 {state[$1]++} END {for (i in state) print i,state[i]}'
LISTEN 21
ESTAB 2
TIME-WAIT 15
想要監控的狀態通過$1傳給變數 state,在pattern中/ /匹配指令碼變數需要把變數放在單引號中
awk '/'$state'/{print $2}'
原本想:awk -v state=$1 '/state/{print $2}'
,但是不知道 // 如何匹配awk定義的變數,只知道上面的方法
新增自定義監控項
- 配置agent配置檔案
新增:UserParameter=tcp_status[*],/etc/zabbix/zabbix_agentd.d/tcp_status.sh $1 - 增加指令碼許可權,重啟agent
- server上zabbix_get測試
root@zabbix-server:~# zabbix_get -s 10.0.0.68 -p 10050 -k tcp_status[LISTEN] sh: 1: /etc/zabbix/zabbix_agentd.d/tcp_status.sh: Permission denied root@zabbix-server:~# zabbix_get -s 10.0.0.68 -p 10050 -k tcp_status[LISTEN] 21 root@zabbix-server:~# zabbix_get -s 10.0.0.68 -p 10050 -k tcp_status[ESTAB] 3 root@zabbix-server:~# zabbix_get -s 10.0.0.68 -p 10050 -k tcp_status[TIME-WAIT] 16
然後在zabbix-web中建立模板——監控項——觸發器——圖形即可
截圖太麻煩,就不上圖了額,圖中設定LISTEN大於20報警,實際為21個
如果還要監控其他狀態,到模板中克隆監控項即可