RSS

Cacti微信报警接口

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