Zabbix-(四)邮件、钉钉告警通知

一.前言

在之前的文章里,通过Zabbix对主机的磁盘、CPU以及内存进行了监控,并在首页Dashboard里创建了监控图形,但是只有当我们登录到Zabbix后才能看到监控到的问题(Problem),因此在本篇文章里,将利用触发器(Trigger),以及媒介(Media)等配置项,实现当触发器触发时,通过不同媒介,如:邮件、钉钉,发送动作(Action),实现实时通知告警功能。

准备

  • Zabbix Server (Zabbix 4.4)
  • 在Zabbix中已配置一些监控项和触发器(这些配置可以参考我的上一篇文章)

二.安装相关环境

由于使用到脚本告警媒介,本文中通过调用Python脚本触发告警,因此需要在Zabbix Server主机上安装pip以及相关模块。(这里Python使用Centos7自带的Python2.7.5)

  1. 安装pip
# yum install -y epel-release

# yum install -y python-pip
  1. 安装requests模块
# pip install requests


三.配置告警媒介类型

Zabbix默认自带了2种报警媒介类型(Media Type)电子邮件以及短信,我们将修改电子邮件类型配置,并新建脚本类型和Webhook类型。希望通过脚本、Webhook告警媒介发送钉钉消息。

注:Webhook告警媒介是Zabbix 4.4的新特性

  1. 修改电子邮件告警媒介
    点击【管理】-【报警媒介类型】-【Email】

修改Email配置,我这里用的是Outlook邮箱,具体SMTP服务器可以参考Outlook官网 SMTP设置。使用其他邮箱也可以去对应官网查询SMTP配置。

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_配置项


测试发送邮箱,点击【测试】

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_配置项_02


输入收件人邮箱

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_触发器_03


收到邮件

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Zabbix配置钉钉的带图片报警_04


  1. 新增脚本告警媒介
    新建Python脚本告警媒介,用户钉钉告警
    点击【创建媒体类型】

进行配置

配置项


* 名称

Python脚本

类型

脚本

* 脚本名称

pythonScript.py

脚本参数(参数1)

脚本参数(参数2)

脚本参数(参数3)

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_配置项_05


接下来新建Python脚本,Zabbix Server配置文件中可以配置告警脚本路径,默认为 /usr/lib/zabbix/alertscripts

# 查看告警脚本路径
# cat zabbix_server.conf | grep AlertScriptsPath

编写告警脚本

# cd /usr/lib/zabbix/alertscripts
# vim pythonScript.py

脚本内容

#!/usr/bin/env python
#coding:utf-8

import requests,json,sys,os,datetime

# 钉钉机器人地址
webhook="https://oapi.dingtalk.com/robot/send?access_token=your_dingding_robot_access_token"

# 对应{ALERT.SENDTO}, Zabbix告警媒介配置界面第2个参数
user=sys.argv[2]

# 对应{ALERT.MESSAGE}, Zabbix告警媒介配置界面第1个参数
text=sys.argv[1]
data={
    "msgtype": "text",
    "text": {
        "content": text
    },
    "at": {
        "atMobiles": [
            user
        ],
        "isAtAll": False
    }
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)

给脚本可执行权限

# chmod uo+x /usr/lib/zabbix/alertscripts/pythonScript.py

测试脚本

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_配置项_06


钉钉收到消息

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Zabbix配置钉钉的带图片报警_07


  1. 新增Webhook告警媒介

配置项


* 名称

Webhook

类型

Webhook

参数: (名称)


user

subject

message

脚本:

try {
    Zabbix.Log(4, 'params= '+value);
 
    params = JSON.parse(value);
    req = new CurlHttpRequest();
    data = {};
    result = {};
 
    req.AddHeader('Content-Type: application/json');
 
    data.msgtype = "text";
    //	对应 message参数
    data.text = {"content" : params.message};
    //	对应 user参数
    data.at = {"atMobiles": [params.user], "isAtAll": "false"};

    //	钉钉机器人
    resp = req.Post('https://oapi.dingtalk.com/robot/send?access_token=your_access_token',
        JSON.stringify(data)
    );
} catch (error) {
    result = {};
}
 
return JSON.stringify(result);

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_触发器_08


测试Webhook

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Zabbix配置钉钉的带图片报警_09



Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_配置项_10


四.为用户添加告警媒介

需要将新增的告警媒介添加给用户

点击【用户】-【告警媒介】

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Python_11

将上述步骤添加的告警媒介(Python脚本、Webhoob、Email),进行添加(收件人根据告警媒介类型填写邮箱手机号),严重性也根据需要勾选。

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_触发器_12

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_触发器_13

五.配置动作

完成上述配置完成后,需要创建动作(Action),将触发器(Trigger)告警媒介(Media Type)进行关联,一旦触发器触发,那么Zabbix会执行动作,再去执行告警媒介。

  1. 添加动作
    点击【配置】-【动作】-【创建动作】
  2. 配置【动作】相关信息

配置项


* 名称

告警动作

新的触发条件

【触发器】【等于】【Template Disk Free Size: 磁盘剩余空间触发器】

操作步骤如下图:

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_触发器_14


群组选择 ->Linux servers

主机选择 -> Template Disk Free Size 模板(上一篇文章中定义的模板)

勾选触发器 -> 磁盘剩余空间触发器 (上一篇文章中创建的触发器)

勾选后点击【选择】

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Zabbix配置钉钉的带图片报警_15


  1. 配置【操作】相关信息
    点击【操作】

先配置以下信息

配置项


* 默认操作步骤持续时间

1h(保持默认)

默认标题

告警:

消息内容

【磁盘空间不足告警】

告警事件: {EVENT.DATE} {EVENT.TIME}

告警问题: {EVENT.NAME}

告警主机: {HOST.IP} {HOST.NAME}

告警级别: {EVENT.SEVERITY}

磁盘剩余:

上述配置表格【默认标题】和【消息内容】值中形如{EVENT.NAME}的内容是Zabbix中的宏(Marco),宏是一个变量,例如 {HOST.IP} 表示告警主机的IP地址,Zabbix自带的宏可以参考Zabbix 4.4自带宏


继续配置操作

点击【新的】

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Python_16


【操作类型】选择发送消息,【发送到用户】添加Admin

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Python_17


【仅送到】根据需要选择之前配置的告警媒介,本文选择Email和Python脚本(这里只能单选或全选,所以需要先选择一个,因此需要多次添加)

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Python_18


添加完成后点击【添加】

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Python_19


六.测试

向被监控主机拷贝或下载大文件,使其磁盘剩余空间低于触发器监控阈值,等待触发器触发问题,查看仪表盘、邮件等。

仪表盘

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_配置项_20


钉钉

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Python_21


邮件

Zabbix配置钉钉的带图片报警 zabbix 钉钉告警_Python_22

七.参考文档