首頁>技術>

眾所周知,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,需要列表帶有自身郵箱才行。這個需要自己實際測試才知道,我這邊的環境也不一樣,如果在使用中有任何問題可以諮詢我或者留言。

15
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python爬取網頁速度為什麼那麼快?它是透過什麼去爬取的?