zabbix4.0-告警:配置郵件告警(Python指令碼)
前言:
1.測試環境中使用的是QQ郵箱。
2.關於指令碼中的郵件資訊配置,其實是Linux是借用第三方的郵箱賬號(即你配置的賬號),來發送郵件到指定郵箱。
3.但是使用它(指令碼)傳送郵箱還需要這個賬號的授權碼,以及對應的smtp有伺服器地址,然後才可以使用該郵箱傳送郵件。這也是為什麼這個授權碼讓你好好保管的原因,因為讓別人知道授權碼的話,只需要郵箱賬號,就可以使用你的郵箱號去傳送郵件了。
4.關於QQ郵箱POP3 和 SMTP 伺服器地址設定如下:
POP3伺服器地址為“pop.qq.com”,SMTP伺服器地址為“smtp.qq.com”
1、SMTP伺服器需要身份驗證。
2、如果是設定POP3和SMTP的SSL加密方式,則埠如下:
1)POP3伺服器(埠995);
2)SMTP伺服器(埠465或587)。
開始搭建
一、使用QQ郵箱,開啟“POP3/SMTP服務”。
網站登入qq郵箱,進入你的QQ郵箱介面,點選 "設定--->賬戶" 選項,然後下拉到該服務。
這裡我已經開啟,如果沒有開啟的小夥伴,點選POP3/SMTP服務的右邊開啟選項,會讓你使用手機發送簡訊,然後步驟操作完後,會出現一個給你授權碼的介面:如圖
至此,授權碼申請成功。
你的qq郵箱賬號,及授權碼,還有qq郵箱發郵件的smtp地址,都已知道。
二、在zabbix_server上設定指令碼資訊
①在zabbix_server伺服器上,開啟指令碼選項:
#vim /opt/zabbix/etc/zabbix_server.conf ...... AlertScriptsPath=/opt/zabbix/alertscripts 然後建立目錄 #mkdir /opt/zabbix/alertscripts #chown -R zabbix:zabbix /opt/zabbix/alertscripts 然後重啟zabbix_server服務 #systemctl restart zabbix_server.service
②然後到/opt/zabbix/alertscripts目錄下編寫python指令碼。
#vim /opt/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' qq郵箱的smtp地址 myemail='借用的qq郵箱賬號' password='借用的qq郵箱賬號的授權碼' 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))
③先測試zabbix_sendmail.py指令碼是否可以通過命令正常傳送郵件。若成功,則到zabbix_web介面進行後續的配置。若失敗,則檢查指令碼是否編寫錯誤。
根據python指令碼中的三個引數 recvmail=sys.argv[1] 接收人 subject=sys.argv[2] 主題 content=sys.argv[3] 內容 執行命令(即後續引數1:接收人。引數2:主題。引數3:郵件內容) #/opt/zabbix/alertscripts/zabbix_sendmail.py [email protected] 'zabbix disk' 'content: sssdisk > 90%'
執行後檢視結果(根據指令碼內容:成功,則返回success資訊)
④至此,指令碼可以成功傳送郵件,然後到zabbix_web上配置告警。
三、zabbix_web上配置告警
①選中管理----->報警媒介型別,然後建立媒介型別,如圖,建立完畢後,點選更新。
這三個引數,其中"ALTER.SENDTO"在使用者傳送郵件通知時配置接收人地址。"ALTER.SUBJECT"和"ALTER.MESSAGE"引數在配置"觸發器動作"時,配置具體資訊。
②點選管理---->使用者,可以理解為配置"sendto"。選擇使用拿個使用者傳送資訊。如圖選擇Admin,然後選擇"報警媒介"選單
③點選配置---->動作---->選擇事件源為觸發器,建立動作,選擇動作:
然後選擇"操作"頁面:即告警操作
其中訊息內容為:
SUBJECT內容:故障{TRIGGER.STATUS},伺服器名:{HOSTNAME1}發生: {TRIGGER.NAME}故障!
MESSAGE內容:
{
告警主機:{HOSTNAME}
告警主機IP地址:{HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
}
關於操作步驟:如圖
然後再編輯"恢復操作",如圖:
然後點選更新。建立好動作。至此,郵件報警設定完成。
四、故障實驗驗證:
Linux_agent端執行該命令,讓根目錄磁碟為100%:#dd if=/dev/zero of=/root/a.txt bs=512M count=500
然後等待報警:web頁面,監測--->》儀表盤
然後檢視qq郵箱:
郵件內容檢視
然後消除報警後,檢視恢復狀態:如圖
支此,郵件報警順利搭建成功。