Zabbix实现QQ报警配置

@lianst  November 14, 2016

(说明:这里借助Mojo-Webqq的perl模块,更详细的api参考:https://github.com/sjdy521/Mojo-Webqq/blob/master/API.md)

zabbix version:3.2
OS version:CentOS 7

1.依赖环境安装

1.1 安装cpanm包管理工具(如果系统已经安装了cpanm可以忽略此步骤)
a) 方法a:通过cpan安装cpanm

cpan -i App::cpanminus

b) 方法b:直接在线安装cpanm(我是通过这个方法安装成功的,第一个方法比较慢,貌似也不成功.)

curl -kL http://cpanmin.us | perl - App::cpanminus

1.2 使用cpanm在线安装Mojo::Webqq模块

cpanm Mojo::Webqq

1.3 使用cpanm安装邮件依赖模块

cpanm  Mojo::SMTP::Client MIME::Lite

(注意:由于国内墙和网络质量的问题,很有可能有些依赖包安装不成功,可以多试几次,或者把没有成功的包单独cpanm装一次,实在没有办法的可以使用集成环境的包: https://github.com/sjdy521/Mojo-ActivePerl)

2.脚本与运行

2.1 QQ登陆脚本(qqlogin.pl)

#!/usr/bin/env perl
use Mojo::Webqq;
my ($qq,$host,$port,$post_api);
$qq = 299866xxxx;    #修改为你自己的实际QQ号码
$host = "0.0.0.0"; #发送消息接口监听地址,修改为自己希望监听的地址
$port = 5000;      #发送消息接口监听端口,修改为自己希望监听的端口
#$post_api = 'http://xxxx';  #接收到的消息上报接口,如果不需要接收消息上报,可以删除或注释此行

my $client = Mojo::Webqq->new(qq=>$qq);
# 配置邮件,发送登录的二维码图片到邮箱中,如果不使用邮箱可以在/tmp下找到对应图片
$client->load("PostQRcode",data=>{
smtp    =>  'mail.163.com',     #邮箱的smtp地址  
    port    =>  '25',                #smtp服务器端口,默认25
    from    =>  'p_junkai@163.com', #发件人
    to      =>  'p_junkai@163.com', #收件人
    user    =>  'p_junkai@163.com', #smtp登录帐号
    pass    =>  'xxxxx',             #smtp登录密码
});

$client->login();
#$client->load("ShowMsg");          #接收用户和群消息,没有用,注释掉吧
$client->load("Openqq",data=>{listen=>[{host=>$host,port=>$port}], post_api=>$post_api});
$client->run();

2.2 Zabbix调用脚本(qqclient.sh)

#!/bin/bash
# qq号码或者群号
Qnumber=$1

# Openqq插件中定义的host和port
API_ADDR="10.61.6.251:5000"

# 处理成unicode,并合并告警内容的标题和内容,即$2和$3
message="`echo -e "$2\n$3"|od -t x1 -A n -v -w100000 | tr " " %`"

#组装api调用地址
api_url="http://$API_ADDR/openqq/send_message?qq=$Qnumber&content=$message"
# 发送群组API参考:
# http://$API_ADDR/openqq/send_group_message?gnumber=xx&content=$xx 

#请求api地址发送群消息
curl $api_url

2.3 测试QQ登陆脚本(qqlogin.pl)

[root@niaoyun home]# perl qqlogin.pl 
[16/11/14 18:54:43] [info] 当前正在使用 Mojo-Webqq v1.8.7
[16/11/14 18:54:43] [info] 执行插件[ Mojo::Webqq::Plugin::PostQRcode ]
[16/11/14 18:54:43] [info] 客户端加载cookie[ /tmp/mojo_webqq_cookie_9763307.dat ]
[16/11/14 18:54:43] [info] 初始化 smartqq 客户端参数...
[16/11/14 18:54:44] [info] 正在获取登录二维码...
[16/11/14 18:54:44] [info] 二维码已下载到本地[ /tmp/mojo_webqq_qrcode_9763307.png ]
[16/11/14 18:54:45] [info] 登录二维码已经发送到邮箱: 9763307@qq.com
[16/11/14 18:54:45] [info] 等待手机QQ扫描二维码...
[16/11/14 18:56:21] [info] 检查安全代码...
[16/11/14 18:56:22] [info] 获取数据验证参数...
[16/11/14 18:56:22] [info] 尝试进行登录(2)...
[16/11/14 18:56:22] [info] 帐号(9763307)登录成功
[16/11/14 18:56:22] [info] 清除残留的历史二维码图片
[16/11/14 18:56:22] [info] 更新个人信息...
[16/11/14 18:56:23] [info] 更新好友信息...
[16/11/14 18:56:23] [info] 更新好友扩展信息...
[16/11/14 18:56:23] [info] 更新群列表信息...
[16/11/14 18:56:23] [info] 更新群列表扩展信息...
[16/11/14 18:56:23] [info] 更新讨论组列表信息...
[16/11/14 18:56:24] [info] 执行插件[ Mojo::Webqq::Plugin::Openqq ]
[16/11/14 18:56:24] [info] Listening at "http://118.192.155.244:5000"
Server available at http://118.192.155.244:5000
[16/11/14 18:56:24] [info] 开始接收消息...

2.4 登陆到邮箱,使用手机QQ扫描二维码登陆webqq

到这里QQ就登陆成功了,接下来会拉取QQ中的好友,群等信息。在有些时候会报502错误,经过询问作者属于正常现象可直接忽略。

2.5 测试zabbix调用脚本(qqclient.sh)

[root@niaoyun home]# bash -x qqclient.sh 619202250 nihao zabbixqq
+ Qnumber=619202250
+ API_ADDR=118.192.155.244:5000
++ echo -e 'nihao\nzabbixqq'
++ od -t x1 -A n -v -w100000
++ tr ' ' %
+ message=%6e%69%68%61%6f%0a%7a%61%62%62%69%78%71%71%0a
+ api_url='http://118.192.155.244:5000/openqq/send_message?qq=619202250&content=%6e%69%68%61%6f%0a%7a%61%62%62%69%78%71%71%0a'
+ curl 'http://118.192.155.244:5000/openqq/send_message?qq=619202250&content=%6e%69%68%61%6f%0a%7a%61%62%62%69%78%71%71%0a'
{"code":0,"msg_id":13220001,"status":"发送成功"}

看到提示信息,确认脚本配置没有问题了的话就可以去zabbix中配置了。(注:如以上脚本测试有错误,将导致zabbix调取QQ报警无法使用。)

2.5 测试成功之后,使用如下命令把qqlogin.pl脚本放到后台运行.

nohup perl qqlogin.pl &

2.6 查看登陆日志

3.Zabbix告警配置

3.1 打开zabbix_server.conf,开启AlertScriptsPath,并重启zabbix.

...
AlertScriptsPath=$PATH/zabbix/alertscripts

3.2 配置media types(报警媒介类型)-Administration-->Media types-->Create media type

3.3 配置用户组与用户-Administration-->Media types-->User Groups-->Create user Grups

至少给予只读权限

在改组添加一个用户

配置该用户的media,send to填写送达的QQ号(群号)

3.4 配置告警action-Configuration-->Action-->Create Action
Action:

Conditions:

Operations:

4.告警测试

4.1 改下trigger触发一下action

4.2 查看消息


添加新评论