分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署
前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~
由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这种方式!
这里,针对zabbix报警信息的发送,可以采用下面两种方式中的任意一种:
1)利用sendEmail程序来发送报警邮件.sendEmail是一个轻量级,命令行的SMTP邮件客户端,非常完美,使用简单并且功能强大.这个被设计用在php、bash 、perl和web站点使用。
2)利用python脚本来发送邮件
一、利用sendemail发送报警邮件
1)先下载安装包到本地,解压。
[root@Zabbix-server ~]# cd /usr/local/src/
[root@Zabbix-server src]# wget -c http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@Zabbix-server src]# tar -zvxf sendEmail-v1.56.tar.gz
[root@Zabbix-server src]# cd sendEmail-v1.56
[root@Zabbix-server sendEmail-v1.56]# cp -a sendEmail /usr/local/bin/
[root@Zabbix-server sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
[root@Zabbix-server sendEmail-v1.56]# file /usr/local/bin/sendEmail
/usr/local/bin/sendEmail: a /usr/bin/perl -w script text executable
#查看sendemail的帮助信息
[root@Zabbix-server src]# cd sendEmail-v1.56
[root@Zabbix-server 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
2)安装下依赖
[root@Zabbix-server sendEmail-v1.56]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y
[root@Zabbix-server sendEmail-v1.56]# /usr/local/bin/sendEmail -f from@huanqiu.cn -t to@huanqiu.cn -s smtp.huanqiu.cn -u "我是邮件主题" -o message-content-type=html -o message-charset=utf8 -xu from@huanqiu.cn -xp WEE78@12l$ -m "我是邮件内容"
命令说明:
/usr/local/bin/sendEmail #命令主程序
-f from@uhanqiu.cn #发件人邮箱
-t to@huanqiu.cn #收件人邮箱
-s smtp.huanqi.cn #发件人邮箱的smtp服务器
-u "我是邮件主题" #邮件的标题
-o message-content-type=html #邮件内容的格式,html表示它是html格式
-o message-charset=utf8 #邮件内容编码
-xu from@huanqiu.cn #发件人邮箱的用户名
-xp WEE78@12l$ #发件人邮箱密码
-m "我是邮件内容" #邮件的具体内容
例如:
[root@Zabbix-server alertscripts]# /usr/local/bin/sendEmail -f ops@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u "我是邮件主题" -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp WEE78@12l$ -m "我是邮件内容"
Oct 14 19:38:29 zabbix-server sendEmail[65454]: Email was sent successfully!
[root@Zabbix-server alertscripts]#
登陆wangshibo@huanqiu.cn邮箱,发现已经收到了上面发送的邮件:
3)下面开始设置zabbix的sendemail邮件发送脚本
进入zabbix自定义的指定目录,我这里是/usr/local/zabbix
可以查看zabbix_server.conf配置文件AlertScriptsPath变量是如何定义的。
找到AlertScriptsPath选项,可以自定义位置
[root@Zabbix-server sendEmail-v1.56]# cat /usr/local/zabbix/etc/zabbix_server.conf
.......
### Option: AlertScriptsPath
# Full path to location of custom alert scripts.
# Default depends on compilation options.
#
# Mandatory: no
# Default:
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/local/zabbix/alertscripts
[root@Zabbix-server sendEmail-v1.56]# cd /usr/local/zabbix/alertscripts/
下面是sendemail的邮件发送脚本(这个脚本通用,确保了zabbix邮件报警信息不会出现中文乱码)
---------------------------------------------------------------------
下面我用的是阿里的企业邮件,smtp地址是smtp@huanqiu.cn
如果用163邮箱,smtp地址是smtp.163.com
如果是腾讯企业邮箱,smtp是smtp.exmail.qq.com
--------------------------------------------------------------------
[root@Zabbix-server alertscripts]# cat mail.sh
#!/bin/bash
#
# Filename: SendEmail.sh
# Revision: 1.0
# Date: 2014/07/04
# Author: Qicheng
# Email:
# Website: http://www.cnblogs.com/kevingrace/
# Description: zabbix邮件告警脚本
# Notes: 使用sendEmail
#
# 脚本的日志文件
LOGFILE="/tmp/Email.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1
SMTP_server='smtp.huanqiu.cn' #SMTP服务器,变量值需要自行修改
username='ops@huanqiu.cn' #用户名,变量值需要自行修改
password='WEE78@12l$' #密码,变量值需要自行修改
from_email_address='ops@huanqiu.cn' #发件人Email地址,变量值需要自行修改
to_email_address="$1" #收件人Email地址,zabbix传入的第一个参数
message_subject_utf8="$2" #邮件标题,zabbix传入的第二个参数
message_body_utf8="$3" #邮件内容,zabbix传入的第三个参数
# 转换邮件标题为GB2312,解决邮件标题含有中文,收到邮件显示乱码的问题。
message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_subject_utf8
EOF`
[ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8"
# 转换邮件内容为GB2312,解决收到邮件内容乱码
message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_body_utf8
EOF`
[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"
# 发送邮件
sendEmail='/usr/local/bin/sendEmail'
set -x
$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312
[root@Zabbix-server alertscripts]# chmod 755 mail.sh
[root@Zabbix-server alertscripts]# touch /tmp/Email.log
[root@Zabbix-server alertscripts]# chown zabbix.zabbix /tmp/Email.log
[root@Zabbix-server alertscripts]# chown zabbix.zabbix mail.sh
测试脚本发送邮件
[root@Zabbix-server alertscripts]# ./mail.sh wangshibo@huanqiu.cn 主题 测试
[root@Zabbix-server alertscripts]#
登陆wangshibo@huanqiu.cn邮箱,发现已经收到了上面发送的邮件:
4)接着,登陆zabbix界面,进行设置
注意:zabbix 3.0 需要在为alert脚本定义参数,以前的版本参数都固定的,现在用户可以自己定义命令行的参数了。添加的参数也就是脚本中的$1、$2、$3等。
点击"管理"->"报警媒介类型"->点击最右边的"创建媒体类型"
输入上面在alertscripts目录下创建的脚本名称mail.sh,类型选择脚本并添加以下3个参数,
分别对应sendEmail.sh脚本需要的3个参数:收件人地址、主题、详细内容
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
这里注意一下:
安装zabbix 3.0之后,写的脚本一直发信不成功,手动执行时可以的。
那是因为zabbix3.0之后,可以自定义参数了。所以不写参数,它是不会传参数的。
在2.x版本不存在这个问题,默认会传3个参数。
点击“管理”->“用户"->"zabbix" (我这里的zabbix的管理员账号是zabbix)
上面添加的是发送给wangshibo@huanqiu.cn的报警设置,显示如下:
如果是发送给多人,那么需要”添加“多个邮箱账号!
点击“管理”->“用户群组”,点击zabbix administrator后面的调用模式。
点击用户群组Zabbix administrators的”权限“,点击”添加“,选择所有权限 ,最后点击下面的”更新“
点击“配置”->“动作”,这里可以点击右边的“创建动作”(事件源是”触发器“,也就是Triggers),也可以直接使用默认动作进行修改
这里我选择修改默认的Report problems to Zabbix administrators
修改动作名称为”zabbix报警“。
注意:
zabbix默认的告警内容不丰富,信息不足,我做了如下的调整(默认信息和恢复信息是一致的):
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}
---------------------------------------------------------------------------------------------------------------------------
如上,在“配置”->“动作”里的“条件”里的设置
1)计算方式
设置为“与/或”,说明只要触发其中任何一个都会发报警邮件
2)条件:
上面默认设置的是下面两个:
A:维护状态 非在 维护
B:触发器值 = 问题
按照上面的设置后,当被监控主机宕机或zabbix_agent(10050端口)关闭后,就会发生报警~
但是这些远远不能满足我们的运维监控需求。
比如当被监控主机的根磁盘爆满时,需要发送报警邮件!这就需要额外添加上面“动作”里的“条件”设置
如在“条件”里追加“主机”和“模板”,将所监控的主机和被监控主机采用的模板都选上为触发条件
这样,当任何一个条件被触发时,都会发送报警邮件!
------------------------------------------------------------------------------------------------------------------------------------------------------------
设置“操作”,可以点击”新的“添加操作规则,也可以直接修改已有的操作规则:
默认的步骤是1-3,也即是从1开始到3结束。一旦故障发生,就是执行sendEmail.sh脚本发生报警邮件给zabbix用户和zabbix administrator组。
假如故障持续了1个小时,它也只发送3次,第1-3次(即前3次)邮箱发送给zabbix用户,时间间隔为0秒。
如果改成1-0,0是表示不限制.无限发送
间隔就是默认持续时间60秒。那么一个小时,就会发送60封邮件。
如果需要短信报警的话,可以再创建一条新的动作,选择短信脚本。
-------------------------------------------------------------
也可以在添加新的”操作“,比如上面前3次报警发送给zabbix。
还可以再设置第30-35次报警(也就是报警事故已经发生30秒之后)发送给另外的用户
这样,就创建了两个"操作",上面我只创建了一个操作
-------------------------------------------------------------
这样,zabbix利用sendemail发送报警信息的设置就已经完成了!
测试:
将192.168.1.19服务器的zabbix_agent进程关闭。
发现可以正常收到故障报警邮件(收到3次邮件PROBLEM故障邮件):
待192.168.1.19服务器的zabbix_agent进程恢复后,也有报警邮件(收到1次OK(恢复状态)的邮件)。
最后,点击”报表“->”动作日志“,可以看到触发动作的次数(右边还看查看到邮件发送状态“已发送”)。
故障报警只会有3次,除非test主机状态改变,也就是正常恢复的时候,才会再触发一次,否则不会再触发。
------------------------------------------------------------------------------------------------------------------------------------------------------------
以上是zabbix利用sendemail发送报警邮件的配置。
下面介绍下利用python脚本发送报警邮件的配置!
首先是创建python脚本zabbix_sendemail.py,如下:
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts
[root@Zabbix-server alertscripts]# cat zabbix_sendemail.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pdb
import smtplib
import string
import time
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#pdb.set_trace()
#HOST = "mail.gw.com.cn"
def S_Mail():
HOST = "smtp.huanqiu.cn"
SUBJECT = sys.argv[2].decode('utf-8').encode('gbk')
TO =sys.argv[1]
FROM = "ops@huanqiu.cn"
text = sys.argv[3].decode('utf-8').encode('gbk')
BODY = string.join((
"FROM: %s" % FROM,
"To: %s" % TO,
"Subject: %s" %SUBJECT,
"",
text
),"\r\n")
server = smtplib.SMTP()
server.connect(HOST,25)
#server.starttls()
server.login("ops@huanqiu.cn","WEE78@12l$")
server.sendmail(FROM,[TO],BODY)
server.quit()
# email log 记录日志
with open('/data/logs/zabbix/Email.log','a') as f:
date=time.strftime("%y-%m-%d %H:%M:%S")
str = date + " " + TO +" " + SUBJECT + "\r\n" + "\n"
str1 = str.decode('gbk').encode('utf-8')
# print("%s" %str1)
f.write(str1)
if __name__=='__main__':
S_Mail()
[root@Zabbix-server alertscripts]# mkdir -p /data/logs/zabbix/
测试邮件发送:
[root@Zabbix-server alertscripts]# ./zabbix_sendemail.py wangshibo@huanqiu.cn 主题 测试
[root@Zabbix-server alertscripts]#
然后登陆wangshibo@huanqiu.cn邮箱,发现已经收到邮件了。如下:
其他zabbix界面上的配置和上面差不多,只需要将mail.sh改为zabbix_sendemail.py即可!
分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署的更多相关文章
- 企业级分布式监控系统-Zabbix基础
1.基础分部 1.1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 1.2监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/ ...
- 分布式监控系统--zabbix
1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 2.监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/代理端/服务器端/, ...
- 企业级分布式监控系统--zabbix
目录 1.Zabbix简介 2.zabbix安装 3.工作原理 4.监控功能 5.监控系统架构 6.Zabbix系统架构 7.Zabbix组件构成 8.zabbix监控环境中基本概念 正文 回到顶部 ...
- Zabbix 4.0.24 完整安装
依赖包安装: yum install net-snmp* libssh-devel libssh2-devel -y Zabbix server安装: wget https://cdn.zabbix. ...
- 【Zabbix】分布式监控系统Zabbix【二】
一.Zabbix基本操作 1.主机群组.主机.模板.触发器 a.创建主机群组和主机的过程比较简单,不再介绍 b.配置模板: 创建一个模板,将其分组到Template组,添加配置应用: 给应用创建监控项 ...
- 【Zabbix】分布式监控系统Zabbix【一】
一.Zabbix功能及特性简介 Zabbix可以获取cpu,内存,网卡,磁盘,日志等信息 1.Zabbix数据收集方式: a.Agent客户端(Agent客户端支持多平台部署) b.如果是无法安装客户 ...
- 分布式监控系统之Zabbix基础使用
前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL
前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...
- 分布式监控系统Zabbix-3.0.3-新版微信报警(企业微信取代企业号)
一般来说,Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是现在越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人 ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(0)
一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...
随机推荐
- 关于JS闭包,作者不详(转)
说明:本文由两篇文章结合而成,系从他人笔记中转过来的, 具体作者不详.因为觉得不错,遂共享之.如有侵权,立删致歉. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变 ...
- CRM 2013 系统设置新功能二:Entity images 图像字段
CRM2013系统默认的许多实体都已经有了图像的选择,如 右上角可以设置当前用户的头像. 客户.联系人等都可以,下面将介绍一下此项新功能: 一.实体中新建图像字段,其中系统自动命名entityinag ...
- 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。
错误的写法: if (this.GridView1.Rows.Count > 0) { string style = @"<style& ...
- 原创:SAP LVC ALV编辑小技巧
前两天有个打印需求变更,需要在ALV显示列表中添加两个字段,可编辑,而我自己用的是函数:REUSE_ALV_GRID_DISPLAY_LVC 因为之前做可编辑基本都是固定套路,定义类,画屏幕.... ...
- 在Seismic.NET下用最少的语句写出一个剖面显示程序
用Seismic.NET开发地震剖面显示程序可以节省大量的时间,下面的代码展开了如何用最少的代码显示一个SEGY文件. // 用一行语句把 reader, pipeline, view 和 plot ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q22-Q24)
Question22You create a Feature.You need to remove the link to the Site Content Type page from the Si ...
- java调用python代码
同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...
- IOS之KVC和KVO(未完待续)
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 简单的Windows登陆界面设计
要求: 1.用户名必须为字母. //限定用户名必须为字母 private void txtName_KeyPress(object sender, KeyPressEventArgs e) { if ...
- 问题解决——基于MSCOMM32.OCX控件的类在客户机不能创建控件
大家不要笑我了,我不喜欢用那个人家写的串口类. 所以导出了MSCOMM32.OCX的类,然后在此基础上写了一个串口打印机的小工具类. -------------声明--------------- 本文 ...