zoukankan      html  css  js  c++  java
  • 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 :
     {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,之后添加媒介,关联动作,和上面添加步骤基本一样。

    本文章属于本作者原创,遵循开源协议,如有转载,请注明本链接的源地址。谢谢    继续更新中!!

  • 相关阅读:
    【LeetCode-树】二叉搜索树中第K小的元素
    【机器学习-评估方法】模型评估方法
    【LeetCode-树】二叉搜索树的最小绝对差
    【LeetCode-树】检查平衡性
    【LeetCode-树】验证二叉搜索树
    【LeetCode-回溯/动态规划】不同路径
    Vue——风格指南
    潜在危险
    渲染HTML的方式
    Vue——状态管理
  • 原文地址:https://www.cnblogs.com/hanyifeng/p/5366855.html
Copyright © 2011-2022 走看看