一、為什么要自定義郵件腳本報警?
靈活,方便。可以自定義過濾信息。
下面是使用不同方式的郵件報警,一個是利用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,之后添加媒介,關聯動作,和上面添加步驟基本一樣。
本文章屬於本作者原創,遵循開源協議,如有轉載,請注明本鏈接的源地址。謝謝 繼續更新中!!
