本节内容:

  • 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的通知功能以及自定义脚本告警的更多相关文章

  1. zabbix 自定义脚本监控activemq

    1. 编写获取activemq队列积压消息(check-amq.sh) #!/bin/bash QUEUENAME=$ MQ_IP='172.16.1.56' curl -uadmin:admin h ...

  2. zabbix自定义脚本监控服务器端口状态

    zabbix可以通过客户端的[net.tcp.port[<ip>,port]]该item监控项来判断本地/远程服务器TCP端口是否正常,不过当时没有想起来,就用了自定义脚本去写的,很久没有 ...

  3. zabbix 获取不到自定义脚本的值解决

    agent端: zabbix 自定义脚本 [root@localhost script]# cat check_ping.sh #!/bin/bash result=$(/usr/local/nagi ...

  4. 自学Zabbix3.10.1.5-事件通知Notifications upon events-媒介类型自定义脚本

    自学Zabbix3.10.1.5-事件通知Notifications upon events-媒介类型自定义脚本

  5. Zabbix如何设置脚本告警

    设置告警脚本的路径 # vim /etc/zabbix/zabbix_server.confAlertScriptsPath=/usr/lib/zabbix/alertscripts 创建脚本 在这里 ...

  6. cocos2d-js 安卓自定义本地通知功能

    安卓新手,笔记有理解不当的地方望指出,经过几天折腾终于可以实现类似ios的本地通知功能(ios就几行代码),可能有第三方sdk可以方便实现,暂时没去找 思路: 1. startService 和bin ...

  7. (48)zabbix报警媒介:自定义脚本Custom alertscripts

    自定义脚本媒介.zabbix会将信息传递给脚本,接下来你在脚本里面随意处理,一共会传递三个参数,按顺序接受也就是$1,$2,$3了,为了方便记忆,一般分别给他们赋值到To\Subject\body 配 ...

  8. Zabbix的LLD功能--Low-level discovery

    感觉这个主题是和一个主题是一个系列,而且更基础. 准备深入研究一下... 相关文档准备: https://www.zabbix.com/documentation/2.0/manual/discove ...

  9. [系统集成] RT(Request Tracker)执行自定义脚本及发送微信、短信的实现方法

    RT(Request Tracker)是一个基于 Perl 语言的开源状态跟踪和工作流系统,支持审批.权限管理等功能,中文化支持的也不错,可以作为企业的流程审批系统使用.可惜的是,该系统在国内使用的不 ...

随机推荐

  1. 利用Snapshot快速跨Region迁移服务器

    当你需要对现有的网站进行跨区域迁移,或者是部署DR Site的时候,又不希望重新部署应用,有什么好办法呢?其实你可以利用Azure的磁盘snapshot进行磁盘级的复制,这样可以减少很多部署应用的时间 ...

  2. Docker简介与安装配置

    目录 Docker简介 什么是Docker 为啥要用容器 Docker Engine Docker架构说明 Docker安装 Docker版本介绍 Ubuntu安装docker-ce CentOS7安 ...

  3. addEventListener() 事件监听

    addEventListener() 用于向指定元素添加事件. 可以向一个元素添加多次事件或者多次不同事件,后面的事件是不会覆盖前面的. 语法: element.addEventListener(ev ...

  4. Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息

    由于我的应用在获取到经纬度后在Android8.0不能使用如下代码获取位置信息.只好使用百度地图 WEB服务API 通过调接口的方式获取位置信息. Geocoder geocoder = new Ge ...

  5. NGINX+TOMCAT实现反向代理

    环境说明 NGINX: 192.168.10.10 TOMCAT: 192.168.10.11 NGINX部分 [root@nginx ~]# wget http://nginx.org/downlo ...

  6. Spyder docstrings文档字符串的标准

    Spyder docstrings文档字符串的规范 python的docstring 非常重要. 有时候编写一个小函数只需要几行代码就可了. 但是完善的文档很可能比源代码长许多. 特点和标准 docs ...

  7. C# 定时执行方法: System.Timers.Timer用法示例

    System.Timers.Timer t = new System.Timers.Timer(5000); //设置时间间隔为5秒        private void Form1_Load(ob ...

  8. zabbix lld使用trapper方式(zabbix_sender)

    自动发现脚本文件输出格式: { "data": [ { "{#BIND_PERF}": "BIND INCOMING QUERY" }, { ...

  9. jquery 根据后台传过来的值动态设置下拉框、单选框选中

    更多内容推荐微信公众号,欢迎关注: jquery  根据后台传过来的值动态设置下拉框.单选框选中 $(function(){ var sex=$("#sex").val(); va ...

  10. 升级lamp中php5.6到php7.0过程

    升级过程我就直接摘录博友,http://www.tangshuang.net/1765.html,几乎问题和解决办法都是参照他的,所以我也就不另外写了.谢谢!! 周末看了一下php7的一些情况,被其强 ...