本文摘自PHP中文网,作者醉折花枝作酒筹,侵删。
本篇文章给大家介绍一下使用zabbix监控mysql的解决方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。相关推荐:《mysql教程》
zabbix 监控 mysql
1、监控规划
在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是提出监控的需求。
需求一:监控MySQL的状态,当状态发生异常,发出报警;
需求二:监控MySQL的操作,并用图表展现;
2、自定义脚本监控扩展Agent
Zabbix Server与Agent之间监控数据的采集主要是通过Zabbix Server主动向Agent询问某个Key的值,Agent会根据Key去调用相应的函数去获取这个值并返回给Server端。Zabbix 2.4.7的Agent本并没有内置MySQL的监控功能(但是Server端提供了相应的Template配置),所以我们需要使用Zabbix的User Parameters功能,为MySQL添加监控脚本。
3、授权mysql登录用户(agent端)
1 2 3 | mysql> grant usage on *.* to zabbix@127.0.0.1 identified by '123456';
mysql> flush privileges;
|
4、agent端配置
存活检测
利用UserParameter参数自定义Agent Key。
对于需求一 ,我们采用mysqladmin这个工具来实现,命令如下:
1 2 | # mysqladmin -h 127.0.0.1 -u zabbix -p123456 ping
mysqld is alive
|
如果MySQL状态正常,会显示mysqld is alive,否则会提示连接不上。对于服务器端,mysqld is alive这样的句子不好理解,服务器端最好只接收1和0,1表示服务可用,0表示服务不可用。那么再改进一下这个命令,如下:
1 2 | # mysqladmin -h 127.0.0.1 -u zabbix -p123456 ping |grep -c alive
1
|
用户名和密码放在命令中对于以后的维护不好,所以我们在/var/lib/zabbix/下创建一个包含MySQL用户名和密码的配置文件“.my.cnf”,如下:
1 2 3 | user=zabbix
host=127.0.0.1
password='123456'
|
有了这个文件后的命令变更为
1 2 | HOME=/ var /lib/zabbix/ mysqladmin ping |grep -c alive
1
|
做完这一步后需要做的就是,将这个监控命令添加到Zabbix Agent中,并与一个Key对应,这样Zabbox Server就能通过这个Key获取MySQL的状态了。我们使用mysql.ping作为MySQL状态的Key。
首先在去除/etc/zabbix/zabbix_agentd.conf中
“Include=/etc/zabbix_agentd.d/” 这一行的注释符。
其次,在/etc/zabbix/zabbix_agentd.d/目录下创建userparameter_mysql.conf文件。在文件中添加如下命令:
1 | UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
|
使用下面的命令测试是否正常工作。
1 2 | # /usr/sbin/zabbix_agentd -t mysql.ping
mysql.ping [t| 1 ]
|
其他性能指标
1.添加userparameter_mysql
1 2 3 4 5 6 7 8 9 | vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
####监控mysql性能的脚本
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $1
#####mysql版本
UserParameter=mysql.version,mysql -V
|
2.check_mysql.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #!/bin/bash
# -------------------------------------------------------------------------------
# FileName: check_mysql.sh
# Revision: 1.0
# -------------------------------------------------------------------------------
# Copyright:
# License: GPL
# 用户名
MYSQL_USER='zabbix'
# 密码
MYSQL_PWD='zabbix@123'
# 主机地址/IP
MYSQL_HOST='ip'
# 端口
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 2>/dev/null |cut -f2 -d":"|cut -f1 -d"T"`
echo $result
;;
Com_update)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_update"|cut -d"|" -f3`
echo $result
;;
Slow_queries)
result=`${MYSQL_CONN} status 2>/dev/null |cut -f5 -d":"|cut -f1 -d"O"`
echo $result
;;
Com_select)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_select"|cut -d"|" -f3`
echo $result
;;
Com_rollback)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_rollback"|cut -d"|" -f3`
echo $result
;;
Questions)
result=`${MYSQL_CONN} status 2>/dev/null |cut -f4 -d":"|cut -f1 -d"S"`
echo $result
;;
Com_insert)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_insert"|cut -d"|" -f3`
echo $result
;;
Com_delete)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_delete"|cut -d"|" -f3`
echo $result
;;
Com_commit)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Com_commit"|cut -d"|" -f3`
echo $result
;;
Bytes_sent)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Bytes_sent" |cut -d"|" -f3`
echo $result
;;
Bytes_received)
result=`${MYSQL_CONN} extended-status 2>/dev/null |grep -w "Bytes_received" |cut -d"|" -f3`
echo $result
;;
Com_begin)
result=`${MYSQL_CONN} extended-status 2>/dev/null |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
|
3.授权:
1 2 3 | chmod +x /etc/zabbix/zabbix_agentd.d/check_mysql.sh
Chown zabbix.zabbix /etc/zabbix/zabbix_agentd.d/check_mysql.sh
|
4. zabbix_agent上测试:
zabbix_agentd -t mysql.ping
阅读剩余部分
相关阅读 >>
解决mysql报错this function has none of deterministic问题
mysql中重置密码与新用户权限分配的方法介绍
mysql官网如何下载源码包?
mysql时间设置注意事项的深入总结
mysql表被锁了怎么办?
mysql怎么导出用户权限
mysql如何更改数据保存的路径
mysql如何允许外网访问设置
mysql创建表的sql语句详细总结
mysql如何增加表中新的列?
更多相关阅读请进入《zabbix》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 如何使用zabbix监控mysql