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 语言的开源状态跟踪和工作流系统,支持审批.权限管理等功能,中文化支持的也不错,可以作为企业的流程审批系统使用.可惜的是,该系统在国内使用的不 ...
随机推荐
- error: Failed to start domain lb error: Failed to activate service 'org.freedesktop.machine1': timed out 报错的解决办法
能正常查看kvm虚拟机列表: virsh list 但在执行virsh start lb启动虚拟机时卡顿了好几秒,然后报以下错误: error: Failed to start domain lber ...
- NO.2day 操作系统基础
操作系统基础 1.为什么要有操作系统 操作系统为用户程序提供一个更好.更简单.更清晰的计算机模型,并管理刚才提到的所有设备(磁盘.内存.显示器.打印机等).程序员无法把所有的硬件操作细节都了解到,管理 ...
- 科学计算三维可视化---TraitsUI的介绍
TraitsUI的介绍 Python中存在Tkinter,wxPython,pyQt4等GUI图像界面编写库,这三类库要求程序员掌握众多的GUI API函数 对于科学计算的应用来说,我们希望可以快速的 ...
- Ubuntu硬盘空间不足时,添加硬盘的方法
Ubuntu下重新挂载一个硬盘:方法如下: 1 .在Vmware中关闭Ubuntu虚拟机,在设置中,添加新的硬件设备,选择Hard Disk.(这里如果不关闭Ubuntu系统就不能增加新的硬件设备) ...
- 设置PyCharm中的Python代码模版
再MacOs运行的PyCharm中,执行python文件,如果不指定python文件字符编码会报错: SyntaxError: Non-ASCII character , but no encodin ...
- MacBook Air网络问题
自从买了本本之后,一直觉得无线网连接不能正常使用,最开始觉得是网络不给力,因为图标都没有满格.后来搬家,网速家里的window,iphone设备都能正常使用,就我的mac 本本图标显示满格,但是网页打 ...
- 通过网络仓库建立本地的yum仓库
[root@kazihuo ~]# yum -y install createrepo yum-utils [root@kazihuo ~]# yum -y install https://mirro ...
- 用户管理_组管理_权限管理.ziw
2017年1月10日, 星期二 用户管理_组管理_权限管理 用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage ...
- Java并发编程原理与实战四十一:重排序 和 happens-before
一.概念理解 首先我们先来了解一下什么是重排序:重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段. 从Java源代码到最终实际执行的指令序列,会分别经历下面3种重排序,如下图 ...
- 多年前写的DataTable与实体类的转换
介绍 介绍 很多年前一直使用Ado.net,后来慢慢转型到其他的orm,在转型过程中,有意向将两者的模型结合起来,利用DataTable中的行状态完善一些mvc中的数据控制作用.现在把它放出来,留个纪 ...