Zabbix3.0郵件告警配置
阿新 • • 發佈:2018-12-24
概述
最近在部署除錯zabbix3.0監控系統,郵件告警是監控系統中必不可少的一部分,下面就來談談通過自定義指令碼的方式來給zabbix3.0配置郵件告警。
安裝環境
- zabbix server版本為3.0.3,使用rpm包方式安裝
- 使用官方rpm包方式安裝的zabbix server本身不支援SMTP authentication1
- 系統版本
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.3 (Santiago)
編寫指令碼
在這裡我們使用一個簡單的python指令碼來實現傳送郵件的功能。
指令碼如下:sendmail.py 2
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
# configure your own parameters here
mail_host = 'smtp.xxxx.com'
mail_user = '[email protected]'
mail_pass = 'xxxxx'
mail_postfix = 'xxxx.com'
def send_mail(to_list,subject,content):
me = mail_user+"<" +mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, 'plain', 'utf-8')
# 必須使用'utf-8'引數,否則預設為us-ascii, 在部分郵件客戶端中文會顯示為亂碼
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,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])
注意:
- s.sendmail(me,to_list,msg.as_string())中的me變數需為一個[email protected]格式的完整郵箱地址,否則我公司smtp伺服器會退信,報錯:
DELIVERY FAILURE: Error transferring to 132.228.xxx.xxx; SMTP Protocol Returned a Permanent Error 555 Syntax error
- 類似的python3指令碼4還有許多,也有用linux系統下的mutt5和mail6程式實現的shell指令碼
修改配置檔案
- 修改zabbix_server.conf 中的這一行:
AlertScriptsPath=/etc/zabbix/alertscripts
該目錄應為發郵件指令碼所在目錄 - 重啟zabbix server使配置生效
service zabbix-server restart
新建媒體型別
- 在Zabbix Web頁面下,Administration -> Media Type -> Create media type
- 輸入指令碼名稱,型別選擇Script
- Zabbix3.0新加了指令碼引數功能,因此Script Parameter欄目必須填寫,一般為:
{ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE}
分別為指令碼需要的3個引數:收件人地址、主題、詳細內容 - 很多人安Zzabbix3.0之後,寫的指令碼一直髮信不成功,手動執行時可以的。這是因為Zabbix3.0之後,可以自定義引數了。所以不寫引數,它是不會傳引數的。在2.x版本不存在這個問題,預設會傳3個引數。
新增收件人
Administration -> User -> 選擇使用者 -> Media -> Add
type選擇新建的指令碼媒體名稱,recipient填寫收件人郵箱地址
配置報警動作
Configuration -> Action -> Create action
測試
停掉client節點的zabbix-agent服務,等待郵件報警。預設agent發郵件是5分鐘,即5次沒有獲取到資料則報警。