zabbix模板支持自动发现,这大大方便了同类监控的批量添加,非常便于运维自动化.相比之下,尽管cacit的模板可以通过参数实现多个同类监控,但如果要实现批量添加就复杂不少.但并不是所有zabbix模板都支持自动发现,这时该怎么办呢,其实我们可以手动改造模板.
比如常用的Percona Monitoring Plugins,它很全面地实现了MySQL监控,比官方自带的强大得多.但默认模板只能监控单一的3306实例.如果线上实例不是3306端口,或者有多个实例就无法监控了.下面介绍如何将它改造为LLD(Low-level discovery)的自动发现模板.
3.1 定义自动发现规则
所有自动发现的模板都至少要定义一个自动发现规则,这里定义一个每小时更新的规则,用于发现需要监控的所有MySQL端口
定义自动发现中具体的宏.宏可以定义多个,但这里只需要一个即MySQL端口
定义匹配宏用的正则表达式规则,也可以不配置.这里类似33**的值都被认为是合法端口值
3.2 修改模板XML
将模板导出为XML,将普通监控改为自动发现的格式:
首先修改监控项为监控项原型
<items>
<item>
……
</item>
</items>
替换为下面格式
?<discovery_rules>
<discovery_rule>
<item_prototypes>
<item_prototype>
……
</item_prototype>
</item_prototypes>
</discovery_rule>
</discovery_rules>
修改图形为图形原型
?<graphs>
<graph>
……
</graph>
</graphs>
替换为下面格式
?<discovery_rules>
<discovery_rule>
<graph_prototypes>
<graph_prototype>
……
</graph_prototype>
</graph_prototypes>
</discovery_rule>
</discovery_rules>
修改触发器为触发器原型
<triggers>
<trigger>
</trigger>
</triggers>
替换为下面格式
<discovery_rules>
<discovery_rule>
<trigger_prototypes>
<trigger_prototype>
</trigger_prototype>
</trigger_prototypes>
</discovery_rule>
</discovery_rules>
修改应用类型为应用类型原型(zabbix 3.0起支持)
<applications>
<application>
<name>Percona MySQL</name>
</application>
</applications>
替换为下面格式
<applications/>
<application_prototypes>
<application_prototype>
<name>Percona MySQL {#MYSQLPORT}</name>
</application_prototype>
</application_prototypes>
修改完毕后,导入到zabbix覆盖原来的模板.
3.3 配置agent的自动发现
配置自动发现的key,需要结合自己实际来编写脚本实现端口发现的逻辑.我们是读取统一管理后台的接口,并格式化成zabbix需要的json.
mysql_discovery_agentd.conf
UserParameter=MySQL.port.discovery,/bin/bash /var/lib/zabbix/percona/scripts/zbx_discovery_mysql.sh port_discovery
脚本执行效果如下
{
“data”:[
{
“{#MYSQLPORT}”:”3306″
},
{
“{#MYSQLPORT}”:”3307″
}]
}
修改Percona Monitoring Plugins的zabbix配置文件,使得能接收端口参数,实现自动发现.
userparameter_percona_mysql.conf
UserParameter=MySQL.Alive[*],/usr/bin/mysqladmin -uzabbix -pzabbix -h127.0.0.1 -P$1 ping 2>&1|grep alive |wc -l
UserParameter=MySQL.Sort-scan[*],/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kt $1
UserParameter=MySQL.slave-stopped[*],/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jh $1
UserParameter=MySQL.Com-replace[*],/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jz $1
……
这里我们去掉了Total number of mysqld processes的监控项,增加一个用ping来检测具体MySQL实例是否存活的监控项.
该监控项原型还关联了一个自定义的值映射,增加监控值的可读性
修改Percona Monitoring Plugins的相应脚本,以便支持不同端口.而ss_get_mysql_stats.php原本就支持端口参数,所以不需要修改.
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
(编辑:ASP站长网)
|