7月 102014
 

Cacti可以通过Thold插件实现邮件报警,最近研究里下,用golang写了个可以实现用微信告警,简单修改下Thold,就可以实现。使用golang开发,sqlite3为数据库,微信公众平台API(http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5)。

效果如下图:

Screenshot_2014-07-09-23-45-21

目前已经可以正常使用,欢迎大家测试,提出意见建议。

此程序目前只用于测试,请勿用与生产环境!待测试稳定之后,会发布稳定版本。

更新历史:

2014年7月31:

1.更新客户端,统一token

2.支持发送消息到多用户(每个用户都必须关注,并注册来获得对应oid)

2014年7月28:

1.更新客户端发送消息长度,从100更改到500

2.更新客户端和服务端,统一token,解决token过期问题

3.更新服务端异常退出bug

 

开发中需要解决的问题以及对策:

问题1:如何识别不同用户。

解决:这个问题也是我首先考虑的,通过阅读微信公众平台开发文档,我通过获取用户openid,来区别不同用户,同时对openid进行加密,保证安全

问题2:如何控制用户拿程序滥发消息

解决:由于程序是通过我的微信公众账号发送消息的(其实可也以用自己的),所以这个问题比较重要,通过加密微信公众账号的appid和appsecret,还有加密openid,来保证消息不滥发,所以大家不要泄漏openid给大家,虽然这个是加密的。嘿嘿。

问题3:如何确保发送的消息不泄漏

解决:程序采取主动发送消息,消息不会经过第三方服务器,大家可以放心,我也不会存储消息。

使用说明:

1.注册

打开微信,扫描下列二维码

qrcode

并关注,关注后会收到消息,可回复:帮助,查看功能帮助:

Screenshot_2014-07-19-21-52-45

然后,要进行注册,直接回复:注册,进行注册:

Screenshot_2014-07-19-21-59-42_mh1405778493043

注册之后,系统会回复注册成功,还会返回你的openid(AES加密过的)万恶的马赛克,这个openid其实就等于你的用户名,用这个来识别不同用户,不要透漏给其他人。直接回复:oid,系统会返回你的openid,以后忘记可以查询。

Screenshot_2014-07-19-22-08-00_mh1405778910498

至此,微信方面的操作完成。

2.设置接口

下载消息客户端;
linux  32位:
https://dl.cactifans.com/tools/sclient_linux_386.tar.gz

SHA1 (sclient_linux_386.tar.gz) = bbabc3d79541928a261e774e681f600d023ac923

linux  64位
https://dl.cactifans.com/tools/sclient_linux_amd64.tar.gz

SHA1 (sclient_linux_amd64.tar.gz) = 98b4d33deb5060609ad7cb9e598efc75e8694594c

下载并解压:(以32位版本为列)

wget https://dl.cactifans.com/tools/sclient_linux_386.tar.gz
tar zxvf sclient_linux_386.tar.gz
mv sclient_linux_386/* /etc/
chmod +x /etc/sclient_linux_386

下载并放到/etc/目录下,并赋予可执行权限。编辑配置文件

vi /etc/conf.json

多用户,可添加多oid,每个用户都要注册,获取oid,注意格式,最后一行,没有“,”号
ccd

前2项不用修改,最后一行Oid为你的注册的时候回复的oid,注意用引号引起来,保存,然后执行

/etc/sclient_linux_386

如果程序输入200,说明发送成功,微信会收到:Hello!,说明配置正确。

ddt

微信

Screenshot_2014-07-19-23-20-53

至此,微信接口配置成功。

原理:send微信客户端会把/etc/test.txt文件里的内容发送消息到用户微信,所以只要把cacti的thold插件推送的报警消息推送到/etc/test.txt,并调用send客户端发送,就可以实现微信报警。如报错,请注意版本是否对应操作系统版本,可在文章后评论里贴出错误日志,以便我分析问题解决。

3.配置Thold

我的Thold 版本为0.5版本(http://docs.cacti.net/plugin:thold),不同版本配置可能有所不同。

编辑thold插件目录下的thold_functions.php,

vi thold_functions.php

查找:mailer.php,大概在2721行,添加如下内容

file_put_contents('/etc/test.txt',$subject);
exec("/etc/sclient_linux_386");

add

 

在Thold里设置好阀值,就可以实现微信报警了。效果如下:

Screenshot_2014-07-19-23-53-22

4.其他功能

可查询消息发送次数,在微信里回复查询,即可查询发送次数(默认值:10次)

Screenshot_2014-07-19-23-54-57

结语:目前还处于测试阶段,希望大家提出测试意见和建议,后期会增加更多丰富功能,比如监控图片发送,微信查询主机状态等功能。

QQ 群1: 61797150   QQ群2: 4863392

打赏

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)