标签:mysql zabbix discovery templete
环境: | centos6.6 | zabbix-2.4.5 | mysql-5.6.24 |
zabbix没有自带对mysql的监控模板,网上许多模板也都是固定的监听某端口,不够灵活,如果mysql的端口很多记不清楚的话,我们就应该以lld(low level discovery)方式监控mysql。
步骤:
一、客户端
1、监控内容的json化
在客户端里,需要把监控的内容json化展示,然后服务端可以通过正则来过滤出结果。下面在是我的json监控mysql的json展示:
脚本内容如下:
#Fucation:mysql low-level discovery #Script_name mysql_low_discovery.sh mysql() { port=($(sudo ss -tnlp | grep mysql | awk -F "[ :]+" ‘{print $4}‘)) printf ‘{\n‘ printf ‘\t"data":[\n‘ for key in ${!port[@]} do if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then socket=$(ps aux|grep ${port[${key}]}|grep -v grep|awk -F ‘=‘ ‘{print $10}‘|cut -d ‘ ‘ -f 1) printf ‘\t {\n‘ printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n" else [[ "${key}" -eq "((${#port[@]}-1))" ]] socket=$(ps aux|grep ${port[${key}]}|grep -v grep|awk -F ‘=‘ ‘{print $10}‘|cut -d ‘ ‘ -f 1) printf ‘\t {\n‘ printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n" fi done printf ‘\t ]\n‘ printf ‘}\n‘ } $1
如果想让脚本可以用zabbix的身份获取数据,还要做以下四步操作:
chown zabbix.zabbix mysql_low_discovery.sh chmod +x mysql_low_discovery.sh echo "zabbix ALL=(root) NOPASSWD:/usr/sbin/ss" >> /etc/sudoers sed -i ‘s/^Defaults.*.requiretty/#Defaults requiretty/‘ /etc/sudoers
最后把脚本放到一个zabbix用户允许访问的目录, 定义UserParameter的时候路径保持一致就可以了。
2.自定义键值
在客户端修改配置文件zabbix_agentd.conf,添加一下内容:
UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix-2.4.5/script/mysql_low_discovery.sh $1 UserParameter=mysql_stats[*],/usr/local/mysql/bin/mysql --login-path=local -e "show global status"| grep "\<$2\>"| cut -f2
这里遇到一个坑要提前说一下,对于mysql5.6以上的版本来讲,直接使用mysql -uxxx -pxxx -e "show global status"等直接输入密码的命令会有警告:
Warning: Using a password on the command line interface can be insecure.
这条警告会直接导致zabbix服务器端不能识别mysql_stats[*]的值,解决方法是使用mysql自带的mysql_config_editor 工具:
mysql_config_editor set --login-path=local --host=127.0.0.1 --user=username --password 回车会提示输入密码
然后我们在脚本中就可以使用:
mysql --login-path=local -e "statement"
代替
mysql -u username -p pass -e "statement"
3.Mysql授权查询功能的账号
grant select on *.* to USERNAME@‘127.0.0.1‘ identified by "PASSWORD"; flush privleges;
4.重启zabbix客户端
killall zabbix_agentd /usr/local/zabbix/sbin/zabbix_agentd
5.测试
先测试脚本和命令:
再测试客户端能不能获取键值:
最后测试服务器端能不能获取键值:
注意:zabbix接收的数据格式一定是JSON格式的,而且形式必须为:
{ "data":[ { "{#键}":"值"} ] }
二、服务端
1.创建模板
2.设置发现规则
3.设置正则
4.创建发现项
5.创建发现项的触发器
6.给需要的项绘图
7.将模板链接到mysql服务器
8.注意事项
(1)发现规则设置更新时长为1小时
为什么设置3600秒?原因是如果设置时间过短,比如你设置60s,一个是服务器的压力大,一个是如果你检测的端口突然当掉了,还没有来的急报警,主机通过json来获取不到这个信息,就认为没有这个端口,模板里会自动关闭这个监控项的内容(默认保留30天,然后自动删除),这样报警功能就基本没有了,所以还是发现的间隔时间长一些比较好。
(2)设置正则
设置正则是为了将mysql的监听端口范围给固定,免得出现错误,也可以不设置正则,这个时候需要在设置发现规则的时候把正则那一项给清空。
(3)创建发现项(Item prototypes)要注意
Name:要见名知意,不能随心所欲
Type:设置为Zabbix agent,意为主动提交数据
Key:一定是mysql_stats[{#MYSQLPORT},$2],第一个参数是端口,第二个参数是你具体想要查询的项,我的模板里有47项,这些项目在mysql -uxxx -pxxx -e "show global status"里已经列出来了,可以自己查看。
最后:
附件模板奉上
本文出自 “铜锣湾” 博客,请务必保留此出处http://wuhf2015.blog.51cto.com/8213008/1686674
标签:mysql zabbix discovery templete
原文地址:http://wuhf2015.blog.51cto.com/8213008/1686674