zabbix默認自帶郵件告警,可是很很差用。
通常咱們使用smtp告警郵件,配置告警郵件腳本,發送到smtp郵箱服務器進行轉發,而後發送到告警用戶的郵箱中,完成郵件告警,如阿里郵箱,騰訊郵箱等。
前提zabbix可以訪問外網,同時stmp郵箱已經配置完整
使用python腳本做爲郵件。zabbix的告警腳本目錄默認在/usr/lib/zabbix/alertscripts/路徑下python
#!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import parseaddr, formataddr import sys def formatAddr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr)) def send_mail(to_list,subject,content): mail_host = 'smtp.mxhichina.com' #smtp郵件服務器地址 mail_user = 'alert.xxxx@chucloud.com.cn' #smtp告警郵箱帳戶 mail_pass = 'xxxxxxxxx' # smtp告警郵箱密碼 #以上內容根據你的實際狀況進行修改 msg = MIMEText(content,'plain','utf-8') msg['Subject'] = Header(subject, 'utf-8').encode() msg['From'] = formatAddr('zabbix監控 <%s>' % mail_user).encode() msg['to'] = to_list try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(mail_user,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3]) #例:./sendmail_zabbix.py yangchao@chucloud.com.cn 測試 測試
腳本思路:
一、使用smtp模塊,使用方法參考官方模塊手冊
二、構建send_mail函數,使用三個參數,分別指定爲郵件發送人,標題,內容
三、send_mail函數定義了smtp郵箱的帳戶密碼信息
三、使用sys模塊的os方法,傳遞參數進行測試web
保存腳本名稱爲sendmail_zabbix.pyjson
在zabbix「管理-報警媒介類型」中,建立一個告警郵件腳本,名稱就是sendmial_zabbix.py
詳細按照以下配置
而後配置動做
動做信息按照以下配置
c#
具體的信息格式以下,能夠自定義api
告警主機:{HOSTNAME1} 告警時間:{EVENT.DATE} {EVENT.TIME} 告警等級:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警項目:{TRIGGER.KEY1} 問題詳情:{ITEM.NAME}:{ITEM.VALUE} 當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
而後對須要接收郵件告警的zabbix用戶分配報警媒介
服務器
而後就能夠天天半夜收到郵件告警了
app
還睡覺?,起來幹活!ide
郵件告警最大的問題就是郵件太多,很差及時判斷
最好的方法就是釘釘告警函數
首先你得有釘釘
其次你得有配置一個機器人
詳細的釘釘配置機器人的辦法能夠詢問百度或者看
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
這裏是我添加的機器人,重點是webhook,每一個機器人惟一
post
這裏仍是使用python腳本,保存在usr/lib/zabbix/alertscripts/路徑下
#!/usr/bin/python # -*- coding: utf-8 -*- #zabbix上使用釘釘告警機器人,調用api腳本 import requests import json import sys import os headers = {'Content-Type': 'application/json;charset=utf-8'} #定義json http頭部信息 api_url = "https://oapi.dingtalk.com/robot/send?access_token=b5924a81e21921256eb22154b7614512a2ca6e4815bda7de2fed0b59bf03cf89" #這裏的url是釘釘機器人的api url def msg(text): #定義函數msg,參數爲txt json_text= { #定義json_text字典內容 "msgtype": "text", "text": { "content": text }, } print requests.post(api_url,json.dumps(json_text),headers=headers).content #將字典信息序列化爲json格式發送 if __name__ == '__main__': #主函數 text = sys.argv[1] #傳入zabbix定義動做參數,已經在zabbix告警動做中配置 msg(text) #調用msg (text)函數
保存名稱爲dingding.py。腳本完成了
首先再zabbix用戶中,建立一個用戶,該用戶做爲釘釘機器人消息發送使用
而後再報警媒介類型建立腳本
按照以下配置
參數格式爲
{ALERT.MESSAGE}
而後再配置動做,定義發送的告警方式
詳細配置以下
定義告警級別
定義操做
信息內容推薦按照以下配置
告警主機:{HOST.NAME} 告警地址:{HOST.IP} 監控項目:{ITEM.NAME} 監控取值:{ITEM.LASTVALUE} 告警等級:{TRIGGER.SEVERITY} 當前狀態:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警時間:{EVENT.DATE} {EVENT.TIME} 事件ID:{EVENT.ID}
好了,如今就能夠看到釘釘告警了
天天沒事釘釘催你幹活
真TM是老闆爽我就爽,老闆不爽我下崗
有時候,我也沒事調下老闆
這不就是AI嘛~