脚本
#!/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个
如果还要监控其他状态,到模板中克隆监控项即可