原文出自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” ,中间有些是y或n
# 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)
|
后台运行login.pl
[root@zabbix data]# nohup ./login.pl &
netstat -tunlp|grep 5010
检查端口和服务器正常启用
将qq_sms.sh移动到zabbix脚本目录下,目录如果不知道可以在zabbix_server.conf文件中找到
默认在/usr/lib/zabbix/alertscripts
移动并赋予权限
chmod +x .....
chown zabbix.zabbix ...
创建告警媒体
添加用户
创建动作