今天来看看zabbix如何监控mysql性能,这边使用mysql自带的模板,可以监控如下内容:OPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽,如果没有则要去zabbix官方下载 url:https://zabbix.org/mw/images/d/d4/Template_App_MySQL-2.2.0.xml最后会附上相应的监控图!
准备工作
在iptables中添加10050和10051端口,并重启防火墙
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT
如果是编译安装的mysql,在连接mysql的时候可能会跟mysql.sock的路径,因为mysql在启动的时候默认会在/var/lib/mysql/处寻找,所以我们要将mysql.sock文件连接到此处
ln -s /data/mysql_db/mysql.sock /var/lib/mysql/ #/data/mysql_db/mysql.sock为我自定义的路径
在安装zabbix_agentd的时候,我们需要将zabbix_agentd.conf连接到/usr/local/etc/目录,这一步特别重要,这决定了你是否能获取mysql key
ln -s /usr/local/zabbix/conf/zabbix_agentd.conf /usr/local/etc/
用于获取mysql性能指标数据,你需要修改相应的数据库信息
mkdir /usr/local/zabbix/etc/
# vim /usr/local/zabbix/etc/chk_mysql.sh#!/bin/bash
# 用户名
MYSQL_USER='zabbix'
# 密码
MYSQL_PWD='123456'
# 主机地址/IP
MYSQL_HOST='127.0.0.1'
# 端口
MYSQL_PORT='3306'
# 数据连接
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
# 参数是否正确
if [ $# -ne "1" ];then
echo "arg error!"
fi
# 获取数据
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
;;
*)
echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac
赋予执行权限
chmod +x /usr/local/zabbix/etc/chk_mysql.sh
2、修改zabbix_agentd.conf
增加自定义key,在最后一行增加如下:
# 获取mysql版本
UserParameter=mysql.version,mysql -h"127.0.0.1" -uzabbix -p123456 -e "select version();"|awk 'END {print}'
# 获取mysql性能指标,这个是上面定义好的脚本
UserParameter=mysql.status[*],/usr/local/zabbix/etc/chk_mysql.sh $1
# 获取mysql运行状态
UserParameter=mysql.ping,mysqladmin -uzabbix -p123456 -P3306 -h127.0.0.1 ping | grep -c alive
备注:请注意修改你的数据库信息,以及zabbix路径信息
3、重启zabbix
# killall zabbix-agentd
# /usr/local/zabbix/sbin/zabbix_agentd
或者
# service zabbix_agentd restart
4、测试
在zabbix server中执行以下命令,看能否获取到值
cd /usr/local/zabbix/bin
./zabbix_get -s "zabbix_agentd IP" -p 10050 -k mysql.version
5.5.45-log
./zabbix_get -s "zabbix_agentd IP" -p 10050 -k mysql.ping
1
./zabbix_get -s "zabbix_agentd IP" -p 10050 -k mysql.status[Uptime]
169725
./zabbix_get -s "zabbix_agentd IP" -p 10050 -k mysql.status[Com_update]
994470
5、Link MySQL模板
模板是zabbix系统提供的,进入zabbix web后台,configuration-->hosts-->点击你的主机name-->选择template选项卡,选择模板“Template App MySQL”,最后点击update即可
6、数据查看
如果配置没有异常,那么可以在graph中查看到2张监控图,分别为请求流量带宽、响应流量带宽、ops,点击monitoring-->graphs-->选择你的主机,分别选择Graph“MySQL bandwidth”、“MySQL operations”,监控图分别如下:
mysql
如果发现监控没有数据,请排查如下问题
1. zabbix客户端是否重启
2. 脚本是否有执行权限
3. 数据库是否有权限
4. 环境变量是否有问题
5. 请看zabbix item列,鼠标移至红色叉上,有错误提示。