以前一直調用飛信接口發送告警信息,最近購買了第三方短信接口。因此準備使用接口發送告警。
python
短信接口是基於https的摘要認證。https認證仍是本身作的,調用接口的時候還須要load證書。感受超級難用,無論那麼多,先讓它跑起來再說。廢話很少說,先上代碼。json
#!/usr/bin/env python #coding:utf-8 import requests from requests.auth import HTTPDigestAuth import json import argparse def sendSms(mobile, content, name): url = 'https://api.david.com/sms/messages' chal = { 'algorithm': 'MD5', 'cnonce': '015b38c9119bbda5', 'content-type': 'application/json', 'nc': '00000001', 'nonce': '1389832695:d3c620a9e645420228c5c7da7d228f8c', 'qop': 'auth', 'realm': 'api.david.com', 'response': '07f0d429dffed172f4751ecadd02e68e', 'uri': '/sms/messages', 'username': '+lw4CNmllLo='} try: data = {"mobile_numbers":[{"mobile":mobile, "name":name}],"content":content} except: data = {"mobile_numbers":[{"mobile":"xxxxxxxxxxx", "name":name}],"content":content} #使用requests post數據給服務器端 #由於https證書是第三方本身造的,因此須要導入他們給的pem證書。 r = requests.post(url, auth=HTTPDigestAuth('+lw4CNmllLo=', 'qmc7pMiSrQXo7Q+lx/6c0A=='), verify='/etc/zabbix/alertscripts/david.com.pem', headers=chal, data=json.dumps(data)) return r.text if __name__ == "__main__": #mobile 接收信息的電話號碼 #name 標題 #content 發送內容 parser = argparse.ArgumentParser(description='Send sms to user for zabbix alerting') parser.add_argument('mobile',action="store", help='The address of the sms that send to user ') parser.add_argument('name',action="store", help='The subject of the sms') parser.add_argument('content',action="store", help='The content of the sms') args = parser.parse_args() mobile=args.mobile name=args.name content=args.content logger = mobile+' '+name+' '+content sendSms(mobile, content, name) #注意: #1. 腳本全部者爲zabbix:zabbix #2. 腳本須要有可執行權限
發送sms告警的腳本已經完成。接下來配置zabbix,使其能夠使用該腳本發送短信。api
首先須要建立一個告警"media":服務器
建立一個"action",指定用戶進行關聯。當該「action」觸發,發送告警。ide
zabbix已經配置好了,接下來能夠將一臺設備某一項監控項宕掉。觀察是否會觸發trigger,發送告警短信。post
因爲時間比較緊,腳本寫的比較簡單,後期還須要完善。 url