ZABBIX使用QQ报警(更新Mojo::web)

原文出自51cto。模块改变,在zabbix中文社区群(62239409)大家帮助下修改完成

安装依赖库

yum install mysql mysql-server mysql-devel mysql-libs mysql-connector-odbc openssl openssl-devel httpd mod_ssl mod_perl mod_auth_mysql gcc gcc-c++ autoconf glibc glibc-common gd gd-devel libjpeg libjpeg-devel libpng libpng-devel rrdtool rrdtool-devel rrdtool-php libjpeg-turbo net-snmp-devel curl-devel unixODBC-devel OpenIPMI-devel java-devel libjpeg-turbo-devel libdbi libdbi-devel libdbi-drivers libdbi-dbd-mysql freetype libpng fontconfig pixman cairo harfbuzz pango php php-gd php-devel libmcrypt fontconfig libxml2 jpeg-6b freetype libpng mutt php-libxml php-mcrypt php-mysql php-mysqli php-pdo-mysql php-zip php-zlib php-xml php-xmlrpc php-bcmath mariadb mariadb-server mariadb-devel xinetd libev php-fpm php-pear php-mbstring php-ldap ssh2 php-pecl-ssh2 php-devel php-pear libssh2 libssh2-devel openldap openldap-devel nmap traceroute glib2 glib2-devel wget dialog unzip php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcryt nano net-snmp-utils perl cpan -y


接下来是要启动server端的login.pl脚本

// 需要perl

# yum �Cy install perl cpan

使用下列命令安装的时候会要求设置,一路回车,最后一个问答是镜像站点设置,输入以下地址(貌似以后每次用到cpan安装模块都会要求设置一次才会工作)

ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/

http://mirrors.hust.edu.cn/CPAN/

以下虚线内只是cpan的常规使用说明,与本文无关

-----------------------------------------------------------------------

cpan的配置文件: /usr/lib/perl5/5.8.8/CPAN/Config.pm

cpan>h
获得帮助 
cpan>m

列出CPAN上所有模块的列表 

CPAN> d /bioperl/
查询有关bioperl的模块

CPAN> install modulename
安装指定的模块

CPAN>o conf init
如要重新配置CPAN,可先进入CPAN,然后在CPAN命令行(CPAN>)键入以下指令:

退出 
cpan>q


可以更改urlist改变镜像站点.

如果需要重新配置CPAN,输入:
#cpan
进入cpan后,输入:
#CPAN>o conf init


安装perl组件出错:
/usr/bin/make ― NOT OK
Running make test
Can’t test without successful make
Running make install
make had returned bad status, install seems impossible
.可以尝试
#cpan
cpan>o conf make /usr/bin/make
cpan>o conf commit
cpan>exit
然后用perl命令再安装一下该组件,看能否成功。
.原因也可能是默认缓存/root/.cpan中的数据损坏rm -rf ~/.cpan删除后在perl -MCPAN -e shell中执行reload index然后执行install Bundle::CPAN最后执行reload CPAN即可正常通过命令行install MODULES

http://it.chinawin.net/softwaredev/article-3b0.html
如何卸载perl模块

-----------------------------------------------------------------------------

// 下面涉及的模块基本都需要安装,安装过程很慢,需要输入”yes” ,中间有些是yn

cpan -fi JE Time::HiRes  Data::Dumper Digest::MD5 LWP::UserAgent JSON YAML Sys::HostIP Plack:App:URLMap Twiggy::Server Plack::Middleware::Header Time::Piece Time::Seconds JSON LWP::UserAgent LWP::Protocol::https Webqq::Encryption Mojo::Webqq

// 这个单独拿出来安装是因为这个邮件模块需要验证邮箱的登录,也是最肯能出错的地方,登录的报错也能看到

cpan Mail::SendEasy

Pass:如果已经装完,邮件又发不出去,想重新安装下这个模块排查,可以执行下列命令:

#find / `perl -e 'print "@INC"'` -name '*.pm' -print | grep Mail | grep -v build | xargs rm -rf

# cpan Mail::SendEasy

Pass:另外要注意的是,不要刚刚新建的邮箱,否则有可能会提示”lock”

Pass:上面模块标示绿色的,可以能已经停止开发和使用了 Webqq::Client地址:https://metacpan.org/pod/Webqq::Client

需要调用新的模块,模块说明地址:https://metacpan.org/pod/Mojo::Webqq


报警需要脚本两个,一个是perl,用来登录webQQ以及发送验证码到邮箱进行登录

                                二是qq_sms.sh脚本,用来监听端口以及发送告警信息                     下面是两个脚本内容截图

------------------------------------------------------------------------------------------------------------------------------------

#!/usr/bin/perl
use Mojo::Webqq;
use Mojo::Util qw(md5_sum);
use Data::Dumper;
use Digest::MD5 qw(md5_hex);
use LWP::UserAgent;
use JSON

#注意: 
#程序内部数据全部使用UTF8编码,因此二次开发源代码也请尽量使用UTF8编码进行编写,否则需要自己做编码处理
#在终端上执行程序,会自动检查终端的编码进行转换,以防止乱码
#如果在某些IDE的控制台中查看执行结果,程序无法自动检测输出编码,可能会出现乱码,可以手动设置输出编码
#手动设置输出编码参考文档中关于 log_encoding 的说明
 
#帐号可能进入保护模式的原因:
#多次发言中包含网址
#短时间内多次发言中包含敏感词汇
#短时间多次发送相同内容
#频繁异地登陆
  
#推荐手机安装[QQ安全中心]APP,方便随时掌握自己帐号的情况
#由于腾讯只能用二维码扫描登录,以下密码就不要改动了,已无意义

 my $qq = 2246199518;                              #登录的QQ号
# my $pwd = "0";                                        #使用帐号密码方式登录时需要
# my $pwd_md5 = md5_sum($pwd);        #得到原始密码的32位长度md5

#############验证码##############

#插件需要使用到 input_qrcode 事件
#需要login中开启delay参数(设置为延迟登录)

my $client=Mojo::Webqq->new(
    ua_debug    =>  0,                             #是否打印详细的debug信息
    qq          =>  $qq,                               #必选,登录的qq帐号,用于帐号密码登录或保存登录cookie使用
#    pwd         =>  $pwd_md5,               #可选,如果选择帐号密码登录方式,必须指定帐号密码的md5值
    login_type  =>  "qrlogin",                 #"qrlogin"表示二维码登录,"login"表示帐号密码登录
           );
#注意: 腾讯已经关闭了帐号密码的登录方式,这种情况下只能使用二维码扫描登录
#客户端进行登

$client->load("PostQRcode",data=>{
        smtp    =>'smtp.163.com',                                  #邮箱的smtp地址  
        port    =>'25',                                                      #smtp服务器端口,默认25
        from    =>'[email protected]',                                #发件人
        to      =>'[email protected]',         #收件人
        user    =>'[email protected]',                                 #smtp登录帐号
        pass    =>'xxxxxxxx',                                           #smtp登录密码

});
#######################################################################################
                #客户端进行二维码登录
                $client->login(delay=>1);
                #客户端加载ShowMsg插件,用于打印发送和接收的消息到终端
                $client->load("ShowMsg");
                #ready事件触发时表示客户端一切准备就绪,建议尽量将自己的代码写在ready内
                #$client->on(ready=>sub{
                #设置接收消息事件的回调函数,在回调函数中对消息以相同内容进行回复
                    #$client->on(receive_message=>sub{
                    #my ($client,$msg)=@_;
                #已以相同内容回复接收到的消息
                    #$client->reply_message($msg,$msg->content);
                #你也可以使用$msg->dump() 来打印消息结构
                    #my $group_uin = $msg->{from_uin};
                    #});

#新版本Mojo::Webqq接口
# 监听的端口,接收来自客户端(qq_sms.sh)的消息
# 这里的hots和port是可以更改的,但是qq_sms.sh脚本也需要改成对应的

#    $client->load("Openqq",data=>{
#    listen => [{host=>10.0.10.31,port=>5010}],             #监听的地址和端口,支持多个
#    auth   => sub {my($param,$controller) = @_},        #可选,认证回调函数,用于进行请求鉴权
#   post_api=> 'http://127.0.0.1:5010/post_api',             #可选,设置接收消息的上报接口
#    }); 
#新版本中监听端口只能监听127.0.0.1
#老版本Webqq::Client接口

$client->load("Openqq",data=>[ {host=>"0.0.0.0",port=>5010}, ]);
#自定义问答知识库
$client->load("KnowledgeBase");

$client->load("SmartReply");

 $client->load("StockInfo");

      # 执行函数,很多朋友都漏了
      $client->run()

---------------------------------------------------------------------------------------------------------------

#!/bin/bash
API_ADDR="127.0.0.1:5010"  # 你login.pl中定义的host和port
qq_num=3028241698
# 处理下编码,用于合并告警内容的标题和内容,即$2和$3
message=`echo -e "$2\n$3"|od -t x1 -A n -v -w1000000000 | tr " " %` 


send_messege(){
#api_url="http://$API_ADDR/openqq/send_message?qq=$qq_num&content=$message"
api_url="http://$API_ADDR/openqq/send_message?id=$qq_num&content=$message"    
curl $api_url
}
# 发送消息,执行函数,很多朋友复制的时候漏了
send_messege

qq_unm:可以填写ID号码,根据实际情况,所以此处更改成对QQ的报警

        解释:qq_num 实际在调用的时候是群的gid号码,而不是qq群号,一定一定要知道

                  gid获取的方法同样可以通过webAPI进行获取。方法就是使用图上api_url变量中的值

                    可根据网页中的帮助,获得gid或id

        示例:

http://127.0.0.1:5000/openqq/get_user_info
http://127.0.0.1:5000/openqq/send_message?id=xxx &content =hello
http://127.0.0.1:5000/openqq/send_message?id=xxx &content = %e4 %bd %a0 %e5 %a5 %bd (中文需要utf8编码并进行urlencode)


                    spacer.gif

后台运行login.pl

[root@zabbix data]# nohup ./login.pl &

spacer.gifnetstat -tunlp|grep 5010

检查端口和服务器正常启用


将qq_sms.sh移动到zabbix脚本目录下,目录如果不知道可以在zabbix_server.conf文件中找到

默认在/usr/lib/zabbix/alertscripts

移动并赋予权限

chmod +x .....

chown zabbix.zabbix ...


创建告警媒体

添加用户

创建动作



你可能感兴趣的:(zabbix)