眾所周知,Zabbix有很多告警方式,郵件作為最原始留檔的一種方式,也是最基礎的,在告警體系裡也是應該掌握的一種方式,因為這種方式甚至都不需要機器訪問外網(自有郵件伺服器)就可以實現。在以往的zabbix版本,自帶的php mail會導致zabbix server服務異常重啟,在5.0之後就已經解決了,所以既可以傻瓜式,也可以指令碼化實現,之前我翻閱過大部分的這方面的文章,sh指令碼基本透過mailx這種方式,雖然這種方式也可以,但是還有多多少少有點缺陷,所以今天帶來兩種方式,分別是zabbix原生和基於Python。
正文環境
Zabbix版本為5.2.3,Python版本為2.7.
指令碼內容
#!/usr/bin/python2#coding:utf-8import smtplibfrom email.mime.text import MIMETextimport sysmail_host = 'xxxxxxxxx' #######郵箱servermail_user = 'xxxxxxxxx' #####不要帶字尾mail_pass = 'xxxxxxxxxx' ####此處為您的密碼或授權碼mail_postfix = 'yeah.net'def send_mail(to_list,subject,content): me = "Zabbix"+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_listtry: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close()return Trueexcept Exception as e:print ('Exception',e)return Falseif __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
指令碼使用注意
本指令碼只需要改mail_host,mail_user,mail_pass,mail_postfix,me部分,預設使用smtp 25埠。
指令碼存放位置
在Zabbix server配置檔案裡檢視AlertScriptsPath根目錄,並將指令碼放入,修改許可權及所屬者。
chown zabbix:zabbix mail.pychmod +x mail.py
查詢告警指令碼存放目錄
修改許可權及所屬者
郵箱配置(以網易為例)
開啟設定
傳送簡訊完成後獲取到授權碼,該碼為密碼
找到伺服器地址(主要是smtp伺服器地址)
修改指令碼檔案
修改以下幾處,mail_host,mail_user,mail_pass,mail_postfix(mail_postfix比較特殊,為@字尾名,舉個例子,[email protected],該字尾為@zabbix.com)。
修改指令碼檔案
測試指令碼
./mail.py
執行完成之後發現報錯
該報錯為python2沒有安裝,所以需要安裝python2
安裝python2
建立告警媒介
告警媒介填寫
型別為指令碼
傳遞值為{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}
填寫告警媒介內容
填寫使用者媒介內容
建立動作,哪些主機需要告警
填寫操作內容,呼叫指令碼
建立測試主機,採用ICMP模板
效果
效果1
效果2
部分朋友反應採用阿里雲機器會封25號埠,所以建議採用SSL(465埠)
需要將s=smtplib.SMTP()改為s = smtplib.SMTP_SSL(mail_host,465)
改為SSL連線
Zabbix原生方式在告警媒介裡選擇Email,填寫相關資訊
測試正常
效果正常
由於篇幅有限,就不再做一遍
總結從整體測試情況來看,網際網路的免費郵箱多多少少有點問題,建議採用企業郵箱,目前是qq郵箱要更友好一點,網易郵箱多多少少都會存在一些傳送的問題,例如543,需要列表帶有自身郵箱才行。這個需要自己實際測試才知道,我這邊的環境也不一樣,如果在使用中有任何問題可以諮詢我或者留言。