目标:监控mysql当前打开的连接数(Threads_connected)。
环境:
Zabbix 4.0.29
zabbix server:192.168.149.149
zabbix agent:192.168.149.150
方法1. 通过zabbix-agent执行shell脚本
简单概括就是需要自定义键值对,通过zabbix-agent抓取shell脚本的返回值,然后传递给zabbix-server。
步骤:
- 在agent侧编写脚本monitor_mysql.sh,内容为:
#!/bin/bash
export MYSQL_PWD=123456
/usr/bin/mysql -h 192.168.149.150 -uzabbix -e "show status like '%Threads_connected%';"|grep 'Threads_connected'|awk '{print $2}'
MYSQL_PWD为数据库密码,我将脚本放在了 /tmp 目录下。
- 修改用户参数。因为我已经在zabbix_agentd.conf配置文件中配置了:
Include=/etc/zabbix/zabbix_agentd.d/*.conf
所以在该目录下的userparameter_mysql.conf中添加(如果没有userparameter_mysql.conf,直接新建即可):
UserParameter=mysql.Threads_connected,sh /tmp/monitor_mysql.sh
这是一个键值对,key为mysql.Threads_connected,value值为脚本返回值,就是mysql当前打开的连接数。
- 在server侧使用zabbix-get测试。可能遇到以下问题:
# ./zabbix_get -s 192.168.149.150 -k "mysql.Threads_connected"
zabbix_get [9357]: Check access restrictions in Zabbix agent configuration
需要修改zabbix_agentd.conf的server选项,为了省事,我设置成了Server=0.0.0.0/0。
# ./zabbix_get -s 192.168.149.150 -k "mysql.Threads_connected"
sh: /root/test/monitor_mysql.sh: 权限不够
检查一下权限,我把脚本从 /root/test 目录挪到 /tmp 目录就好了。
- 配置item。因为返回值为数字,所以选Numeric。
- 查询最新数据。
方法2. 通过zabbix-server执行shell脚本
简单概括就是通过zabbix-server的External checks功能执行脚本并记录返回值。优点是灵活,客户端无需任何配置,不需要zabbix-agent;缺点是过多使用会严重降低zabbix系统性能。
步骤:
- 查询zabbix_server.conf,有配置如下:
# ExternalScripts=${datadir}/zabbix/externalscripts
因为实验中zabbix-server安装目录为 /usr/local/zabbix,所以外部脚本的默认路径为 /usr/local/zabbix/share/zabbix/externalscripts。将monitor_mysql.sh放在该目录下。
- 在命令行测试。
# sh /usr/local/zabbix/share/zabbix/externalscripts/monitor_mysql.sh
1
没有问题,进入下一步图形界面配置。
-
图形界面配置。
Type为External check,Key为脚本名称,如果脚本有参数,就写到中括号里,类似 check_oracle.sh["-h","{HOST.CONN}"] 。 -
查询最新数据。
参考文档
[1]Zabbix SIA.EXTERNAL CHECKS[EB/OL].https://www.zabbix.com/documentation/current/manual/config/items/itemtypes/external,2020-01-01.
[2]sfzhang.Zabbix+Shell脚本监控线上服务[EB/OL].https://blog.51cto.com/sfzhang88/999523,2012-09-20.