概述
在生产环境下被监控主机关联了监控项和触发器,当主机监控指标异常此时触发器状态发生改变产生异常事件,此时动作(action)选项将根据自定义的内容触发。当发生不同级别的异常问题时,我们希望看到所有相关的人都能收到通知。为了能够发送和接收ZABBIX的通知,需定义以下功能
1,配置媒介(media)
2,配置action 向已定义的媒介发送消息
Actions由conditions和operations组成。当条件满足时,执行相应的操作。两个主要操作是发送消息(通知)和执行远程命令。
对于发现和自动注册创建的事件,可以使用一些其它操作。包括添加或删除主机,链接模板等。
ZABBIX 告警数据流
ZABBIX 媒介类型
媒介是用于在Zabbix中发送通知和警报的通道。 可以配置多种媒介类型:
SMS
自定义警报脚本
配置动作
代码语言:javascript复制•进入 配置 -->动作
•从Event source下拉单中选择所需的来源
•点击 创建 action
•命名action
•选择进行操作的条件
•选择操作来执行
•选择恢复操作来执行
ZABBIX 系统默认自带一个触发器动作,处于停用状态 ZABBIX告警条件配置只有在事件与定义的条件匹配的情况下才执行操作。配置动作时设置条件。
定义动作为Zabbix-server主机 触发器条件为一般严重同时满足的条件
配置媒介类型
在管理->媒体类型中设置 点击创建媒介类型(或者点击预定义媒介类型的列表中的E-mail)
以上定义ZABBIX发送告警邮箱源地址和推送给用户的邮箱 定义ZABBIX 告警E-mail告警操作和恢复操作
邮箱告警测试
通过停止zabbix-agent产生ZABBIX 告警(五分钟没有采集到数据就会触发告警)
代码语言:javascript复制#systemctl stop zabbix-agent
恢复告警
#systemctl start zabbix-agent
ZABBIX告警格式
代码语言:javascript复制操作
标题:
Problem_{HOST.NAME}发生:{EVENT.NAME}故障!
消息内容:
Problem
告警主机:{HOST.NAME}
主机分组:{TRIGGER.HOSTGROUP.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{EVENT.NAME}
告警时间:{EVENT.DATE}{EVENT.TIME}
事件ID:{EVENT.ID}
恢复操作
标题:
OK_{HOST.NAME}:{EVENT.NAME}已恢复!
消息内容:
OK
告警主机:{HOST.NAME}
主机分组:{TRIGGER.HOSTGROUP.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE}{EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE}{EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
ZABBIX 钉钉告警
如果需更多告警媒介类型,则可以使用其它方式来执行此操作。创建事件通知自定义的脚本。告警脚本在zabbix服务器上执行。这些脚本位于服务器配置文件中定义的目录中AlertScriptsPath下. 通过Python 脚本将告警推送至钉钉群聊实现实时告警
代码语言:javascript复制# ls -ll /usr/lib/zabbix/alertscripts/dingdinggaojing.py
-rwxr-xr-x.1 root root 667 Oct 26 13:50
# chmod 755 dingdinggaojing.py
1,创建钉钉群聊
2,首先在钉钉群聊里添加一个自定义的机器人
3,复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4ac34566e03c4c4e74b7eedecbcc002exxxxxxxxxxxxxxx
ZABBIX 钉钉告警脚本
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=fb1182067ea512991e20f55f74565746664f1dbc0f18b661c8fe8b280298f1c7"
def msg(text):
json_text= {
"msgtype": "text",
"at": {
"atMobiles": [
""
],
"isAtAll": False
},
"text": {
"content": text
}
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
钉钉告警脚本测试 手动调试脚本进行测试,需切换到绝对路径下执行以下命令
代码语言:javascript复制#pwd
/usr/lib/zabbix/alertscripts
第一种方式
#python dingdinggaojing.py zabbixtest
第二种方式
#./dingdinggaojing.py zabbixtest
代码语言:javascript复制注意事项
在进行手动调试脚本可能会出现“ImportError: No module named requests”的报错,说明我们没有安装相应的python模块
由于在安装过程中有些在Base源中的安装包的依赖包在Base源中没有所以需要添加阿里epel源。
#wget–O /etc/yum.repos.d/CentOS-epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo
代码语言:javascript复制yum安装python-pip,用pip安装相应模块
yum -y install python-pip
pipinstall switch
pipinstall requests
创建报警媒介,并绑定用户
定义动作条件,告警操作,恢复操作类同 告警主题和消息内容和E-mail 配置相同
ZABBIX 持续告警 ZABBIX报警如果触发器不勾选“多重问题事件生成”,第一次产生报警,之后就不报了。必须等到恢复正常,以后再次出现问题时才会再报。而如果勾选“多重问题事件生成”,他会根据监控项目的检测频率一直报警,让你一直接受报警不会漏掉,但是它有个缺点就是如果没恢复,会根据监控项目的检测频率一直发送报警信息给你产生告警风暴。
ZABBIX 每次一条报警默认只发送一次,这样如果出现大量报警时,可能出现漏报的事情发生,所以需要设置成报警未取消,需要多次报警提醒设置功能,步骤调整到1-无穷大本图步骤调整为1-3表示在告警没有恢复期间会每隔1h发送一次共发送3次,告警消息步骤持续时间改成你想让他重复报警的时间(60=1min,按照这个比例去调整就可以了)
ZABBIX 告警升级
当一个监控项异常报警会实时推送给一线的运维人员,关键的业务需要立即恢复,在故障触发的一段范围之内没有恢复就有必要进行故障升级通知技术主管甚至技术总监。ZABBIX 通过自定义时间段,发送消息、命令 从而形成分级的报警机制。
步骤2 故障发生一小时没有恢复发送email 通知技术总监