首先编辑一个监控脚本check_mysql.sh,这些参数zabbix mysql template默认的,也可以自定义:
#!/bin/bash
#MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
MYSQL_CONN="/usr/bin/mysqladmin"
case $1 in
Uptime)
result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`
echo $result
;;
Com_update)
result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`
echo $result
;;
Slow_queries)
result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"`
echo $result
;;
Com_select)
result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`
echo $result
;;
Com_rollback)
result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3`
echo $result
;;
Questions)
result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"`
echo $result
;;
Com_insert)
result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`
echo $result
;;
Com_delete)
result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`
echo $result
;;
Com_commit)
result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3`
echo $result
;;
Bytes_sent)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`
echo $result
;;
Bytes_received)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
echo $result
;;
Com_begin)
result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3`
echo $result
这里第二行本来是直接把我mysql的password hardcode了。
所以后面执行脚本会有:
[Warning] Using a password on the command line interface can be insecure.
所以解决hardcode还需要到mysql的配置文件(我这里是/etc/my.cnf)中给mysqladmin命令配置密码,发现试着在命令行执行mysqladmin默认就是使用这个配置:
(当然我这里配置root账号是非常不妥的)
[mysqladmin]
user=root
password=123456
socket=/var/lib/mysql/mysql.sock
zabbix agent启动会区读取/etc/zabbix/zabbix_agentd.d下的所有*.conf文件,这里我把原来zabbix初始化的mysql监控文件全注释了并添加参数,也可以自己自定义,只要是.conf结尾就可以。加上如下内容,这里很多网上的资料给mysql.ping的参数使用的命令是mysqladmin ping | grep -c alive,但是如果mysql down了的话,执行mysqladmin只会报错不会返回zabbix trigger的值0,所以我这里使用的是netstat代替mysqladmin。
格式: UserParameter=key, command
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/usr/local/zabbix-scripts/check_mysql.sh $1
UserParameter=mysql.ping,netstat -ntpl | grep 3306 | grep mysql | wc | awk '{print $1}'
接下来重启zabbix agent加载配置文件,就可以在zabbix web上mysql的各种item。
如果有报错,会有一个红色的警示图标,点击可以看到比较详细的log。
效果:
在zabbix web上可以比较直观的看到结果,也可以使用zabbix_get在agent端进行测试:
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.status[Com_select]
期间可能会遇到各种其他的问题,但主要的几个点就是这些,举一反三。
本文章来源blog地址:https://www.jianshu.com/p/1c5850a6b70c,谢绝转载。