设为首页 收藏本站
查看: 1653|回复: 0

[经验分享] zabbix监控mysql的Discovery模板

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-21 08:52:44 | 显示全部楼层 |阅读模式
环境:centos6.6zabbix-2.4.5mysql-5.6.24



    zabbix没有自带对mysql的监控模板,网上许多模板也都是固定的监听某端口,不够灵活,如果mysql的端口很多记不清楚的话,我们就应该以lld(low level discovery)方式监控mysql。






步骤:
一、客户端


1、监控内容的json化
在客户端里,需要把监控的内容json化展示,然后服务端可以通过正则来过滤出结果。下面在是我的json监控mysql的json展示:

wKiom1XV3yyTX-TJAACeP5dZVV8556.jpg


脚本内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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的身份获取数据,还要做以下四步操作:
1
2
3
4
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,添加一下内容:
1
2
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 工具:
    1
    mysql_config_editor set --login-path=local --host=127.0.0.1 --user=username --password        回车会提示输入密码



    然后我们在脚本中就可以使用:
    1
    mysql --login-path=local  -e "statement"



    代替
    1
    mysql -u username -p pass -e "statement"





    3.Mysql授权查询功能的账号
    1
    2
    grant select on *.* to USERNAME@'127.0.0.1' identified by "PASSWORD";
    flush privleges;




    4.重启zabbix客户端
    1
    2
    killall zabbix_agentd
    /usr/local/zabbix/sbin/zabbix_agentd




    5.测试
    先测试脚本和命令:

    wKiom1XV4UPgK_E3AAE_hw00udw978.jpg
    再测试客户端能不能获取键值:
    wKioL1XV41KAHQIjAAGYf_sgiX0490.jpg
    最后测试服务器端能不能获取键值:
    wKiom1XV4USA_UtvAAFXHf1Wy3U171.jpg



    注意:zabbix接收的数据格式一定是JSON格式的,而且形式必须为:
    1
    2
    3
    4
    5
    6
    {
        "data":[
         {
                "{#键}":"值"}
         ]
    }









    二、服务端

    1.创建模板

    wKiom1XV4eqwtfszAANDqtvsnSk710.jpg

    2.设置发现规则
    wKioL1XV4_qSGS8FAAPtHD34S3I707.jpg

    3.设置正则
    wKioL1XV4_rSBKDPAAOSWCrXk1Y843.jpg

    4.创建发现项
    wKiom1XV4evTPX5mAATju_cC-Os390.jpg

    5.创建发现项的触发器
    wKioL1XV4_rQw20_AAP9w1OYEW4406.jpg

    6.给需要的项绘图
    wKiom1XV4evBd9ubAAVHcoOFmcw565.jpg

    7.将模板链接到mysql服务器
    wKioL1XV4_rAQ-AwAAO7ftDqzGY164.jpg

    8.注意事项
    (1)发现规则设置更新时长为1小时
    为什么设置3600秒?原因是如果设置时间过短,比如你设置60s,一个是服务器的压力大,一个是如果你检测的端口突然当掉了,还没有来的急报警,主机通过json来获取不到这个信息,就认为没有这个端口,模板里会自动关闭这个监控项的内容(默认保留30天,然后自动删除),这样报警功能就基本没有了,所以还是发现的间隔时间长一些比较好。

    (2)设置正则
    设置正则是为了将mysql的监听端口范围给固定,免得出现错误,也可以不设置正则,这个时候需要在设置发现规则的时候把正则那一项给清空。
    wKiom1XV4eyz8gcDAAGyMepJfvk801.jpg

    (3)创建发现项(Item prototypes)要注意
    Name:要见名知意,不能随心所欲
    Type:设置为Zabbix agent,意为主动提交数据
    Key:一定是mysql_stats[{#MYSQLPORT},$2],第一个参数是端口,第二个参数是你具体想要查询的项,我的模板里有47项,这些项目在mysql -uxxx -pxxx -e "show global status"里已经列出来了,可以自己查看。




    最后:
        附件模板奉上
    百度云附件:mysql自动发现模板.xml   



  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-101875-1-1.html 上篇帖子: Zabbix显示中文或图片为乱码--解决方法 下篇帖子: Zabbix快速部署 mysql 监控
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表