zabbix 報警方式之 郵件報警(4)


一、為什么要自定義郵件腳本報警?

  靈活,方便。可以自定義過濾信息。

  下面是使用不同方式的郵件報警,一個是利用sendEmail程序來發送報警郵件,第二個是利用python腳本來發送郵件。

二、sendEmail的部署步驟

  1.官方介紹:http://caspian.dotconf.net/menu/Software/SendEmail/

  2.先下載安裝包到本地,解壓。

[root@zabbix-6 ~]# wget -c http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@zabbix-6 ~]# tar zxf sendEmail-v1.56.tar.gz
[root@zabbix-6 ~]# cd sendEmail-v1.56
[root@zabbix-6 sendEmail-v1.56]# cp -a sendEmail /usr/local/bin/
[root@zabbix-6 sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
[root@zabbix-6 sendEmail-v1.56]# file /usr/local/bin/sendEmail
/usr/local/bin/sendEmail: a /usr/bin/perl -w script text executable

  3.看下sendemail命令的幫助信息

[root@zabbix-6 sendEmail-v1.56]# /usr/local/bin/sendEmail 

sendEmail-1.56 by Brandon Zehm <caspian@dotconf.net>

Synopsis:  sendEmail -f ADDRESS [options]

  Required:
    -f ADDRESS                from (sender) email address
    * At least one recipient required via -t, -cc, or -bcc
    * Message body required via -m, STDIN, or -o message-file=FILE

  Common:
    -t ADDRESS [ADDR ...]     to email address(es)
    -u SUBJECT                message subject
    -m MESSAGE                message body
    -s SERVER[:PORT]          smtp mail relay, default is localhost:25

  Optional:
    -a   FILE [FILE ...]      file attachment(s)
    -cc  ADDRESS [ADDR ...]   cc  email address(es)
    -bcc ADDRESS [ADDR ...]   bcc email address(es)
    -xu  USERNAME             username for SMTP authentication
    -xp  PASSWORD             password for SMTP authentication

  Paranormal:
    -b BINDADDR[:PORT]        local host bind address
    -l LOGFILE                log to the specified file
    -v                        verbosity, use multiple times for greater effect
    -q                        be quiet (i.e. no STDOUT output)
    -o NAME=VALUE             advanced options, for details try: --help misc
        -o message-content-type=<auto|text|html>
        -o message-file=FILE         -o message-format=raw
        -o message-header=HEADER     -o message-charset=CHARSET
        -o reply-to=ADDRESS          -o timeout=SECONDS
        -o username=USERNAME         -o password=PASSWORD
        -o tls=<auto|yes|no>         -o fqdn=FQDN


  Help:
    --help                    the helpful overview you're reading now
    --help addressing         explain addressing and related options
    --help message            explain message body input and related options
    --help networking         explain -s, -b, etc
    --help output             explain logging and other output options
    --help misc               explain -o options, TLS, SMTP auth, and more

  4.安裝下依賴

[root@zabbix-6 sendEmail-v1.56]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y

  5.簡單的報警腳本,腳本來自群內一位大神:@東南:http://ywwd.net/read-866

[root@zabbix-6 sendEmail-v1.56]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-6 alertscripts]# cat mail.sh 
#!/bin/bash

To=$1
Subject=$2
Body=$3

/usr/local/bin/sendEmail -f [發送者地址] -t "$To" -s [你的smtp服務器地址] -u "$Subject" -xu [smtp驗證登陸名] -xp [你的郵箱密碼] -m "$Body"
 2>&1 >>/var/log/sendEmail.lo

  編輯完成后,給腳本權限

[root@zabbix-6 alertscripts]# chmod +x mail.sh
[root@zabbix-6 alertscripts]# chown zabbix.zabbix /var/log/sendEmail.log
[root@zabbix-6 alertscripts]# chown zabbix.zabbix mail.sh

  6.腳本編輯好后,在zabbix 登陸界面進行設置。

    注意:zabbix 3.0 需要在為alert腳本定義參數,以前的版本參數都固定的,現在用戶可以自己定義命令行的參數了。添加的參數也就是腳本中的$1、$2、$3等。

添加方法:Administration-->Media types,增加如下參數
   添加媒介:


  添加完成后,需要關聯到報警用戶Administration-->Users-->Media-->add

  添加動作,觸發條件后報警后發送郵件。Configuration-->Actions-Event source(Triggers)-Create action-

設置了60秒,接收消息組,接受消息用戶,以及報警介質。

模擬下,把其中一個zabbix-agent 服務關掉

 

三、第二種報警方式直接利用python腳本   腳本出自ITnihao:https://github.com/itnihao/zabbix-book

 

#!/usr/bin/python 
#coding:utf-8 
#author: itnihao
#mail: itnihao@qq.com
#url: https://github.com/itnihao/zabbix-book/edit/master/06-chapter/zabbix_sendmail.py

import smtplib
from email.mime.text import MIMEText
import os
import argparse
import logging
import datetime

mail_host = 'smtp服務器'
mail_user = '賬號'
mail_pass = '密碼'
mail_postfix = '郵局'


def send_mail(mail_to,subject,content):
    me = mail_user+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content)
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = mail_to
    global sendstatus
    global senderr

    try:
        smtp = smtplib.SMTP()
        smtp.connect(mail_host)
        smtp.login(mail_user,mail_pass)
        smtp.sendmail(me,mail_to,msg.as_string())
        smtp.close()
        print 'send ok'
        sendstatus = True
    except Exception,e:
        senderr=str(e)
        print senderr
        sendstatus = False

def logwrite(sendstatus,mail_to,content):
    logpath='/var/log/zabbix/alert'

    if not sendstatus:
        content = senderr

    if not os.path.isdir(logpath):
        os.makedirs(logpath)

    t=datetime.datetime.now()
    daytime=t.strftime('%Y-%m-%d')
    daylogfile=logpath+'/'+str(daytime)+'.log'
    logging.basicConfig(filename=daylogfile,level=logging.DEBUG)
    os.system('chown zabbix.zabbix {0}'.format(daylogfile))
    logging.info('*'*130)
    logging.debug(str(t)+' mail send to {0},content is :\n {1}'.format(mail_to,content))


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Send mail to user for zabbix alerting')
    parser.add_argument('mail_to',action="store", help='The address of the E-mail that send to user ')
    parser.add_argument('subject',action="store", help='The subject of the E-mail')
    parser.add_argument('content',action="store", help='The content of the E-mail')
    args = parser.parse_args()
    mail_to=args.mail_to
    subject=args.subject
    content=args.content

    send_mail(mail_to,subject,content)
    logwrite(sendstatus,mail_to,content)

  將腳本放在/usr/lib/zabbix/alertscripts目錄下。並賦予執行權限,屬主改為zabbix,之后添加媒介,關聯動作,和上面添加步驟基本一樣。

本文章屬於本作者原創,遵循開源協議,如有轉載,請注明本鏈接的源地址。謝謝    繼續更新中!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM