zabbix3.4接入微信報警

zabbix3.4接入微信報警

2018年04月26日 15:37:38python

閱讀數:619web

簡介

微信做爲平常使用最頻繁的工具,所以但願將微信接入zabbix報警。json

微信企業號

1.申請微信企業號 
申請後,請在「個人企業」頁面下記錄企業號的CorpID 
這裏寫圖片描述
2.添加通信錄 
這裏寫圖片描述 
部門添加完成後,根據實際狀況添加子部門或相關成員,以下: 
這裏寫圖片描述 
3.建立應用 
在「企業應用」頁面建立應用 
這裏寫圖片描述c#

注意: 可見範圍必定要添加須要收到報警的人員或部門,不然zabbix報警信息沒法推送到相關人員。api

建立完成以下: 
這裏寫圖片描述微信

至此,微信企業號的配置完成。app

zabbix server端配置

一.微信報警腳本 
默認將腳本放到/usr/local/zabbix/share/zabbix/alertscripts便可,因爲我在腳本中打印日誌,所以請添加權限。工具

#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: yanggd
#date: 2018-04-20
#comment: zabbix接入微信報警腳本

import requests
import sys
import os
import json
import logging

logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/usr/local/zabbix/share/zabbix/alertscripts','weixin.log'),
                filemode = 'a')

corpid='wwbbaxxxxxx'
appsecret='m2HUZXUxxxxxxxxxx'
agentid=1000004
#獲取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']

#發送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[3]

params={
        "touser": touser,
#       "toparty": toparty,
        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
        },
        "safe":0
}

req=requests.post(msgsend_url, data=json.dumps(params))

logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
#添加權限
chmod +x weixin.py
touch weixin.log
chown zabbix.zabbix weixin.log
  • 1
  • 2
  • 3
  • 4

企業號開發文檔請官方文檔企業微信API: 
開始開發 
發送應用消息post

腳本說明: 
1.corpid、appsecret、agentid就是咱們須要從企業號和應用中獲取到的信息,其中.corpid、appsecret用於獲取accesstoken,agentid用於往應用發送消息 
2.因爲zabbix會往腳本中傳入3個參數,分別爲sendto(收件人)、subject(報警主題)、message(報警信息)。這3個參數須要在zabbix中配置,咱們下面會講到。測試

此腳本中咱們沒有接受subject參數,而是直接使用sendto及message參數。 
另經測試添加toparty部門變量後,發現報警信息會重複發送,所以在此註釋掉。 
具體的報警發送信息,咱們經過腳本打印在日誌weixin.log中。

2、zabbix配置 
1.報警媒介類型 
這裏寫圖片描述 
zabbix3.4版本要添加這三個參數,用於發給weixin.py。 
2.添加動做 
事件源選擇「觸發器」,而後「建立動做」 
(1)動做 
這裏寫圖片描述

注意:計算方式」與/或」,當維護狀態非在維護 and 任意一個模板項有問題時,會觸發此動做。 
(2)操做 
這裏寫圖片描述 
「默認信息」就是發送到weixin.py腳本的message 
「操做」能夠定義此動做發送的接收人或接受組

#方便拷貝
Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {TRIGGER.NAME}
Host: {HOST.NAME}
Severity: {TRIGGER.SEVERITY}

Problem description: {ITEM.NAME}:{ITEM.VALUE}
{TRIGGER.URL}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

(3)恢復操做 
這裏寫圖片描述 
此操做就是故障恢復時發送恢復報警信息。

#方便拷貝
Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
Problem name: {TRIGGER.NAME}
Host: {HOST.NAME}
Severity: {TRIGGER.SEVERITY}

Problem description: {ITEM.NAME}:{ITEM.VALUE}
{TRIGGER.URL}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

(4)確認操做 
這裏寫圖片描述 
此操做就是監控人員在zabbix網頁中確認問題並關閉問題後發送的確認信息,這也是3.4版本和某些低版本不一樣的地方。

#方便拷貝
{USER.FULLNAME} acknowledged problem at {ACK.DATE} {ACK.TIME} with the following message:
{ACK.MESSAGE}

Current problem status is {EVENT.STATUS}
  • 1
  • 2
  • 3
  • 4
  • 5

3.給用戶添加報警媒介 
管理–用戶,選擇屬於web_admin組中的一個用戶,而後選擇「報警媒介」-「添加」 
這裏寫圖片描述 
注意:收件人爲企業號-通信錄中成員帳號,是成員的惟一標識。

3、測試 
當上面的幾步操做完成後,咱們先對腳本進行測試。

#最好使用zabbix用戶測試,來排除權限問題
python weixin.py opt test test
#opt爲消息接收帳號
  • 1
  • 2
  • 3

執行完成後,企業號就會收到測試信息,而後再中止某一服務,經過zabbix報警查看微信是否能接收到信息。

weixin.py腳本經過zabbix報警使用的是zabbix用戶,所以請確認腳本及日誌是否具備權限。

微信報警信息以下: 
第一條是報警信息 
第二條是故障恢復信息

這裏寫圖片描述

相關文章
相關標籤/搜索