安装Mojo::Webqq模块
1、安装perl
Perl版本至少5.10.1+,推荐5.14+
yum安装,如果yum源比较旧,可用下面方法安装
wget https://github.com/sjdy521/Mojo-CentosPerl/archive/master.zip -O Mojo-CentosPerl.zip
unzip Mojo-CentosPerl.zip
cd Mojo-CentosPerl-master/
mv perl/ /usr/local/
把Mojo-CentosPerl包含的perl和cpanm设置下alias,避免和系统默认的perl混淆(或者直接使用绝对路径)
$ /usr/local/perl/bin/perl -v #使用perl的绝对路径
$ /usr/local/perl/bin/cpanm --help #使用cpanm的绝对路径
或者绝对路径太长,可以给命令起个别名,方便使用,如下两行写入到 ~/.bashrc 文件的最后
alias perl='/usr/local/perl/bin/perl'
alias cpanm='/usr/local/perl/bin/cpanm'
执行如下命令来使得 ~/.bashrc 的改动生效
$ source ~/.bashrc
现在你可以直接使用别名来执行perl和cpanm
$ perl -v
$ cpanm --help
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
4、添加QQ登陆脚本
qqlogin.pl
#!/usr/bin/env perl
use Mojo::Webqq;
my ($qq,$host,$port,$post_api);
$qq = '1770XXXXXX'; #修改为你自己的实际QQ号码(用此QQ发送报警信息到指定的QQ)
$host = '0.0.0.0'; #发送消息接口监听地址,修改为自己希望监听的地址,记得用单引号套住内容
$port = '5000'; #发送消息接口监听端口,修改为自己希望监听的端口,记得用单引号套住内容
my $client = Mojo::Webqq->new(qq=>$qq);
#配置邮件,发送登录的二维码图片到邮箱中,如果不使用邮箱可以在/tmp下找到对应图片(进入这个邮箱找到二维码,用手机QQ扫描登录,前提是手机QQ登录的是1770XXXXXX的QQ)
$client->load("PostQRcode",data=>{
smtp => 'smtp.163.com', #邮箱的smtp地址,记得用单引号套住内容
port => '25', #smtp服务器端口,默认25,QQ邮箱用SSL 465端口
from => 'XXXXXXXXXXX@163.com', #发件人
to => 'XXXXXXXXXXX@163.com', #收件人
user => 'xxxxxxxxxxx@163.com', #smtp登录帐号
pass => 'XXXXXX', #smtp登录密码(一定要写客户端验证密码)
});
$client->login();
#$client->load("ShowMsg"); #接收用户和群消息,没有用,注释掉吧
$client->load("Openqq",data=>{listen=>[{host=>$host,port=>$port}], post_api=>$post_api});
$client->run();
5、添加发送消息脚本
#!/bin/bash
#好友的QQ号码
qq=$1
#Mojoqq服务器地址与端口号
server="192.168.100.59"
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_group_message"
parameter="uid=$qq&content=$message"
#post方式提交请求发送QQ好友消息
curl -d $parameter $api_url
例子:
#信息获取
/openqq/get_user_info #查询用户信息
/openqq/get_friend_info #查询好友信息
/openqq/get_group_info #查询群信息
/openqq/get_discuss_info #查询讨论组信息
#消息发送,均支持GET和POST
/openqq/send_friend_message #发送好友消息 参数id=xxx&content=xxx 或 uid=xxx&content=xxx
/openqq/send_group_message #发送群消息 参数id=xxx&content=xxx 或 uid=xxx&content=xxx
/openqq/send_discuss_message #发送讨论组消息 参数id=xxx&content=xxx (由于腾讯限制,当前无法成功发送)
/openqq/send_sess_message #发送群临时消息 参数 group_id=xxx&id=xxx&content=xxx 或 group_uid=xxx&uid=xxx&content=xxx (由于腾讯限制,当前无法成功发送)
/openqq/send_sess_message #发送讨论组临时消息 参数 discuss_id=xxx&id=xxx&content=xxx 或 dusciss_id=xxx&uid=xxx&content=xxx (由于腾讯限制,当前无法成功发送)
获取群uid(群号码)
"uid":1918358826
发送到群
http://192.168.100.59:5000/openqq/send_group_message?uid=637273120&content=Hello World!
6、打开zabbix_server.conf,开启AlertScriptPath,并重启zabbix
AlertScriptsPath=/usr/lib/zabbix/alertscripts
将qqclient.sh放置到此目录
7、zabbix告警媒介配置
管理-->报警媒介类型-->创建报警媒介
名称
脚本名
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
8、绑定报警媒介和用户
管理-->用户-->Admin-->报警媒介-->添加
9、监控项和触发器和动作和用户的关系
先定义监控项,然后定义触发器,触发器设置阈值,触发器和动作绑定,如果监控项的的值超过的触发器设定的阈值,触发器被触发然后执行动作,也就是发送报警信息给某个用户
用户和报警媒介的关系
先配置一个报警媒介,也就是接收报警的方法,例如:QQ消息或者邮件,然后报警媒介和某个用户绑定,动作把报警信息发送到某个用户,某个用户接收报警信息的方法就是QQ或者邮件
10、绑定动作到用户
配置-->动作-->操作
11、汉化报警信息
====发现问题====
问题描述: {TRIGGER.NAME}
问题状态: {TRIGGER.STATUS}
问题级别: {TRIGGER.SEVERITY}
监控项数值:
{ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
Original event ID: {EVENT.ID}
====已经恢复====
问题描述: {TRIGGER.NAME}
问题状态: {TRIGGER.STATUS}
问题级别: {TRIGGER.SEVERITY}
监控项数值:
{ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
Original event ID: {EVENT.ID}