Cacti微信报警接口
Cacti 可以通过 Thold 插件实现邮件报警,最近研究里下,用 golang 写了个可以实现用微信告警,简单修改下 Thold,就可以实现。使用 golang 开发,sqlite3 为数据库,微信公众平台 API(http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5)。
效果如下图:
目前已经可以正常使用,欢迎大家测试,提出意见建议。
此程序目前只用于测试,请勿用与生产环境!待测试稳定之后,会发布稳定版本。
更新历史:
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.注册
打开微信,扫描下列二维码
并关注,关注后会收到消息,可回复:帮助,查看功能帮助:
然后,要进行注册,直接回复:注册,进行注册:
注册之后,系统会回复注册成功,还会返回你的 openid(AES 加密过的)万恶的马赛克,这个 openid 其实就等于你的用户名,用这个来识别不同用户,不要透漏给其他人。直接回复:oid,系统会返回你的 openid,以后忘记可以查询。
至此,微信方面的操作完成。
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,注意格式,最后一行,没有“,”号
前 2 项不用修改,最后一行 Oid 为你的注册的时候回复的 oid,注意用引号引起来,保存,然后执行
/etc/sclient_linux_386
如果程序输入 200,说明发送成功,微信会收到:Hello!,说明配置正确。
微信
至此,微信接口配置成功。
原理: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");
在 Thold 里设置好阀值,就可以实现微信报警了。效果如下:
4.其他功能
可查询消息发送次数,在微信里回复查询,即可查询发送次数(默认值:10 次)
结语:目前还处于测试阶段,希望大家提出测试意见和建议,后期会增加更多丰富功能,比如监控图片发送,微信查询主机状态等功能。
QQ 群 1: 61797150 QQ 群 2: 4863392