分佈式監控系統Zabbix-3.0.3-完整安裝記錄(6)-微信報警部署

Zabbix可以通過多種方式把告警信息發送到指定人,常用的有郵件,短信報警方式。

現在由於微信使用的廣泛度,越來越多的企業開始使用zabbix結合微信作爲主要的告警方式,這樣可以及時有效的把告警信息推送到接收人,方便告警的及時處理。
前面介紹了zabbix的郵件報警的部署過程,這裏繼續說下zabbix的微信報警環境的部署。

廢話不多說了,下面記錄了微信報警的操作過程:

接下來詳細記錄如下:

1)微信企業號的申請過程

2)微信企業號登陸後的相關設置

3)zabbix結合微信報警腳本設置

 

------------------------------------------------------------------------------------------------------------------
一、微信企業號的申請過程(現在企業號已經升級爲企業微信):

註冊地址:
https://qy.weixin.qq.com/

 

 

 

 

 

 

如下:填寫用戶信息登陸

掃面二維碼,完成身份驗證

 

 

 

 

掃描二維碼

 

 

 

------------------------------------------------------------------------------------------------------------------
二、微信企業號登陸後的相關設置

首次登陸,查看通訊錄-組織架構,可以直接添加成員,也可以添加子部門,然後在子部門裏新增成員

 

點擊“修改部門”會查看到部門ID號,後面微信腳本里會用到!

 

可以將成員添加到子部門中

 

賬號是不同於微信號,最好是字母加數字

 

成員添加成功後,別忘了後面要關注本企業號

 

 

 

接着”設置“企業號Logo,這個一定要設置,不然後面發信息會報錯,算是一個BUG吧.

注意:設置裏面的”進入認證系統“,認證是需要收費的,所以這裏不進行認證。忽略這個設置。

注意:添加的用戶一定要掃描下面”設置“->”企業號信息“裏的二維碼,關注這個企業號

 

接着到”應用中心”裏創建一個應用

 

記住這個monit-test應用的ID號,後面微信腳本里會用到

 

最後,需要進行“設置”->“權限管理”的操作,新建一個管理組

 

留下下面的CorpID和Secret,後面的微信腳本里會用到!

由於上面monit-manager管理組沒有設置管理員,接下來還要設置一個管理員!
點擊”系統管理組“設置管理員

 

 

 郵箱驗證方式添加

 

登陸上面的管理員郵箱,按照郵件提示進行密碼登陸設置

 

 先掃描二維碼進行綁定,然後設置密碼

 

 

這樣,以後登陸這個企業號,要先使用這個管理員的微信進行掃描,掃描後在微信裏的企業小助手裏確認登陸,然後再進行用戶名和密碼登陸。

 

 

 

 

 

 登陸後,發現系統管理員已經設置成功了。

 

 

-----------------------------------------------------------------------------------------------------
二、接下來進行zabbix的微信配置

 

設置微信腳本如下:在alertscripts路徑下編寫腳本
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts


需要調用微信接口,那麼如何調用微信接口呢?
調用微信接口需要一個調用接口的憑證:access_token
通過 :CropID 、Secret 才能獲取到access_token,但是獲取到的token有效期爲兩分鐘。

微信企業號接口調試工具傳送門:http://qydev.weixin.qq.com/debug

打開上面url,使用上面monitops企業號的monit-manager管理組的CorpID和Secret號獲得調用接口憑證access_token,如下:

 

 

 

 

 

 zabbix發送微信報警的腳本可以用Shell腳本或python腳本,二者任選其一(推薦python腳本)

(一)Shell腳本調用
使用:
curl -s -G url 獲取 AccessToken
使用:
curl --data url 傳送憑證調用企業號接口

zabbix會傳遞三個參數給腳本,$1是消息接收賬號,$2報警標題,$3報警內容

[root@Zabbix-server alertscripts]# cat weixin.sh

#!/bin/bash
#########################################################################
# File Name: wechat.sh
# Author: shaonbean
# Email: [email protected]
# Created Time: Sun 24 Jul 2016 05:48:14 AM CST
#########################################################################
# Functions: send messages to wechat app
# set variables
CropID='wx76c41a935c66acf9'
Secret='RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
#get acccess_token
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
#
function body() {
local int AppID=1
local UserID="test001"      
local PartyID=3
local Msg=$(echo "$@" | cut -d" " -f3-)
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'" $AppID "\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $! $2 $3)" $PURL

注意:
上面腳本中標註的幾處:
CorpID和Secret分別是上面企業公衆號的管理組monit-manager的ID
UseID:用戶賬號。這裏只需要填寫一個賬號即可。zabbix的web界面裏發信是按照應用ID,只要關注這個微信企業號內的用戶都會收到報警郵件。
AppID:應用ID
PartyID:部門ID號

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

爲什麼要這樣寫腳本?

      因爲微信企業號開放的端口有固定的格式限制

      企業號支持的格式:http://qydev.weixin.qq.com/wiki/index.php?title=消息類型及數據格式

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

將weixin.sh腳本放入zabbix默認執行路徑alertscripts下,權限一定要設置成zabbix進程的啓動用戶!
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts
[root@Zabbix-server alertscripts]# chown zabbix.zabbix /usr/local/zabbix/alertscripts/weixin.sh
[root@Zabbix-server alertscripts]# chmod 755 /usr/local/zabbix/alertscripts/weixin.sh

 

手動測試腳本能否正常發信,測試的賬號由於在腳本里已經寫明(test001),觀察到微信能正常收到測試信息:
[root@Zabbix-server alertscripts]# ./weixin.sh  test heiheihei
{"errcode":0,"errmsg":"ok"}
[root@Zabbix-server alertscripts]# ./weixin.sh  test hahaha
{"errcode":0,"errmsg":"ok"}

 

 

-------------------------------------
python腳本調用:

安裝simplejson    (也可以直接下載,地址:https://pan.baidu.com/s/1o8dHQIY    提取密碼:yd72)
[root@Zabbix-server src]# pwd
/usr/local/src
[root@Zabbix-server src]#
[root@Zabbix-server src]# wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
[root@Zabbix-server src]# tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
[root@Zabbix-server src]# python setup.py build
[root@Zabbix-server src]# python setup.py install
*********************************************************************************
注意:在上面build和install過程中,如果出現下面的WARNING提示,不用管,不影響結果!
WARNING: The C extension could not be compiled, speedups are not enabled.
Plain-Python installation succeeded.
*********************************************************************************

下載wechat.py腳本
[root@Zabbix-server src]# git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
[root@Zabbix-server src]# cp Zabbix-Alert-WeChat/wechat.py /usr/local/zabbix/alertscripts/
[root@Zabbix-server src]# cd /usr/local/zabbix/alertscripts/
[root@Zabbix-server alertscripts]# chmod 755 wechat.py 
[root@Zabbix-server alertscripts]# chown zabbix:zabbix wechat.py
[root@Zabbix-server alertscripts]# mv wechat.py weixin.py

修改weixin.py腳本
[root@Zabbix-server alertscripts]# cat weixin.py

#!/usr/bin/python
#_*_coding:utf-8 _*_
 
  
import urllib,urllib2
import json
import sys
import simplejson
 
reload(sys)
sys.setdefaultencoding('utf-8')
 
 
def gettoken(corpid,corpsecret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    print  gettoken_url
    try:
        token_file = urllib2.urlopen(gettoken_url)
    except urllib2.HTTPError as e:
        print e.code
        print e.read().decode("utf8")
        sys.exit()
    token_data = token_file.read().decode('utf-8')
    token_json = json.loads(token_data)
    token_json.keys()
    token = token_json['access_token']
    return token
  
  
  
def senddata(access_token,user,subject,content):
  
    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
    send_values = {
        "touser":"test001",
        "toparty":"3",
        "msgtype":"text",
        "agentid":"1",
        "text":{
            "content":subject + '\n' + content
           },
        "safe":"0"
        }
#    send_data = json.dumps(send_values, ensure_ascii=False)
    send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
    send_request = urllib2.Request(send_url, send_data)
    response = json.loads(urllib2.urlopen(send_request).read())
    print str(response)
  
  
if __name__ == '__main__':
    user = str(sys.argv[1])
    subject = str(sys.argv[2])
    content = str(sys.argv[3])
     
    corpid =  'wx76c41a935c66acf9'
    corpsecret = 'RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

上面腳本中涉及了微信企業號中的用戶(任意一個即可,如上的test001),應用ID,部門ID,corpid和secret

 

修改weixin.py腳本權限
[root@Zabbix-server alertscripts]# chown zabbix.zabbxix weixin.py
[root@Zabbix-server alertscripts]# chmod 755 weixin.py

 

手動測試weixin.py腳本,可以使用用戶賬號或應用ID去測試,觀察微信是否能收到信息:
[root@Zabbix-server alertscripts]# ./weixin.py test001 test hahaha
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
{u'errcode': 0, u'errmsg': u'ok'}
[root@Zabbix-server alertscripts]# ./weixin.py 1 test zabbix-微信報警
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
{u'errcode': 0, u'errmsg': u'ok'}

 

 

接着開始登陸zabbix,添加報警設置(跟郵件報警的配置差不多)

1)創建報警媒介(這裏我選用python腳本:weixin.py,如果選用shell腳本,就改換weixin.sh。其他設置都不變!)

注意下面要填寫的腳本參數:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

 

2)創建用戶weixin(密碼一欄可以選擇跟之前的超級管理員zabbix一樣的密碼;用戶類型也可以設置成超級管理員)

 

這裏最好使用微信企業號的應用ID,這樣發的報警信息,在企業號內的用戶都能收到。或者添加任意一個用戶賬號(比如test-001),切不可添加多條,否則就會收到重複信息。

 

 

 3)創建動作

 

注意嚴格下面的微信發送格式:
上面的默認接收人填寫:{TRIGGER.STATUS}: {TRIGGER.NAME}

默認信息和恢復信息要填寫一樣的內容,如下:
告警主機:{HOST.NAME}
主機IP: {HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME} 
告警等級:{TRIGGER.SEVERITY} 
告警信息:{TRIGGER.NAME}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}

 

如下,在“條件”裏可自主選擇添加“主機”和“模板”(具體可參考上一篇的“zabbix郵件報警”的此步設置)

 

下面的“操作”(具體說明可參考上一篇的“zabbix郵件報警”的此步設置)。
下面設置的報警信息只發送給weixin用戶就行了,沒有發生給用戶組。

 注意:“操作”底部的“條件“做如下設置(時間已確認=非確認),這個別忘了!

 

這樣,就順利創建了一個名爲“weixin”的動作

 

 

測試,將其中一臺被監控機器(192.168.1.25)的zabbix-agent服務關掉,觀察微信是否能正常收到報警信息:
經測試,報警信息(3次)和恢復後的信息(1次),微信都能正常收到。

 

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
要追加用戶的微信監控,只需要將用戶添加到相關應用關聯到的對應部門裏即可!其他配置都不需要動。

 

 

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章