一.简介

zabbix支持多种多种告警方式,常见的有邮件、微信和钉钉机器人告警,当然也支持电话和短信告警。

邮件告警:创建媒介类型(发件人)---报警媒介(收件人)---动作(什么时间发)

企业微信和钉钉告警:zabbix-server采用docker部署后,没有/usr/lib/zabbix/alertscripts/,好像也找不到/etc/zabbix/zabbix_server.conf,这种情况可用webhook的方式,脚本不再是python或bash脚本,是JavaScript脚本。

zabbix邮件和webhook告警(zabbix docker部署)_邮箱

拓扑图

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_02

二.邮件告警 发件人163邮箱为例

创建媒介类型(发件人)---报警媒介(收件人)---动作

0.准备 获取163授权码

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_03

1.创建媒介类型

管理---报警媒介类型---创建媒介类型

可以先全部停用,用到哪个开哪个。

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_04

报警媒介类型配置

zabbix邮件和webhook告警(zabbix docker部署)_微信_05

Message templates配置

故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
操作时间: {EVENT.OPDATA}
问题起源ID: {EVENT.ID}
触发器地址:{TRIGGER.URL}

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_06

故障已解决时间: {EVENT.RECOVERY.TIME} 日期 :{EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障起源ID: {EVENT.ID}
触发器地址:{TRIGGER.URL}

zabbix邮件和webhook告警(zabbix docker部署)_微信_07

最后添加

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_08

邮箱可用性测试  可筛选已启用的

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_09

收件人邮箱填写

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_10

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_11

2.收件人信息配置

User setting---Profile---报警媒介---添加

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_12

类型选刚才创建的邮件类型,收件人可添加多个,什么级别的告警发邮件,添加后更新

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_13

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_14

3.动作配置

配置---动作---触发器动作Trigger actions

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_15

点停用的,来启用

zabbix邮件和webhook告警(zabbix docker部署)_微信_16

操作的具体设置

zabbix邮件和webhook告警(zabbix docker部署)_微信_17

操作细节 ,可添加组和用户

zabbix邮件和webhook告警(zabbix docker部署)_微信_18

最后更新

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_19

4.手动制作故障后测试

systemctl stop nginx

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_20

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_21

systemctl startp nginx

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_22

三.钉钉告警

0.用来测试,可以找2个钉钉账号如A和B,A建立组织是管理员,B加入,AB组成一个群聊。

1.创建群聊---添加webhook机器人---测试webhook

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_23

添加机器人选webhook机器人

zabbix邮件和webhook告警(zabbix docker部署)_微信_24

机器人名字自定义

勾选自定义关键词(添加一个写了"Zabbix告警"),告警信息里面有关键字,钉钉机器人才发送消息。

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_25

复制webhook的URL

zabbix邮件和webhook告警(zabbix docker部署)_微信_26

可测试webhook能不能用

curl -H 'Content-Type: application/json' \
-d '{"msgtype":"text","text":{"content":"关键字:Zabbix告警 来自钉钉Zabbix告警机器人消息"}}' \
'https://oapi.dingtalk.com/robot/send?access_token=6e32cacc3029173741807625c18c2d2ec1637bb61d31aaef1c3c6342e1e0f485'

zabbix邮件和webhook告警(zabbix docker部署)_微信_27

2.创建报警媒介类型

管理---报警媒介类型---创建媒介类型---选Webhook(不要选脚本)

参数只要图中的,删除一个URL

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_28

JavaScript脚本

try { // 实例化参数
    var params = JSON.parse(value),
      req = new HttpRequest(),
      msg = {
         msgtype: 'text',
         text: {
            content: params.Subject + '\n' + params.Message
           }
     },
           resp; // 判断是否需要配置HTTP代理
    if (params.HTTPProxy) {
        req.setProxy(params.HTTPProxy);
    } // 添加header头变量
    req.addHeader('Content-Type: application/json'); // 发送HTTP Post请求,格式:req.post(url, data)
    resp = req.post(params.To,  
           JSON.stringify(msg)
    ); // 判断HTTP请求返回的状态码,非200则抛出异常
    if (req.getStatus() != 200) {  
     throw 'Response code: ' + req.getStatus();
    } // 返回响应结果
    resp = JSON.parse(resp);  
	return JSON.stringify(resp);
}
catch (error) {  
      throw 'Failed with error: ' + error;

  }

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_29

添加消息模板,要包含自定义关键词“Zabbix告警”,不然钉钉不发消息。

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_30

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_31

消息模板可自定义

故障名称: {EVENT.NAME}

###Zabbix告警###
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
操作时间: {EVENT.OPDATA}
问题起源ID: {EVENT.ID}
触发器地址:{TRIGGER.URL}

测试

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_32

刚才添加的问题填写到Subject和Message中,To是机器人webhook的地址。

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_33

3.创建动作

配置---动作--出发动作,有一个内置的

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_34

zabbix邮件和webhook告警(zabbix docker部署)_微信_35

zabbix邮件和webhook告警(zabbix docker部署)_微信_36

操作细节按情况写,一般是分不同的用户组。等下给所选的组包含的用户添加报警媒介。

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_37

4.用户添加报警媒介

收件人写webhook的地址,写手机号会报错

Failed with error: Error: cannot get URL: Couldn't resolve host name.

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_38

5.手动制作故障后测试

systemc stop nginx

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_39

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_40

systemctl start nginx

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_41

四.企业微信告警

企业微信与钉钉类似,简化步骤

0.创建群,添加机器人

1.创建报警媒介类型

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_42

JavaScript脚本

try {
    var params = JSON.parse(value),
        request = new HttpRequest(),
        msg = {
            msgtype: 'markdown',
            markdown: {
                content: params.Subject + '\n' + params.Message
            }
        },
        response;
    if (params.HTTPProxy) {
        request.setProxy(params.HTTPProxy);
    }
    request.addHeader('Content-Type: application/json');
    response = request.post(params.To,JSON.stringify(msg)
    );
    response = JSON.parse(response);  
    if (request.getStatus() != 200) {
        throw 'Response Status: ' + request.getStatus();
    }
    if (response.errcode !== 0) {
        throw 'Response errcode: ' + response.errcode + '\n' + 'Response errmsg: ' + response.errmsg;
    }
    return JSON.stringify(response);
}catch (error) {
    throw 'Sending failed: ' + error;
}

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_43

2.创建动作

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_44

3.创建用户媒介告警

zabbix邮件和webhook告警(zabbix docker部署)_钉钉_45

4.手动制作故障后测试

systemctl stop nginx

zabbix邮件和webhook告警(zabbix docker部署)_邮箱_46

systemctl start nginx

zabbix邮件和webhook告警(zabbix docker部署)_zabbix_47