Zabbix简介
zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
下文讲述了如何通过微信实现zabbix的告警:
第一步、注册微信公众号
首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的,申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。
订阅号有一个限制,就是你给对方发送的信息,对方需要24小时之内回复一下,否则对方就再不会收到信息。
点击总用户数,点击刚刚关注的你自己的微信号的头像,在弹出的网页url中有你微信号的id 也就是下面url标红的部分。
第二步、下载并配置微信公众平台私有接口
下载API,本文附近即为下载的API文件,可以根据修改# git clone https://github.com/lealife/WeiXin-Private-API
修改config文件:# vim config.php1
2
3
4
5
6
7
8
9
// 全局配置
$G_ROOT = dirname(__FILE__);
$G_CONFIG["weiXin"] = array(
'account' => '微信公众登录号码',
'password' => '微信公众登录密码',
'cookiePath' => $G_ROOT. '/cache/cookie', // cookie缓存文件路径
'webTokenPath' => $G_ROOT. '/cache/webToken', // webToken缓存文件路径
);
修改test.php文件为如下内容1
2
3
4
5
6
7
require "config.php";
require "include/WeiXin.php";
$weiXin = new WeiXin($G_CONFIG['weiXin']);
$testFakeId = "$argv[1]";
$msg="$argv[3]";
print_r($weiXin->send($testFakeId, "$msg"));
注意这里$msg=”$argv[3]”表示zabbix传入的第三个参数,因为在zabbix报警时会传入三个参数:一是微信好友ID,二是报警信息的主题,三是报警信息的具体内容,这里跳过了报警信息主题,直接发送报警信息内容。
创建微信报警脚本weixin.sh 放到zabbix的脚本路径里,我的zabbix脚本路径为: /usr/local/zabbix/alertscripts,把我们下载的微信API移到这个目录,修改权限为zabbix,要不zabbix无法调用的。
# touch /usr/local/zabbix/alertscripts/weixin.sh1
2
3
4
5
6#!/bin/bash
###SCRIPT_NAME:weixin.sh###
###send message from weixin for zabbix monitor###
###water###
###V1-2016-01-12###
/usr/bin/php /usr/local/zabbix/alertscripts/WeiXin-Private-API/test.php "$1" "$2" "$3"
# chmod +x weixin.sh 给脚本增加执行权限# chown zabbix:zabbix weixin.sh 给zabbix用户赋予权限
# chown zabbix.zabbix -R WeiXin-Private-API
测试接口是否可以使用:
# ./weixin.sh oMIlmv_O9hvN3zWNatF91k7YYQIk "" "Welcome Weixin"
若出现以下信息,则表示发送成功:
第三步、配置Zabbix告警
1、增加示警媒介类型:
2、添加用户报警媒介,这里使用administrator用户
3、添加报警动作
告警的动作字段在下面如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23主 题:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢复主题:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
4、测试停掉一台线上测试服务器的zabbix_agentd,看是否收到微信的告警:如图
可以看到zabbix把信息发送出去了,下面就是微信收到的信息了。
附加:
以上都是我们把报警发给了自己,如果我们想要发给其他的人员怎么办呢?
1、首先让另一个人关注我的公众微信号
2、点击查看他的微信ID
3、上面部署好的我们只需要修改test.php,修改为如下1
2
3
4
5
6
7
8
9
10
11
require "config.php";
require "include/WeiXin.php";
$weiXin = new WeiXin($G_CONFIG['weiXin']);
$testFakeId = "$argv[1]";
$testFakeId2 = "oMIlmvyGjdN-O5DarcLwna89mlOg"; #第二个人的微信ID,多人以此累加即可
$msg="$argv[3]";
//print_r($weiXin->send($testFakeId, "$msg"));
print_r($weiXin->batSend(array($testFakeId, $testFakeId2), "$msg"));
把信息加入到属组发出去,如果有第三个人设置一个$testFakeId3就可以了,非常简单。