Zabbix的通知功能以及自定义脚本告警
本节内容:
- Zabbix的通知功能
- 定义接收告警的用户
- 定义Action
- Zabbix自定义脚本发送报警邮件
一、Zabbix的通知功能
在配置好监控项和触发器之后,一旦正常工作中的某触发器状态发生改变,一般意味着有异常情况发生,此时通常需要采取一定的动作(action),如告警或者执行远程命令。 实现zabbix的通知功能,一般需要两个步骤:定义所需的“媒介”和配置一个”动作”。 媒介类型有:E-mail,SMS,Jabber和自定义的通知脚本。我这里就使用E-mail了。
1.定义媒介
登录zabbix web管理控制台,点击Administration—> Media types,可以看到有3个定义好了的媒介,不用这3个,点击右上角的”Create media type”。

填写信息:

二、定义接收告警的用户
1.创建用户组
(1)点击Administration—> User groups,点击右上角的Create user group。

(2)输入组名,点击Add。

2.创建用户
(1)点击Administration—> Users,点击右上角的Create user。

在User列填入个人信息:

(2)点击Media,点击Add,选择媒介和接收邮件的时间等信息:


(3)点击Permissions,根据这个新添的用户给予合适的权限

三、定义Action
点击Configuration—> Actions,点击右上角的Create action:

Action配置:

Conditions配置:



四、Zabbix自定义脚本发送报警邮件
Zabbix发送报警邮件还可以采用自定义的脚本来发送。
1.Python脚本发邮件
(1)定义Media types
如下图,添加以下3个参数,分别对应sendEmail.sh脚本需要的3个参数:收件人地址、主题、详细内容。
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

【注意】: 很多人安装zabbix 3.0之后,写的脚本一直发信不成功,手动执行时可以的。那是因为zabbix3.0之后,可以自定义参数了。所以不写参数,它是不会传参数的。在2.x版本不存在这个问题,默认会传3个参数。脚本中可以使用$1, $2, $3来调用 action 中的 邮件的收件人, Default Subject, Default Message。
(2)定义Users的Media

(3)python报警脚本
# cd /usr/local/zabbix-3.0./share/zabbix/alertscripts/
# vim zabbix_sendmail.py
#!/usr/bin/python
# coding:utf-8 import smtplib
from email.mime.text import MIMEText
import sys # 邮箱服务器地址
mail_host = 'smtp.exmail.qq.com'
# 邮箱用户名
mail_user = '01115004@wisedu.com'
# 邮箱密码
mail_pass = 'zjk230640'
mail_postfix = 'wisedu.com' def send_mail(to_list,subject,content):
me = mail_user+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content)
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])
Python报警脚本
修改脚本权限:
# chmod +x zabbix_sendmail.py
# chown -R zabbix.zabbix zabbix_sendmail.py
(4)修改zabbix_server配置
# vim /usr/local/zabbix-3.0./etc/zabbix_server.conf
添加如下配置:
### Option: AlertScriptsPath
AlertScriptsPath=/usr/local/zabbix-3.0./share/zabbix/alertscripts
重启zabbix_server。
(5)配置Actions

【注意】:每触发一次Action,都会在Reports—>Action log看到记录:

2.shell脚本发邮件
(1)先安装sendEmail
[root@care local]# tar zxf sendEmail-v1..tar.gz
[root@care local]# cp sendEmail-v1./sendEmail /usr/local/bin
安装sendEmail
将写好的脚本上传到/usr/local/zabbix-3.0.1/share/zabbix/alertscripts。这里为了业务需求,需要定制化发送邮件的内容,脚本内容如下:
#!/bin/bash
###Description:This script is used to alarm.
###Written by: jkzhao - jkzhao@wisedu.com
###History: -- Second release.
###Modification: Please modify the variables host, user and passwd. # 获取默认的邮件接收者,邮件主题,邮件正文
to=$
subject=$
bodyOrgin=$ # 获取eventid
#eventid=grep "event ID" $bodyOrgin |awk '{print $4}'
eventid=$(echo $bodyOrgin | grep "event ID" |awk '{print $NF}')
echo "eventid:$eventid" > /tmp/test.txt # shell调用存储过程,获取主键viewid,传入参数:eventid,输出:viewid
host=172.16.9.112
user=root
passwd=zabbix
database=zabbix viewid=$(mysql -u${user} -p${passwd} -h${host} -D${database} -e "call generateAlertView($eventid,@result)" >/dev/null | awk 'NR>1')
echo "viewid:$viewid" >> /tmp/test.txt
group=$(mysql -u${user} -p${passwd} -h${host} -D${database} -e "select alerts_view_group.group from alerts_view_group where viewid = $viewid" >/dev/null | awk 'NR>1')
echo "group:$group" >> /tmp/test.txt
body=$bodyOrgin"; 影响业务: "$group # 因为需要格式化发送邮件的内容,将拼接好的body信息写入文件中再做处理
echo $body | awk -F';' '{for(i=1;i<=NF;i++){print $i}}' > /tmp/messages.txt
# 将文件中出现的^M删除掉
sed -i 's/\x0D//g' /tmp/messages.txt
# 删除以空格开头的行前面的空格
sed -i 's/^\s*//g' /tmp/messages.txt # 由于zabbix无论是故障还是恢复都是要发邮件的,但是对于故障和恢复的邮件内容需要定制为不同的内容,因此需要先获取到是故障还是恢复
state=$(echo $subject | awk -F: '{print $2}') # 按照安心守护要求修改邮件正文内容
if [ $state == "PROBLEM" ]; then
sed -i 's/Trigger:/异常对象:/' /tmp/messages.txt
sed -i '/Trigger severity:/{h;d};/Item values:/{G}' /tmp/messages.txt
sed -i 's/Trigger severity:/异常等级:/' /tmp/messages.txt
sed -i 's/Item values:/异常原因:/' /tmp/messages.txt
sed -i '/Original event/d' /tmp/messages.txt
sed -i '/Trigger status:/d' /tmp/messages.txt
sed -i '$a发生时间: ' /tmp/messages.txt
sed -i "s/发生时间: /发生时间: $(date "+%Y-%m-%d %H:%M:%S")/" /tmp/messages.txt
# 把发生故障时的alertView插入alerts_view表
alertValue=$(grep "异常原因" /tmp/messages.txt | awk -F: 'BEGIN{ORS=""};{for(i=3;i<=NF;++i) {print $i}}')
echo "alertValue:$alertValue" >> /tmp/test.txt
mysql -u${user} -p${passwd} -h${host} -D${database} -e "UPDATE alerts_view set alertValue='${alertValue}' WHERE viewid = '${viewid}'" >/dev/null
sed -i 's/Warning/风险/' /tmp/messages.txt
sed -i 's/Disaster/宕机/' /tmp/messages.txt
else
sed -i 's/Trigger:/恢复对象:/' /tmp/messages.txt
sed -i 's/Item values:/恢复内容:/' /tmp/messages.txt
sed -i 's/影响业务/恢复业务/' /tmp/messages.txt
sed -i '/Original event/d' /tmp/messages.txt
sed -i '/Trigger status:/d' /tmp/messages.txt
sed -i '/Trigger severity:/d' /tmp/messages.txt
sed -i '$a发生时间: ' /tmp/messages.txt
sed -i "s/发生时间: /发生时间: $(date "+%Y-%m-%d %H:%M:%S")/" /tmp/messages.txt
fi /usr/local/bin/sendEmail -f monitor@wisedu.com -t "$to" -s smtp.exmail.qq.com -u "$subject" -o message-content-type=text -o message-charset=utf- -o message-file=/tmp/messages.txt -xu monitor@wisedu.com -xp anxinshouhu@ >>/tmp/.log
shell脚本发送邮件
(2)添加Media types

(3)给指定的用户添加Media

(4)配置Actions,为了业务需求定制Default message

(5)邮件展示
故障邮件展示:

故障恢复邮件展示:

Zabbix的通知功能以及自定义脚本告警的更多相关文章
- zabbix 自定义脚本监控activemq
1. 编写获取activemq队列积压消息(check-amq.sh) #!/bin/bash QUEUENAME=$ MQ_IP='172.16.1.56' curl -uadmin:admin h ...
- zabbix自定义脚本监控服务器端口状态
zabbix可以通过客户端的[net.tcp.port[<ip>,port]]该item监控项来判断本地/远程服务器TCP端口是否正常,不过当时没有想起来,就用了自定义脚本去写的,很久没有 ...
- zabbix 获取不到自定义脚本的值解决
agent端: zabbix 自定义脚本 [root@localhost script]# cat check_ping.sh #!/bin/bash result=$(/usr/local/nagi ...
- 自学Zabbix3.10.1.5-事件通知Notifications upon events-媒介类型自定义脚本
自学Zabbix3.10.1.5-事件通知Notifications upon events-媒介类型自定义脚本
- Zabbix如何设置脚本告警
设置告警脚本的路径 # vim /etc/zabbix/zabbix_server.confAlertScriptsPath=/usr/lib/zabbix/alertscripts 创建脚本 在这里 ...
- cocos2d-js 安卓自定义本地通知功能
安卓新手,笔记有理解不当的地方望指出,经过几天折腾终于可以实现类似ios的本地通知功能(ios就几行代码),可能有第三方sdk可以方便实现,暂时没去找 思路: 1. startService 和bin ...
- (48)zabbix报警媒介:自定义脚本Custom alertscripts
自定义脚本媒介.zabbix会将信息传递给脚本,接下来你在脚本里面随意处理,一共会传递三个参数,按顺序接受也就是$1,$2,$3了,为了方便记忆,一般分别给他们赋值到To\Subject\body 配 ...
- Zabbix的LLD功能--Low-level discovery
感觉这个主题是和一个主题是一个系列,而且更基础. 准备深入研究一下... 相关文档准备: https://www.zabbix.com/documentation/2.0/manual/discove ...
- [系统集成] RT(Request Tracker)执行自定义脚本及发送微信、短信的实现方法
RT(Request Tracker)是一个基于 Perl 语言的开源状态跟踪和工作流系统,支持审批.权限管理等功能,中文化支持的也不错,可以作为企业的流程审批系统使用.可惜的是,该系统在国内使用的不 ...
随机推荐
- Excel批量删除换行符_clean函数
http://jingyan.baidu.com/article/e2284b2b489b96e2e6118d30.html CLEAN函数,用于删除文本中不能打印的字符.对从其他应用程序中输入的文本 ...
- JVM 体系结构介绍
JVM是Java的一大利器.它可以屏蔽各个计算机平台相关软件和硬件之间的差异.把平台相关的耦合统一工作交由JVM的实现者. JVM(Java 虚拟机),它通过模拟一个计算机来达到一个计算机所拥有的计算 ...
- canvas 入门
<canvas>是HTML5新增的,是可以使用脚本(JavaScript)在其中绘制图像的HTML元素. canvas是由HTML代码配合高度和宽度属性而定义出的可绘制区域,JavaScr ...
- SVN启停脚本
说明:特别注意红色部分,外部$1传入Msg函数时失效,故特此读取一遍再传入!执行时要给脚本加执行权限!#chmod 755 /scripts/svn [root@kazihuo /scripts]# ...
- python学习笔记3--set
#int string list tuple dict bool float set #集合:天生去重 s=set() #空的集合 s2={'} ls=[1,2,3,4,5,6,7,1,2,3,4] ...
- iScroll使用方法
最基本的iScroll使用结构 <div id="wrapper"> <ul> <li></li> ..... </ul> ...
- 简单理解 NP, P, NP-complete和NP-Hard
P是一类可以通过确定性图灵机(以下简称 图灵机)在多项式时间(Polynomial time)内解决的问题集合. NP是一类可以通过非确定性图灵机( Non-deterministic Turing ...
- URAL 1416 Confidential (最小生成树+次小生成树)
Description Zaphod Beeblebrox - President of the Imperial Galactic Government. And by chance he is a ...
- Css之备忘录~
1.background-size:contain/cover 两者的作用都是一样,一般用于设置小图标作为背景图,两者的区别是: Contain:不会失真 cover:会失真 2.a标签里面如 ...
- 阿里云CentOS下安装jdk
首先需要下载jdk: 由于oracle上的下载页面有跳转,直接用wget下载下来的只是html页面.可以用下面的命令: wget --no-cookies --no-check-certificate ...