您的位置:首页 > 运维架构

Zabbix结合Mojo-Webqq实现告警

2018-09-14 15:10 621 查看
安装方法

推荐使用cpanm在线安装或升级Mojo::Webqq模块, 如果使用docker方式请参见Docker镜像安装及使用方法

1.安装perl

安装之前请先确认下你的系统是否已经安装了Perl,因为除了windows,其他大部分的平台默认都可能已经预装过

并且你的Perl版本至少5.10.1+,推荐5.14+

Perl官网下载页面 有包含Unix/Linux、Mac OS X、Windows多平台比较全面详细的安装说明

建议大家尽量选择Binaries(二进制预编译)的版本,安装即可使用,比较方便

平台
推荐选择
下载地址
Windows
1. StrawberryPerl
2. ActivePerl
3. Mojo-StrawberryPerl
StrawberryPerl下载地址
Mojo-StrawberryPerl下载地址
ActivePerl下载地址
Linux
1. 系统自带
2. yum/apt等包管理器
3. 官方源码编译
4. Mojo-CentosPerl
5. ActivePerl
6. Mojo-ActivePerl
7. DWIM-Perl
Mojo-CentosPerl下载地址
ActivePerl下载地址
Mojo-ActivePerl下载地址
DWIM-Perl下载地址
Mac
1. 系统自带
2. ActivePerl
ActivePerl下载地址
注意:

Mojo-CentosPerl是基于Centos系统编译打包而成,适合Centos6.5以上的x86_64系统

Mojo-ActivePerl是基于ActivePerl打包的而成,适用于linux x86_64系统,并且系统glibc 2.15+

Mojo-StrawberryPerl是基于StrawberryPerl精简打包而成,适用于windows 32位/64位系统

2.安装cpanm包管理工具(如果系统已经安装了cpanm可以忽略此步骤)

方法a: 通过cpan安装cpanm

$ cpan -i App::cpanminus

方法b: 直接在线安装cpanm

$ curl -kL https://cpanmin.us | perl - App::cpanminus 官方服务器在国外,如果无法访问,可以选择下面的命令: $ curl http://share-10066126.cos.myqcloud.com/cpanm.pl|perl - App::cpanminus

3.使用cpanm在线安装 Mojo::Webqq 模块(如果系统已经安装了该模块,执行此步骤会对模块进行升级)

$ cpanm Mojo::Webqq

如果安装过程中一直提示下载失败,很可能是因为访问到国外服务器网络比较差

这种情况下可以尝试按如下方式手动指定国内的镜像站点

$ cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

$ cpanm --mirror http://mirrors.163.com/cpan/ Mojo::SMTP::Client MIME::Lite

4.安装失败可能有帮助的解决方法

如果你运气不佳,通过cpanm没有一次性安装成功,这里提供了一些可能有用的信息

在安装 Mojo::Webqq 的过程中,cpan或者cpanm会帮助我们自动安装很多其他的依赖模块

在众多的依赖模块中,安装经常容易出现问题的主要是 IO::Socket::SSL

IO::Socket::SSL 主要提供了 https 支持,在安装过程中可能会涉及到SSL相关库的编译

对于 Linux 用户,通常采用的是编译安装的方式,系统缺少编译安装必要的环境,则会导致编译失败

对于 Windows 用户,由于不具备良好的编译安装环境,推荐采用一些已经打包比较全面的Perl运行环境

例如比较流行的 strawberryperl 或者 activeperl 的最新版本都默认包含 Mojo::Webqq 的核心依赖模块

RedHat/Centos:

$ yum install -y openssl-devel

Ubuntu:

$ sudo apt-get install libssl-dev

搞定了编译和运行环境之后,再重新回到 步骤2 安装Mojo::Webqq即可

如何使用

5.我对Perl很熟悉,是一个专业的Perler

该项目是一个纯粹的Perl模块,已经发布到了cpan上,请仔细阅读 Mojo::Weqq 模块的使用文档

除此之外,你可以看下 demo 目录下的更多代码示例

6.我是对Perl不熟悉,是一个其他语言的开发者,只对提供的消息发送/接收接口感兴趣

可以直接把如下代码保存成一个源码文件(必须是UTF-8编码),使用 perl 解释器来运行

#!/usr/bin/env perl

use Digest::MD5;

use Mojo::Webqq;

my ($host,$port,$post_api);

#

$host = "0.0.0.0"; #发送消息接口监听地址,没有特殊需要请不要修改

$port = 5000; #发送消息接口监听端口,修改为自己希望监听的端口

#$post_api = 'http://xxxx'; #接收到的消息上报接口,如果不需要接收消息上报,可以删除或注释此行

#

my $client = Mojo::Webqq->new(login_type=>'login',account=>账号,pwd=>Digest::MD5::md5_hex('密码') );

$client->load("ShowMsg");

$client->load("Openqq",data=>{listen=>[{host=>$host,port=>$port}], post_api=>$post_api});

$client->run();

上述代码保存成 qqlogin.pl 文件,保存路径为/usr/local/zabbix/share/zabbix/alertscripts,然后使用 perl 来运行,就会完成QQ登录并在本机产生一个监听指定地址端口的 http server

$ perl qqlogin.pl

7.测试qqlogin.pl登录脚本

perl qqlogin.pl

[18/01/26 18:18:44] [info] 当前正在使用 Mojo-Webqq v2.1.7

[18/01/26 18:18:44] [info] 获取最新公告信息...

[18/01/26 18:18:45] [info] ----------------------------------------

[18/01/26 18:18:45] [info] 以下是最新公告:

[18/01/26 18:18:45] [info]

[18/01/26 18:18:45] [info] 2018-01-22 Mojo::Webqq v2.1.7

[18/01/26 18:18:45] [info] 支持账号密码登录,参考 https://github.com/sjdy521/Mojo-Webqq/issues/183 
[18/01/26 18:18:45] [info]

[18/01/26 18:18:45] [info] 2018-01-15 Mojo::Webqq v2.1.6

[18/01/26 18:18:45] [info] 解决了容易掉线,需要频繁扫码的问题,建议大家尽快升级

[18/01/26 18:18:45] [info] ----------------------------------------

[18/01/26 18:18:45] [info] 执行插件[ Mojo::Webqq::Plugin::ShowMsg ]

[18/01/26 18:18:45] [info] 执行插件[ Mojo::Webqq::Plugin::Openqq ]

[18/01/26 18:18:45] [info] 插件[Mojo::Webqq::Plugin::Openqq]监听地址: [ http://0.0.0.0:5000 ]

[18/01/26 18:18:45] [info] Listening at "http://0.0.0.0:5000"

[18/01/26 18:18:45] [info] 初始化 smartqq 客户端...

[18/01/26 18:18:46] [info] 正在检查登录状态...

[18/01/26 18:18:46] [info] 检查结果:需要重新登录(2)

[18/01/26 18:18:46] [info] 开始账号密码方式登录...

[18/01/26 18:18:46] [info] 初始化 smartqq 客户端...

[18/01/26 18:18:46] [info] 正在检查登录状态...

[18/01/26 18:18:46] [info] 检查结果:登录状态有效,尝试直接恢复登录...

[18/01/26 18:18:46] [info] 检查安全代码...

[18/01/26 18:18:46] [info] 获取数据验证参数...

[18/01/26 18:18:47] [info] 正在进行登录(2)...

[18/01/26 18:18:47] [info] 账号密码方式登录成功

[18/01/26 18:18:47] [info] 帐号(123456789)登录成功

[18/01/26 18:18:47] [info] 更新个人信息...

[18/01/26 18:18:47] [info] 更新好友信息...

[18/01/26 18:18:47] [info] 更新好友扩展信息...

[18/01/26 18:18:50] [info] 更新群列表信息...

[18/01/26 18:18:50] [info] 更新讨论组列表信息...

[18/01/26 18:18:50] [info] 开始接收消息...


8.测试发送QQ消息脚本

cat qqclient.sh

qqclient.sh保存路径为/usr/local/zabbix/share/zabbix/alertscripts

#!/bin/bash

#好友的QQ号码
qq=$1

#Mojoqq服务器地址与端口号
server="公网IP"
port="5000"

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

#调用的api接口
api_url="http://$server:$port/openqq/send_friend_message"
parameter="uid=$qq&content=$message"

#post方式提交请求发送QQ好友消息
curl -d $parameter $api_url

测试

bash -x qqclient.sh 12345678 Hello Linux!

+ qq=12345678

+ server=公网IP

+ port=5000

++ echo -e 'Hello\nLinux!'

++ od -t x1 -A n -v -w100000

++ tr ' ' %

+ message=%48%65%6c%6c%6f%0a%4c%69%6e%75%78%21%0a

+ api_url=http://公网IP:5000/openqq/send_friend_message

+ parameter='uid=12345678&content=%48%65%6c%6c%6f%0a%4c%69%6e%75%78%21%0a'

+ curl -d 'uid=12345678&content=%48%65%6c%6c%6f%0a%4c%69%6e%75%78%21%0a' http://公网IP:5000/openqq/send_friend_message
{"code":0,"id":36530001,"status":"发送成功"}

9.使用pm2启动托管qqlogin.pl,并添加防火墙规则

pm2下添加qqlogin.pl启动

cd /root/.pm2

cat qqlogin.json

{

"apps":

{

"name": "perl qqlogin.pl",

"cwd": "/usr/local/zabbix/share/zabbix/alertscripts",

"script": "./qqlogin.pl",

"exec_interpreter": "perl",

"min_uptime": "60s",

"max_restarts": 30,

"watch": true

}

pm2 start qqlogin.json && pm2 startup



公网IP之外的IP访问5000端口,直接DROP

iptables -A INPUT ! -s 公网IP -m tcp -p tcp --dport 5000 -j DROP

10.zabbix告警媒介配置

zabbix报警脚本路径为“/usr/local/zabbix/share/zabbix/alertscripts”,上步qqclient.sh及qqlogin.pl均已保存到该路径下

告警媒介配置

管理-->报警媒介类型-->创建报警媒介



绑定报警媒介和用户

管理-->用户-->Admin-->报警媒介-->添加





监控项和触发器和动作和用户的关系

先定义监控项,然后定义触发器,触发器设置阈值,触发器和动作绑定,如果监控项的的值超过的触发器设定的阈值,触发器被触发然后执行动作,也就是发送报警信息给某个用户

用户和报警媒介的关系

先配置一个报警媒介,也就是接收报警的方法(QQ消息或者sendmail邮件),然后报警媒介和某个用户绑定,动作把报警信息发送到某个用户,某个用户接收报警信息的方法就是QQ或者邮件

绑定动作到用户

配置-->动作-->操作



可以使用QQ接受告警消息了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息