首页 > Open Source, tips > 个性化定制cacti中thold插件的报警邮件的收件人

个性化定制cacti中thold插件的报警邮件的收件人

2009年12月9日 发表评论 阅读评论

cacti+thold维护的机器很多
而且每台机器至少都用thold监控硬盘使用率、负载大小2种情况
其报警邮件的收件人虽然可以设
(可以在Threshold Templates里按模板设置
也可以进每一个Threshold来进行设置)
但相当的麻烦
(单独设置某一个Threshold的收件人,需要先取消从模板继承)
thold插件提供的命令行工具也没有维护这个的功能
没办法
我只有直接进mysql库里去看
还别说
真让我发现了点什么……

原来Threshold的数据基本上都是存在thold_data这个表中的
其中字段notify_extra就对应着Threshold里的Extra Alert Emails信息
这里可以直接写这个Threshold触发报警时报警邮件的收件人
不过这个需要先把template_enabled字段设置为off后才能有效
知道了这些
基本上问题就很好解决了
从我的库里把服务器ip地址及其联系人的email地址select出来
再到host表里根据hostname字段等于前面的服务器ip地址找到对应的id

select id from host where hostname = ‘xx.xx.xx.xx’
#这里的”xx.xx.xx.xx”是某台服务器的ip地址

再用这个id到thold_data表里根据其host_id字段跟上面得到的id找出所有的Thresholds

select id from thold_data where host_id = sid
#这里的”sid”是上面找出来的host表里的id

然后将这些Thresholds的notify_extra字段改成前面得到的服务器ip地址对应的联系人的email地址
注意:首先需要将thold_data表里记录的template_enabled字段设置为off后才行

update thold_data set notify_extra = ‘xx@xx.com’, template_enabled = ‘off’ where host_id = sid
#这里的”sid”是上面找出来的host表里的id,xx@xx.com是这台服务器联系人的邮件地址

但是其实最后我不是这么解决的
因为我的联系人不是很多
我就给每一个联系人在cacti里建了个不能登陆的帐号
这样在表plugin_thold_contacts里就会有相应记录
通过在表plugin_thold_threshold_contact里插入相应的记录来实现将某个threshold的报警发给某个联系人的目的
我然后把某个人在表plugin_thold_contacts里相应的id和他为联系人的服务器的所有thresholds的id插入表plugin_thold_threshold_contact即可

其实,我最后用的方法其实还复杂,而且麻烦(因为还需要在cacti里维护一张联系人表)
但这样也有一定的好处
那么就是第一次通过程序设置完了
以后通过web页面手工改动的时候就会方便很多
毕竟我可以直接用鼠标选择联系人
而不是生硬的输入其联系人邮件地址
而且,选择联系人是支持多个联系人的
notify_extra不知道支不支持多个邮件地址

  1. 2009年12月9日13:18 | #1

    不错,很实用。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.