1. 程式人生 > 其它 >zabbix4.0-告警:配置郵件告警(Python指令碼)

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郵箱:

郵件內容檢視

然後消除報警後,檢視恢復狀態:如圖

支此,郵件報警順利搭建成功。