一,zabbix 郵件報警設置
原理:觸犯告警器以後 能夠配置相應的動做,在動做裏能夠發郵件、微信、釘釘、短信等。
告警腳本的放置位置見配置/usr/local/zabbix/etc/zabbix_server.conf python
LogFile=/usr/local/zabbix/zabbix_server.log DBHost=127.0.0.1 DBName=zabbix DBUser=zabbix DBPassword=zabbixpwd DBPort=3306 Timeout=30 AlertScriptsPath=/usr/local/zabbix/alertscripts ##觸發腳本放置位置 ExternalScripts=/usr/local/zabbix/externalscripts LogSlowQueries=3000
python 郵件發送腳本web
/usr/local/zabbix/alertscripts/zabbix_sendmail.py #!/usr/bin/python # -*- coding: utf-8 -*- from email.mime.text import MIMEText from email.header import Header from smtplib import SMTP_SSL import sys smtpaddr = 'smtp.qq.com' myemail='327627448@qq.com' ##發送郵件的QQ password='mypassword' ##填寫登錄客戶端的受權碼,在郵箱裏生成同時須要打開POP3,IMAP服務 #f = open('/usr/local/zabbix/.passwd','r') #password = f.readline().strip() recvmail=sys.argv[1] ##發送郵件給誰 subject=sys.argv[2] ## 發送的主題 content=sys.argv[3] ##發送的內容 msg = MIMEText("""%s"""%(content), "plain", "utf-8") ##發送的內容 msg['Subject'] = Header(subject, 'utf-8').encode() msg['From'] = myemail msg['To'] = recvmail try: smtp = SMTP_SSL( smtpaddr ) smtp.login(myemail, password) smtp.sendmail(myemail, recvmail.split(','), msg.as_string()) smtp.quit() print("success") except Exception as e: print("fail: "+str(e)) ##增長執行權限,測試腳本是否運行正常能發送郵件 /usr/local/zabbix/alertscripts/zabbix_sendmail.py 1065236572@qq.com 'zabbix disk' 'content: disk > 90%'
2,報警媒介設置郵件告警json
腳本放置的名字,注意是放置在/usr/local/zabbix/alertscripts 目錄下,添加三個接受的參數,發送給誰,主題是什麼,內容是什麼 這地方須要添加三個參數
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}vim
添加須要發送的用戶媒介設置api
發送執行的腳本,發送給誰,時間,級別,有多個 以逗號隔開微信
建立觸發器動做 在模板或者主機裏app
設置觸發器觸發以後的動做(action)
出問題發送的內容 用戶,執行的腳本curl
故障恢復以後動做 發送一封恢復的郵件ide
二,告警內容自定義和告警抑制
在報警內容加上自定義內容參數host.name host ip1
Default operation step duration 觸發後的操做時間, 經過下面的steps 來實現操做抑制,例如 上面設置30s
步驟 4-4 那麼 在4次步驟 4*30 2分鐘以後才發送報警郵寄post
三,微信告警
註冊建立企業微信
在管理後臺添加自建應用
建立好後 獲取企業微信的agentid和secrct 填寫於腳本
跟郵件同樣 在一樣位置添加微信報警腳本
vim /usr/local/zabbix/alertscripts/zabbix_wx.py #!/usr/bin/python # -*- coding: utf-8 -*- import json import sys import urllib,urllib2 agentid = 'xxx' ###微信自建應用ID corpid = 'xxx' ###微信企業ID 在個人企業裏面查看 corpsecret = 'xxx' ### 微信自建應用secret #get tocken gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret token_file = urllib2.urlopen(gettoken_url) token_data = token_file.read().decode('utf-8') token_json = json.loads(token_data) my_token = token_json['access_token'] #send wechart touser=sys.argv[1] #many user: 'zhangsan|wangwu' content=sys.argv[2] #content post_content = { "touser":touser, "agentid":agentid, "msgtype": "text", "text":{ "content":content, } } json_content = json.dumps(post_content) url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + my_token response = urllib2.urlopen(url,json_content) print(response.read().decode('utf-8')) ##測試 /usr/local/zabbix/alertscripts/zabbix_wx.py '通信錄裏面的微信名' 'disk is not enough'
添加 建立2個變量 發送給誰 發送的內容
報警以後的action(注意更改發送的腳本名稱)
user添加 注意填寫發送名稱,還有報警級別
四:釘釘告警
釘釘告警跟微信告警相似
告警腳本/usr/local/zabbix/alertscripts/
###告警機器人腳本 ###安裝pip,安裝request模塊 yum -y install epel-release yum -y install python-pip pip install requests #!/usr/bin/env python import json import requests import sys def send_msg(url, remiders, msg): headers = {'Content-Type': 'application/json; charset=utf-8'} data = { "msgtype": "text", "at": { "atMobiles": remiders, "isAtAll": False, }, "text": { "content": msg, } } r = requests.post(url, data=json.dumps(data), headers=headers) return r.text if __name__ == '__main__': msg = sys.argv[1] remiders = [] url = '告警機器人webrooturl' print(send_msg(url, remiders, msg))
相關配置參數(發送用戶填寫admin便可)
釘釘工做通知告警腳本
#!/usr/bin/python # -*- coding: utf-8 -*- #curl 'https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx' import json,urllib2,sys appkey = '釘釘自建應用查看' appsecret = '釘釘自建應用查看' agentid = 釘釘自建應用查看' touser = sys.argv[1] content = sys.argv[2] tockenurl = 'https://oapi.dingtalk.com/gettoken?corpid=' + appkey + "&corpsecret=" + appsecret tockenresponse = urllib2.urlopen(tockenurl) tockenresult = json.loads(tockenresponse.read().decode('utf-8')) tocken = tockenresult['access_token'] sendurl = 'https://oapi.dingtalk.com/message/send?access_token=' + tocken headers = { 'Content-Type':'application/json' } main_content = { "touser": touser, "toparty": "", "agentid": agentid, "msgtype": "text", "text": { "content": content } } main_content = json.dumps(main_content) req = urllib2.Request(sendurl,headers=headers) response = urllib2.urlopen(req, main_content.encode('utf8')) print(response.read().decode('utf-8')) ##測試 /usr/local/zabbix/alertscripts/zabbix_dd.py 填寫釘釘用戶ID 'disk > 90%'