Zabbix简介

zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

下文讲述了如何通过微信实现zabbix的告警:

第一步、注册微信公众号

首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的,申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。

292a9e31a14313c7ef978cf5a8772d58.png

订阅号有一个限制,就是你给对方发送的信息,对方需要24小时之内回复一下,否则对方就再不会收到信息。

7f3db9b82c606ac7e93146a6d6eaa137.png

db934c8ac4696e8d3129560fd6ea8b53.png

点击总用户数,点击刚刚关注的你自己的微信号的头像,在弹出的网页url中有你微信号的id 也就是下面url标红的部分。

6971cd8e785ba2671419d4d075446fc8.png

第二步、下载并配置微信公众平台私有接口

下载API,本文附近即为下载的API文件,可以根据修改# git clone https://github.com/lealife/WeiXin-Private-API

修改config文件:# vim config.php1

2

3

4

5

6

7

8

9<?php

// 全局配置

$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<?php

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"

若出现以下信息,则表示发送成功:

8d7e444f190187e77719b5623a948ee6.png

第三步、配置Zabbix告警

1、增加示警媒介类型:

806b10817b50dec75e924d40fa444b99.png

2、添加用户报警媒介,这里使用administrator用户

57d2df254bebe6a73c44020c2a062008.png

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}

a0e29f0aace1bd8d1b1de532c098aba0.png

107007541fa7df5354d25597a6c3ba2a.png

8dc1b07a9530fc51716416618ca06545.png

4、测试停掉一台线上测试服务器的zabbix_agentd,看是否收到微信的告警:如图

可以看到zabbix把信息发送出去了,下面就是微信收到的信息了。

3b75e95fcfc5ed2390eda2a91f42e3bf.png

4cdfd6d6d4f85c3b98be7b13921f9357.png

附加:

以上都是我们把报警发给了自己,如果我们想要发给其他的人员怎么办呢?

1、首先让另一个人关注我的公众微信号

2、点击查看他的微信ID

d05e214273e577285e17bc7b3075e909.png

5fb5a992559e2cb266f442b27f1718c7.png

3、上面部署好的我们只需要修改test.php,修改为如下1

2

3

4

5

6

7

8

9

10

11<?php

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就可以了,非常简单。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐