在Zabbix的监控系统中通常是由Zabbix Server与Zabbix Agent一起配合实现监控。在Zabbix Agent内置了很多监控基础的监控项,参见https://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/zabbix_agent。这些监控项都是CPU, 文件系统, 网络,磁盘等基础的监控项。

对于自己开发服务的监控,Zabbix提供了良好框架为用户实现监控和报警。下面将以为MySQL添加监控为例,介绍如何添加自定义监控。

实验环境

localhost

角色:Zabbix Agent, Zabbix Server, MySQL, 面板

第一步,监控规划

在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是提出监控的需求。

  • 需求一:监控MySQL的状态,当状态发生异常,发出报警;

  • 需求二:监控MySQL的操作,并用图表展现;

第二步,使用自定义脚本监控扩展Agent

Zabbix Server与Agent之间监控数据的采集主要是通过Zabbix Server主动向Agent询问某个Key的值,Agent会根据Key去调用相应的函数去获取这个值并返回给Server端。Zabbix 2.0.3的Agent本并没有内置MySQL的监控功能(但是Server端提供了相应的Template配置),所以我们需要使用Zabbix的User Parameters功能,为MySQL添加监控脚本。

对于需求一 ,我们采用mysqladmin这个工具来实现,命令如下:

$ mysqladmin -uroot -ppasswd ping
mysqld is alive

如果MySQL状态正常,会显示mysqld is alive,否则会提示连接不上。对于服务器端,mysqld is alive这样的句子不好理解,服务器端最好只接收1和0,1表示服务可用,0表示服务不可用。那么再改进一下这个命令,如下:

$ mysqladmin -uroot -ppasswd ping | grep -c alive

用户名和密码放在命令中对于以后的维护不好,所以我们在/var/lib/zbbix下创建一个包含MySQL用户名和密码的配置文件“.my.cnf”,如下

[client]user=roothost=localhostpassword=password

有了这个文件后的命令变更为

HOME=/var/lib/zabbix mysqladmin ping | grep -c alive

做完这一步后需要做的就是,将这个监控命令添加到Zabbix Agent中,并与一个Key对应,这样Zabbox Server就能通过这个Key获取MySQL的状态了。我们使用mysql.ping作为MySQL状态的Key。

首先在去除/usr/local/etc/zabbix/zabbix_agentd.conf中“Include=/usr/local/etc/zabbix_agentd.conf.d/”这一行的注释符。

其次,在/usr/local/etc/zabbix_agentd.conf.d/目录下创建userparameter_mysql.conf文件。在文件中添加如下命令:

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive

这个命令中”UserParameter”表示这是一个用户自定义的脚本;“=”号后是脚本的内容;“mysql.ping”是Key,“,”号后的命令会在Zabbix Server向Agent发起获取“mysql.ping”这个key的请求时被调用,并将返回值返回给Server。 
保存并退出后可以使用下面的命令测试是否正常工作。

$ zabbix_agentd -t mysql.ping
mysql.ping [t|1]

同时,在Server端也可以使用使用zabbix_get命令来测试从Server端获取指定的Client端的数据,如下:

$ zabbix_get -s 127.0.0.1 -k mysql.ping1

对于需求二 ,我们使用MySQL的SQL查询来实现监控数据的获取,最终的userparameter_mysql.conf文件如下:

UserParameter=mysql.status[*],echo “show global status where Variable_name=’$1′;” | HOME=/var/lib/zabbix mysql -N | awk ‘{print $$2}’ 
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive 
UserParameter=mysql.version,mysql -V

第三歩,在管理员面板添加监控项

由于Zabbix Server内置了MySQL的监控模版,所以只需要将监控模版link到这个Host即可。

如上图所示,MySQL的Temlate中包含了14个监控项,一个Trigger,两个Graphe展现。下图是MySQL Template的监控项:

MySQL Template中的Trigger是对mysql.ping中最近接收到的数据进行判断,如果等于0就会抛出一个Warning级别的事件。

在设置了相应的Action后,就能接收到MySQL的报警邮件。

MySQL Template中的监控图表:

对于想详细了解Server端如何配置监控项的,可以阅读手册https://www.zabbix.com/documentation/2.0/manual/config。

原文:http://www.tuicool.com/articles/3Q7R3y