1. 程式人生 > 其它 >zabbix監控指令碼之tcp狀態檢測

zabbix監控指令碼之tcp狀態檢測

指令碼

#!/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定義的變數,只知道上面的方法

新增自定義監控項

  1. 配置agent配置檔案
    新增:UserParameter=tcp_status[*],/etc/zabbix/zabbix_agentd.d/tcp_status.sh $1
  2. 增加指令碼許可權,重啟agent
  3. 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個

如果還要監控其他狀態,到模板中克隆監控項即可