本文配置步驟:php
https://work.weixin.qq.com/api/doc#10013html
第一個要記錄的值:部門ID:1python
選擇企業應用golang
選擇建立應用json
自定義填c#
建立應用後退出,點擊剛纔建立的應用進入api
記錄下這兩個值:AgentId、Secret服務器
而後選擇企業微信
記錄值:CorpIdapp
能夠使用企業微信的API接口測試一下
http://work.weixin.qq.com/api/devtools/devtool.php
返回值以下即爲OK,能夠寫腳本引用
告警腳本:(此腳本針對部門ID發送,添加後臺應用選擇哪些人可見而後哪些人就能夠收到告警了,若是新增一個應用,就copy這個代碼到另外一個腳本修改corpid就能夠了)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
class WeChat(object):
__token_id = ''
# init attribute
def __init__(self,url):
self.__url = url.rstrip('/')
self.__corpid = 'xxx' #這裏修改企業id
self.__secret = 'xxx-xxx' #這裏修改告警應用secretid
# Get TokenID
def authID(self):
params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
data = urllib.urlencode(params)
content = self.getToken(data)
try:
self.__token_id = content['access_token']
print content['access_token']
except KeyError:
raise KeyError
# Establish a connection
def getToken(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'gettoken?'
try:
response = urllib2.Request(url + data)
except KeyError:
raise KeyError
result = urllib2.urlopen(response)
content = json.loads(result.read())
return content
# Get sendmessage url
def postData(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
request = urllib2.Request(url,data)
try:
result = urllib2.urlopen(request)
except urllib2.HTTPError as e:
if hasattr(e,'reason'):
print 'reason',e.reason
elif hasattr(e,'code'):
print 'code',e.code
return 0
else:
content = json.loads(result.read())
result.close()
return content
# send message
def sendMessage(self,touser,message):
self.authID()
data = json.dumps({
'totag':touser,
'msgtype':"text",
'agentid':"2", ##這裏修改告警應用id
'text':{
'content':message
},
'safe':"0"
},ensure_ascii=False)
response = self.postData(data)
print response
if __name__ == '__main__':
a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
a.sendMessage(sys.argv[1],sys.argv[3])
測試發送:python zabbix_weixin.py "1" "test" "test"
測試沒有問題,開始配置zabbix
選擇建立用戶
添加報警媒介
權限能夠看狀況分配,我這本身用能夠給大一點
選擇報警媒介類型
建立媒體類型 別忘點「更新」
選擇配置-動做
建立動做
默認接收人:
告警 {TRIGGER.NAME} 時間: {EVENT.DATE} {EVENT.TIME} 內容: 1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
Recovery operations
默認接收人:
恢復 {TRIGGER.NAME} 時間: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME} 內容: 1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
將zabbix_server的agent關閉看是否報警,而後再啓動看是否有恢復通知
釘釘告警同樣,下載千思網 的釘釘告警腳本。拉釘釘羣聊,添加機器人記錄地址
https://www.qiansw.com/golang-zabbix-alter-to-dingding.html
告警xml內容
<?xml version="1.0" encoding="UTF-8" ?><root> <from>{HOSTNAME1}</from> <time>{EVENT.DATE} {EVENT.TIME}</time> <name>{TRIGGER.NAME}</name> <key>{TRIGGER.KEY1}</key> <value>{ITEM.VALUE}</value> <now>{ITEM.LASTVALUE}</now> <id>{EVENT.ID}</id> <ip>{HOST.IP}</ip> <url>這裏是點擊報警消息能夠訪問的連接地址</url> <age>{EVENT.AGE}</age> <status>{EVENT.STATUS}</status> <acknowledgement> {EVENT.ACK.STATUS} </acknowledgement><acknowledgementhistory> {EVENT.ACK.HISTORY}</acknowledgementhistory></root>
恢復內容
{TRIGGER.STATUS}: {TRIGGER.NAME} <?xml version="1.0" encoding="UTF-8" ?><root> <from>{HOSTNAME1}</from> <time>{EVENT.DATE} {EVENT.TIME}</time> <name>{TRIGGER.NAME}</name> <key>{TRIGGER.KEY1}</key> <value>{ITEM.VALUE}</value> <now>{ITEM.LASTVALUE}</now> <id>{EVENT.ID}</id> <ip>{HOST.IP}</ip> <color>FF4A934A</color> <url>這裏的url會替換報警媒介的url</url> <age>{EVENT.AGE}</age> <recoveryTime>{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}</recoveryTime> <status>{EVENT.RECOVERY.STATUS}</status> </root>
其餘調用釘釘機器人告警
#conding=utf-8 ## -- coding:UTF-8 -- import requests import json import time,datetime import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password): mail_msg = MIMEMultipart() if not isinstance(subject,unicode): subject = unicode(subject, 'utf-8') mail_msg['Subject'] = subject mail_msg['From'] = fromaddr mail_msg['To'] = ','.join(toaddrs) mail_msg.attach(MIMEText(msg, 'html', 'utf-8')) try: s = smtplib.SMTP() s.connect(smtpaddr) #鏈接smtp服務器 s.login(fromaddr,password) #登陸郵箱 s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #發送郵件 s.quit() except Exception,e: print "Error: unable to send email" def msg(text): json_text = { "msgtype": "text", "at": { "atMobiles": [ "11111" ], "isAtAll": False }, "text": { "content": text } } print(requests.post(api_url, json.dumps(json_text), headers=headers).content) if __name__ == '__main__': ''' https://oapi.dingtalk.com/robot/send?access_token=xxx ''' #釘釘發送 #token = "xxx" token = "xxx" date = datetime.datetime.now().strftime('%Y-%m') text = "xxx" % date headers = {'Content-Type': 'application/json;charset=utf-8'} api_url = "https://oapi.dingtalk.com/robot/send?access_token=%s" % token msg(text)