nagios 配置QQ群消息报警

系统服务   nagios qq 报警  

原文文档(by本末 QQ:790873158)
webqq::client git

完成整个过程需要用到2个脚本
  • login.pl 登录QQ,循环刷新QQ信息,打开监听端口,接收来自client的消息,发送消息
  • qqsms.sh 接收消息,发送消息给server端
  • 下面放出2个脚本
Server端: Login.pl
#!/usr/bin/perl
use Webqq::Client;  
use Data::Dumper;  
use Digest::MD5 qw(md5_hex);  
use LWP::UserAgent;  
use JSON;

# 你的发送消息的qq号
my $qq = YOU_QQ_NUM;  
# 你qq的密码
my $pwd = md5_hex('password');

my $client = Webqq::Client->new(debug=>1);  
#############验证码##############
$client->load("PostImgVerifycode");
$client->on_input_img_verifycode() = sub{
    my ($img_verifycode_file) = @_;
    my $smtp = {
        # 这里的邮件主要是负责发送QQ登录需要验证码到邮箱
        smtp    =>'smtp.imdst.com',
        # 登录邮箱的账户
        user    =>'robot@imdst.com',
        # 邮箱密码
        pass    =>'*******',
        # 发件箱
        from    =>'robot@imdst.com',
        #  收件箱,亲测最好别用QQ,收件箱只要能收到邮件就OK
        to      =>'*@imdst.com',
        # 邮件的标题,最好还是英文,不然可能乱码
        from_title => 'QQ_Robot', 
        # 邮件正文,其他同上
        subject => '验证码', 
    };

    return &{$client->plugin("PostImgVerifycode")}($client,$img_verifycode_file,$smtp);
};

$client->login( qq=> $qq, pwd => $pwd);

$client->on_receive_message = sub{
    my $msg = shift;
    my $group_uin = $msg->{from_uin};
};

$client->load("Openqq");
$client->on_run = sub{
    # 监听的端口,接收来自客户端(qq_sms.sh)的消息
    # 这里的hots和port是可以更改的,但是qq_sms.sh脚本也需要改成对应的
    $client->call("Openqq",host=>"0.0.0.0",port=>5010);
};
$client->run();
客户端:qq_sms.sh
#!/bin/bash
API_ADDR="server_IP:5010"         # 你login.pl中定义的host和port  
#qq_num=$1  # 这里没有实际意义,因为这里告警轮询的是QQ群号,不是单独指定QQ号
# zabbix 报警 $2 $3
#message=`echo -e "$2\n$3"|od -t x1 -A n -v -w1000000000 | tr " " %`     
# nagios 报警 $1
message=`echo -e "$1" |od -t x1 -A n -v -w1000000000 | tr " " %`  
#------------------- main body  dont' modify blow --------------------#
get_gid()  
{
# 获取gid,需要安装jd处理json,下面有链接和用法,可以看一下nohup日志看自己的群是第几个修改 `jq '.[0].ginfo.gid'`
    GID=`curl -s http://$API_ADDR/openqq/get_group_info | jq '.[0].ginfo.gid'| tr -d '"'`
}

send_messege()  
{
get_gid  
# 这没什么好说的               
api_url="http://$API_ADDR/openqq/send_group_message?gid=$GID&content=$message"  
    curl $api_url
}

# 发送消息,主函数,很多朋友都复制漏了
send_messege  

另外jd需要额外安装,用于处理json数据,jd的资料在-->点击这里

server端配置

接下来是要启动server端的login.pl脚本,唯一的难点就是依赖太多

yum –y install perl cpan                                       # 需要perl  
cpan  JE Webqq::Encryption Time::HiRes Webqq::Client Data::Dumper Digest::MD5 LWP::UserAgent JSON YAML Sys::HostIP Plack:App:URLMap Twiggy::Server Plack::Middleware::Header      #安装过程很慢,需要手动输入”yes”  
cpan Mail::SendEasy                                            #看是否有报错  
启动login.pl
  • 前台启动查看是否有报错,如果出现报错,检查是否漏装上面的模块
    ./login.pl
  • 能正常启动后,使用后台启动
    nohup ./login.pl &
    查看邮箱接收的验证码

    输入完成后查看下监听端口,确保端口起来了
    netstat -tpln 5010
测试发送QQ消息

sh qq_sms.sh "hello im qqrobot"
看看QQ群是否收到消息 hello im qqrobot

配置nagios报警
  • 修改 command.cfg 报警提示“因为消息过长发现 会导致发送失败,所以精简了”
  • #$CONTACTEMAIL$ 是意义配置,只是避免nagios日志报错
# 'notify-host-by-qqrobot' ommand definition
define command{  
        command_name    notify-host-by-qq
        command_line    /bin/bash /usr/local/nagios/bin/qq.sh "$HOSTNAME$ is $HOSTSTATE$" $CONTACTEMAIL$
        }
# 'notify-service-by-qqrobot' ommand definition
define command{  
        command_name    notify-service-by-qq
        command_line    /bin/bash /usr/local/nagios/bin/qq.sh "$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTEMAIL$    
        }
  • 修改contact.cfg 增加报警
service_notification_commands  notify-service-by-qq   #原有邮件报警逗号隔开即可  
host_notification_commands  notify-host-by-qq  
测试验证