今天来看看zabbix如何监控mysql性能,这边使用mysql自带的模板,可以监控如下内容:OPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽,最后会附上相应的监控图!
编写check_mysql.sh脚本
用于获取mysql性能指标数据,你需要修改相应的数据库信息文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
# vim /usr/local/zabbix-2.4.4/scripts/chk_mysql.sh
脚本如下:文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
#!/bin/bash # ------------------------------------------------------------------------------- # FileName: check_mysql.sh # Revision: 1.0 # Date: 2015/06/09 # Author: DengYun # Email: dengyun@ttlsa.com # Website: www.ttlsa.com # Description: # Notes: ~ # ------------------------------------------------------------------------------- # Copyright: 2015 (c) DengYun # License: GPL # 用户名 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
修改zabbix_agentd.conf
增加自定义key,在最后一行增加如下:文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
# 获取mysql版本 UserParameter=mysql.version,mysql -V # 获取mysql性能指标,这个是上面定义好的脚本 UserParameter=mysql.status[*],/usr/local/zabbix-2.4.4/scripts/chk_mysql.sh $1 # 获取mysql运行状态 UserParameter=mysql.ping,mysqladmin -uzabbix -p123456 -P3306 -h127.0.0.1 ping | grep -c alive
备注:请注意修改你的数据库信息,以及zabbix路径信息文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
重启zabbix
# killall zabbix-agentd # /usr/local/zabbix-2.4.4/bin/zabbix_agentd 或者 # service zabbix_agentd restart
Link MySQL模板
模板是zabbix系统提供的,进入zabbix web后台,configuration-->hosts-->点击你的主机name-->选择template选项卡,选择模板“Template App MySQL”,最后点击update即可文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
数据查看
如果配置没有异常,那么可以在graph中查看到2张监控图,分别为请求流量带宽、响应流量带宽、ops,点击monitoring-->graphs-->选择你的主机,分别选择Graph“MySQL bandwidth”、“MySQL operations”,监控图分别如下(图片可以点击放大查看):文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
常见错误解决思路
如果发现监控没有数据,请排查如下问题文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
1. zabbix客户端是否重启文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
2. 脚本是否有执行权限文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
3. 数据库是否有权限文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
4. 环境变量是否有问题文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
5. 请看zabbix item列,鼠标移至红色叉上,有错误提示。文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/
6. 如果数据库密码保存在脚本中,会导致监控没有数据会不断的报错为Warning: Using a password on the command line interface can be insecure.需要将帐号密码等配置添加到my.cnf中。文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/ 文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-monitor-mysql/

22F
zabbix_get 取不到值,或者 not suitable for value type [Numeric (float)]等报错
试试删掉脚本里的 -P${MYSQL_PORT}
我在用mysqladmin直连的之后,发现带端口号返回的是空值,所以把脚本里的端口号删了,可行
21F
2092:20161202:162011.674 error reason for “192.168.*.*mysql.status[Bytes_received]” changed: Received value [Warning: Using a password on the command line interface can be insecure.55383] is not suitable for value type [Numeric (float)],这个数据类型的错误你们都是怎么解决的啊,我用的是zabbix3.2,在服务器运行单个命令可以获取到mysql的状态数据的改变,但是图表中没有数据
20F
[root@localhost zabbix-2.0.6]# zabbix_get -s 192.168.100.98 -k mysql.status
arg error!
Usage:/usr/local/zabbix-2.0.6/scripts/chk_mysql.sh(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)
提示参数错误,这是几个意思呢?
坐等。。。。。
19F
楼主好,我安装你的方法做完后报错:ZBX_NOTSUPPORTED: Unsupported item key,这个怎么解决?
18F
谢谢分享….
17F
楼主,# 获取mysql运行状态 这个方案无法行得通哦。
因为当mysqld停止后,mysqladmin就会报错,所以。
建议采用端口监听。
16F
楼主,如果数据库密码保存在脚本中,会导致监控没有数据 会不断的报错为Warning: Using a password on the command line interface can be insecure.
需要将帐号密码等配置添加到my.cnf中,希望楼主更新下。
B1
@ 路人甲 具体怎么配置my。cnf,谢谢
15F
你好,我在应用此文章时遇到一点问题:1、服务器端获取不到客户端mysql 的版本信息;2、服务器获取mysql.ping 的数据是0,但在客户端测试获取是1。其他参数正常,比如mysql.status[Uptime]。请问这是什么问题?
mysql的版本是5.6,编译安装的
防火墙、selinux已经关闭
zabbix item列正常
B1
@ 禁言 使用zabbix_get获取试试看,或许是权限、环境变量等等问题
B2
@ 运维生存时间网 就是用zabbix_get去获取,能获取到其他的数据,就是不能获取客户端mysql 的版本信息和mysql.ping 的数据
14F
您好,我在使用官方模版的时候有一个报错,我使用zabbix_get也发现报错:
[root@mysql2 ~]# zabbix_get -s 192.168.56.201 -k mysql.status[Uptime]
sh: mysql: command not found
这里调用mysql发现没有这个命令,到底是哪里环境变量不对?
B1
@ brent苏 你需要安装mysql客户端,比如yum install mysql
B2
@ 运维生存时间 已经安装了mysql客户端,为何还是提示sh: mysql: command not found,是不是哪里还有设置自己环境变量的
13F
请问楼主这个脚本有主从状态的监控命令吗?
B1
@ 请问楼主这个脚本有主从状态的监控命令吗? 下回写一篇监控主从,关注
12F
zabbix2.4.6为什么不出数据呢,
1. zabbix客户端是否重启 ok
2. 脚本是否有执行权限 ok
3. 数据库是否有权限 ok
4. 环境变量是否有问题 ok
5. 请看zabbix item列,鼠标移至红色叉上,有错误提示。 ok
B1
@ LookBacxk 请截图~
11F
Received value [‘HOME’ ????????????????????????е??????????????] is not suitable for value type [Numeric (float)]
在windows平台,学习你的文档进行了测试,itme报上面的错误
10F
Received value [‘HOME’ ?????ڲ????ⲿ???Ҳ???ǿ????еij?????????ļ???] is not suitable for value type [Numeric (float)]
在windows平台,学习你的文档进行了测试,itme报上面的错误
B1
@ 西海 值类型不对
9F
你好,我使用的是2.2.10.
按照您的这篇文档,在修改zabbix_agentd添加自定义key之后就无法启动agent了,查看报错是因为已经有了这三个key,我在web页面上查看确实是都有了。请问一下是怎么回事
另,套用app mysql之后总是检测mysql状态是down的,但是我的mysql确实是启动的啊,SELINUX和iptables都关闭了,望指点
B1
@ sad 调用zabbix_get取值看看
B2
@ 管理员 我也是@sad 一样的问题,请问管理员如何用zabbix_get取值看看?他提示已经有这3个key不能重启agent呢!!
B3
@ zbin 也许你是yum安装的zabbix,查看zabbix配置文件,里面有个mysql监控的配置文件。在zabbix配置文件目录下find . | grep mysql能看到
B2
@ 管理员 你好!我也是同样的问题!重新打开客户端它提示该key已存在
请教一下该如何处理?
B3
@ zbin 也许你是yum安装的zabbix,查看zabbix配置文件,里面有个mysql监控的配置文件。在zabbix配置文件目录下find . | grep mysql能看到
8F
你好,安装这篇文档,我去监控mysql使用zabbix2.4.5,但是却报监控数据类型不对:
Received value is not suitable for value type [Numeric (unsigned)] and data type [Decimal]
请问是何原因?我尝试了去修改mysql模板里的数据类型,不管用。。。求指点
7F
你好,安装这篇文档,我去监控mysql使用zabbix2.4.5,但是却报监控数据类型不对:
Received value is not suitable for value type [Numeric (unsigned)] and data type [Decimal]
请问是何原因?我尝试了去修改mysql模板里的数据类型,不管用。。。求指点
B1
@ 匿名 check你的数据,获取到的值不是数字。
6F
你好,按照这篇文章使用zabbix2.4.5监控mysql,但是报错:
Received value is not suitable for value type [Numeric (unsigned)] and data type [Decimal]
可我修改了类型也不正确,在项目里全是X….求指点
5F
请问一下,是否有写监控Sql,Oracle的监控的文章呢,还有mysql,sql,oracle这几种数据库服务器高可用环境的监控。谢谢,感觉你写得还不错。
4F
vim /usr/local/zabbix-2.4.4/scripts/chk_mysql.sh 你发的这个脚本是完整的吗
B1
@ 变心 是完整的
3F
新版本多半会调整数据库结构,不建议直接读取数据库,建议用API,不知道你说的API是哪一个?
B1
@ 管理员 您好,调用API的话,如果取出的数据量过大,会造成性能问题,官方给了一个limit参数,但是却没有start来分页,一般API获取数据分页展示的话,有什么思路吗,谢谢
2F
哥们,我书的读者,我有个问题请教下..Zabbix 2.4.5 版本中的 items 表中的 lastclock好像不存在了,以前的老版本貌似有 我需要取出某个item key的最后的时间,我尝试了2个方法但都不是很好处理
一 . 从history表中取item key的最后时间速度很慢 半天出不来数据
二 用api去取,速度到还可以,但一次取出大量数据, 时而会导致PHP 报内存不足够,以后agentd还会加 怕受不了,暂时也没有发现api中有分页的参数
1F
哥们,我书的读者,我有个问题请教下..Zabbix 2.4.5 版本中的 items 表中的 lastclock好像不存在了,以前的老版本貌似有 我需要取出某个item key的最后的时间,我尝试了2个方法但都不是很好处理
一 . 从history表中取item key的最后时间速度很慢 半天出不来数据
二 用api去取,速度到还可以,但一次取出大量数据, 时而会导致PHP 报内存不足够,以后agentd还会加 怕受不了,暂时也没有发现api中有分页的参数