安裝依賴包
環境
Zabbix: 3.2 OS:Centos 7
安裝依賴包
yum install lrzsz chrony gcc gcc-c++ git openssl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
安裝cpanm包管理工具
curl -kL http://cpanmin.us | perl - App::cpanminus
使用cpanm在線安裝Mojo:Webqq
cpanm Mojo::Webqq
使用cpanm在線安裝郵件依賴模板
cpanm Mojo::SMTP::Client MIME::Lite
編寫腳本
需要兩個腳本:
- qqlogin.pl:在腳本里輸入QQ號,然后腳本把二維碼發送到腳本里定義的郵箱,然后手機登錄QQ掃描二維碼登錄QQ.(接收報警信息)
- qqclient.sh:把報警信息發送給指定的QQ號或者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 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();
qqclient.sh
#!/bin/bash #好友的QQ號碼 qq=$1 #Mojoqq服務器地址與端口號 server="172.16.1.229" 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_friend_message" parameter="uid=$qq&content=$message" #post方式提交請求發送QQ好友消息 curl -d $parameter $api_url
測試QQ登錄腳本
[root@zabbix ~]# perl qqlogin.pl [17/05/24 15:46:17] [info] 當前正在使用 Mojo-Webqq v2.1.1 [17/05/24 15:46:17] [info] 客戶端加載cookie[ /tmp/mojo_webqq_cookie_default.dat ] [17/05/24 15:46:17] [info] 執行插件[ Mojo::Webqq::Plugin::PostQRcode ] [17/05/24 15:46:17] [info] 初始化 smartqq 客戶端參數... [17/05/24 15:46:18] [info] 正在獲取登錄二維碼... [17/05/24 15:46:19] [info] 二維碼已下載到本地[ /tmp/mojo_webqq_qrcode_default.png ] [17/05/24 15:46:20] [info] 登錄二維碼已經發送到郵箱: xxxxxxxxxx@163.com [17/05/24 15:46:20] [info] 等待手機QQ掃描二維碼... [17/05/24 15:47:06] [info] 手機QQ掃碼成功,請在手機上點擊[允許登錄smartQQ]按鈕... [17/05/24 15:47:09] [info] 檢查安全代碼... [17/05/24 15:47:09] [info] 獲取數據驗證參數... [17/05/24 15:47:10] [info] 嘗試進行登錄(2)... [17/05/24 15:47:10] [info] 帳號(1770xxxxxxx)登錄成功 [17/05/24 15:47:10] [info] 清除殘留的歷史二維碼圖片 [17/05/24 15:47:10] [info] 更新個人信息... [17/05/24 15:47:11] [info] 更新好友信息... [17/05/24 15:47:12] [info] 更新好友擴展信息... [17/05/24 15:47:12] [info] 更新群列表信息... [17/05/24 15:47:12] [info] 更新群列表擴展信息... [17/05/24 15:47:12] [info] 更新討論組列表信息... [17/05/24 15:47:12] [info] 執行插件[ Mojo::Webqq::Plugin::Openqq ] [17/05/24 15:47:12] [info] Listening at "http://0.0.0.0:5000" Server available at http://0.0.0.0:5000 [17/05/24 15:47:12] [info] 開始接收消息...
登錄到郵箱,打開郵件,掃描二維碼登錄QQ
測試發送QQ消息腳本
root@zabbix ~]# bash -x qqclient.sh 9618154 nihao zabbixqq + qq=9618154 + server=172.16.1.229 + port=5000 ++ echo -e 'nihao\nzabbixqq' ++ od -t x1 -A n -v -w100000 ++ tr ' ' % + message=%6e%69%68%61%6f%0a%7a%61%62%62%69%78%71%71%0a + api_url=http://172.16.1.229:5000/openqq/send_friend_message + parameter='uid=9618154&content=%6e%69%68%61%6f%0a%7a%61%62%62%69%78%71%71%0a' + curl -d 'uid=9618154&content=%6e%69%68%61%6f%0a%7a%61%62%62%69%78%71%71%0a' http://172.16.1.229:5000/openqq/send_friend_message {"code":0,"id":32030022,"status":"發送成功"}[root@zabbix ~]#
查看是否收到QQ消息
Zabbix報警配置
在zabbix服務端啟動qqlogin.pl,用來登錄發送報警的QQ
setsid perl qqlogin.pl &
qqclient.sh從報警媒介里添加,zabbix調用這個腳本發送報警信息
Zabbix報警腳本路徑配置
打開zabbix_server.conf,開啟AlertScriptPath,並重啟zabbix
AlertScriptsPath=/usr/lib/zabbix/alertscripts
zabbix告警媒介配置
管理-->報警媒介類型-->創建報警媒介
綁定報警媒介和用戶
管理-->用戶-->Admin-->報警媒介-->添加
綁定動作到用戶
監控項和觸發器和動作和用戶的關系
先定義監控項,然后定義觸發器,觸發器設置閾值,觸發器和動作綁定,如果監控項的的值超過的觸發器設定的閾值,觸發器被觸發然后執行動作,也就是發送報警信息給某個用戶
用戶和報警媒介的關系
先配置一個報警媒介,也就是接收報警的方法,例如:QQ消息或者郵件,然后報警媒介和某個用戶綁定,動作把報警信息發送到某個用戶,某個用戶接收報警信息的方法就是QQ或者郵件
綁定動作到用戶
配置-->動作-->操作