不错的。集中和分布式,总是一对要解决的问题。应该可以再想更好的策略~~

一、方案需求及思路

因跑MySQL服务的服务器比较多,并且每台服务器可能会运行多个不同端口的数据库,如果单独手动一台一台去修改agent.conf,web添加监控,这样太麻烦,费时费力。此时有两种方案;其一:在每台跑mysql的服务器上部署一个自动发现脚本,修改agent.conf 并自定义KEY;其二:统一由一台服务器来监控所有服务器上所有运行的mysql服务。发现好像方案二比较更简便些。

方案二思路:

假设有A、B、C、D、E五台服务器,上面都跑有mysql,并且每台都跑有2+个mysql,在此假定由A服务器来监控所有服务器上mysql的状态。此时需要先把五台服务器的IP及其上mysql服务所占用的port 记录下来,统一写到一个文件里:eg:

  1. 192.168.12.14  3306
  2. 192.168.12.14  3307
  3. 192.168.12.15  3308
  4. 192.168.12.15  3380
  5. ……

把该文件放到zabbix 目录下的某一个目录,并赋权限,再写一个json的脚本来调取此文件,并且需要在执行脚本文件的时候来进行IP传值并输出该IP上所有的port。

添加自定义key。其中需要定义一个自动发现的key,然后定义一个根据IP查询此服务器上所有端口的mysql状态的key。重启zabbix_agentd,通过zabbix_get来获取参数看看是否正常。

配置web界面。在web配置界面中,创建一个主机,该主机的ip指向A服务器的IP,切该服务器的[HOST.NAME] 指向所要监控mysql的IP,([HOST.NAME]一般指的是”Visable name”),把监控mysql的服务器都指向一个组,然后调用自动发现mysql模版。之后在创建剩下的几台服务器即可。

此方案也不是一个很好的方案,但相对来说还是不错的,以后若有新增加的mysql服务器,只需要修改写有IP和PORT的列表文件即可,不需要重启agent。

二、配置Agent:

1、编辑mysqld文件

  1. # cat  /usr/local/zabbix/bin/mysqld
  2. 172.16.8.250  3306
  3. 172.16.8.250  3309
  4. 172.16.8.252  3306
  5. 172.16.8.252  3307

注:本文均在8.250上实现监控252上的数据库及本地250的数据库

2、mysql赋权限

分别将四个数据库都赋给172.16.8.250主机以用户zabbix,密码111的访问,show global status权限。

3、编辑discovery_mysql.sh

  1. # cat  /usr/local/zabbix/bin/discovery_mysql.sh
  2. #!/bin/bash
  3. #mysql low-level discovery
  4. #Script_name discovery_mysql.sh
  5. res=`cat /usr/local/zabbix/bin/mysqld|grep $1|grep -v "^#"|awk '{print $2}'`
  6. port=($res)
  7. printf '{\n'
  8. printf '\t"data":[\n'
  9. for key in ${!port[@]}
  10. do
  11. if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
  12. printf '\t {\n'
  13. printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
  14. else [[ "${key}" -eq "((${#port[@]}-1))" ]]
  15. printf '\t {\n'
  16. printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
  17. fi
  18. done
  19. printf '\t ]\n'
  20. printf '}\n'

赋执行权限:

  1. # chmod  +x  /usr/local/zabbix/bin/discovery_mysql.sh

测试执行效果:

  1. # sh  /usr/local/zabbix/bin/discovery_mysql.sh 172.16.8.250
  2. {
  3. "data":[
  4. {
  5. "{#MYSQLPORT}":"3306"},
  6. {
  7. "{#MYSQLPORT}":"3309"}
  8. ]
  9. }

把上述结果粘贴到json检测网站,查看结果是否正确 http://jsonlint.com/

4、修改agentd.conf

开启include选项

  1. Include=/usr/local/zabbix/etc/zabbix_agentd/

添加mysql自动发现规则,自定义key

  1. # cat  /usr/local/zabbix/etc/zabbix_agentd/mysql_discovery.conf
  2. #### $1 ==IP  $2 == PORT  $3==COMMAND
  3. UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/bin/discovery.sh $1
  4. UserParameter=mysql_stats[*],mysql -uzabbix -p111 -P$2 -h$1 -e "show global status"|grep "\<$3\>"|cut  -f2
  5. UserParameter=mysql.alive[*],mysqladmin -uzabbix -p111 -h$1 -P$2 ping|grep -c alive

5、测试:

重启zabbix_agentd,在zabbix server中通过zabbix_get测试zabbix mysql自动发现规则是否正确。

注:172.16.8.250是zabbix server,agent地址为127.0.0.1,请根据自己情况修改下面命令。

  1. # zabbix_get  -s 127.0.0.1  -k  zabbix_log_discovery[172.16.8.250]
  2. {
  3. "data":[
  4. {
  5. "{#MYSQLPORT}":"3306"},
  6. {
  7. "{#MYSQLPORT}":"3309"}
  8. ]
  9. }
  10. # zabbix_get  -s 127.0.0.1  -k mysql_stats[172.16.8.250,3306,Uptime]

可正确取得数据便为正确,

转载请注明原文出处:http://www.minunix.com/2014/04/zabbix_low_discovery_mysql_01/

三、Zabbix  WEB 添加主机

1、导入模版discovery_mysql.xml

2、添加主机:

链接模版:

注:因模版定义的更新时间为3600s,如需快速看到效果,可先修改模版自定义规则的“Interval”更新时间改为60,之后便可再”last data”中看到数据。

监控172.16.8.252,只需要创建主机,将visable name 的值172.16.8.250 改为172.16.8.252即可。

辉哥用的这种方法实现ZABBIX的MYSQL批量监控的更多相关文章

  1. zabbix使用mysql模板监控mysql

    出现监控项访问拒绝的信息 解决方法是: 在 mysql的 my.cnf 配置中增加 [mysql] user=zabbix password=zabbix [mysqladmin] user=zabb ...

  2. Zabbix如何实现批量监控端口状态

    引言 ------------------------------------------------------------------------------------------------- ...

  3. zabbix系列~mysql进行监控

    一 简介:zabbix进行数据库监控 二 目的:采用percona进行插件式安装监控 三 安装 环境 zabbix_agent 步骤  yum -y install php php-mysql yum ...

  4. zabbix布置mysql主从监控

    一.下载安装zabbix服务器端 网址:https://www.cnblogs.com/carriezhangyan/p/10818513.html 二.下载安装zabbix客户端,客户端上要有mys ...

  5. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  6. 通过zabbix自带模板监控windowsPC机器

       通过zabbix自带模板监控windowsPC机器   作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 相信有很多 ...

  7. 【Linux】Zabbix + MPM + msmtp + mutt 监控MySQL + 邮件报警

    Zabbix部署参考博文 http://blog.sina.com.cn/s/blog_5611597901017oe0.html  MPM安装配置参考博文和MPM官网下载地址 http://blog ...

  8. zabbix实现mysql数据库的监控(四)

    前面介绍的内容都是用第三方开发好的插件进行mysql监控的,可能有些我们关心的监控内容并不在其中,这时一种常用的方法就是定义我们自己的脚本并将它整合到zabbix中,从而在原有监控的基础上进行有力的补 ...

  9. zabbix实现mysql数据库的监控(一)

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.它能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问 ...

随机推荐

  1. JAVA学习第四十七课 — IO流(一):文件的读写

    输入流和输出流相对于内存 将外部设备的数据读取到内存中:输入 将内存中的数据写入外部设备中:输出 IO流经常使用基类 字节流的抽象基类:InputStream,OutputStream 字符的抽象基类 ...

  2. HUNNU--湖师大--11407--It Is Cold

    [F] It Is Cold Dr. Ziad Najem is known as the godfather of  the  ACPC. When the regional contest was ...

  3. git学习 #2:git基本操作

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  4. [AngularJS + Unit Testing] Testing Directive's controller with bindToController, controllerAs and isolate scope

    <div> <h2>{{vm.userInfo.number}} - {{vm.userInfo.name}}</h2> </div> 'use str ...

  5. iOS-设置状态栏白色以及覆盖状态栏

    iOS-设置状态栏白色以及覆盖状态栏 将状态栏设置为白色 首先, 在info.plist中添加一个标记. View controller–based status bar appearance键值设置 ...

  6. 第二篇:从 GPU 的角度理解并行计算

    前言 本文从使用 GPU 编程技术的角度来了解计算中并行实现的方法思路. 并行计算中需要考虑的三个重要问题 1. 同步问题 在操作系统原理的相关课程中我们学习过进程间的死锁问题,以及由于资源共享带来的 ...

  7. spring 定时任务的 执行时间设置规则

    单纯针对时间的设置规则org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时间,只需要设置其cronExpressio ...

  8. 关于NetworkInfo对象的isConnected()与isAvailable()

      public class MainActivity extends Activity{    /** Called when the activity is first created. */   ...

  9. WPF Binding值转换器ValueConverter使用简介(一)

    WPF.Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异 ...

  10. Sql2008中使用DataTable作为存储过程的参数

    使用DataTable作为存储过程的参数   最近工作中写了几个存储过 程,需要向存储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据 ...