1. 程式人生 > >Zabbix3.0郵件告警配置

Zabbix3.0郵件告警配置

概述

最近在部署除錯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個引數。
    Create Media type

新增收件人

Administration -> User -> 選擇使用者 -> Media -> Add
type選擇新建的指令碼媒體名稱,recipient填寫收件人郵箱地址
add recipient 1
add recipient 2

配置報警動作

Configuration -> Action -> Create action
create action

測試

停掉client節點的zabbix-agent服務,等待郵件報警。預設agent發郵件是5分鐘,即5次沒有獲取到資料則報警。