安裝Mojo::Webqq模塊
https://github.com/sjdy521/Mojo-Webqq
1、安裝perl
Perl版本至少5.10.1+,推薦5.14+
yum安裝,如果yum源比較舊,可用下面方法安裝
https://github.com/sjdy521/Mojo-CentosPerl
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登陸腳本
http://www.cnblogs.com/zhaijunming5/p/6899795.html
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
例子:
https://metacpan.org/pod/distribution/Mojo-Webqq/doc/Webqq.pod#Mojo::Webqq::Group-%E7%BE%A4%E7%BB%84
#信息獲取
/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(群號碼)
http://192.168.100.59:5000/openqq/get_group_info
"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}
