在以前的文章里,经过Zabbix对主机的磁盘、CPU以及内存进行了监控,并在首页Dashboard里建立了监控图形,可是只有当咱们登陆到Zabbix后才能看到监控到的问题(Problem),所以在本篇文章里,将利用触发器(Trigger),以及媒介(Media)等配置项,实现当触发器触发时,经过不一样媒介,如:邮件、钉钉,发送动做(Action),实现实时通知告警功能。javascript
因为使用到脚本告警媒介,本文中经过调用Python脚本触发告警,所以须要在Zabbix Server主机上安装pip以及相关模块。(这里Python使用Centos7自带的Python2.7.5)html
安装pipjava
# yum install -y epel-release # yum install -y python-pip
安装requests模块python
# pip install requests
Zabbix默认自带了2种报警媒介类型(Media Type),电子邮件以及短信,咱们将修改电子邮件类型配置,并新建脚本类型和Webhook类型。但愿经过脚本、Webhook告警媒介发送钉钉消息。web
注:Webhook告警媒介是Zabbix 4.4的新特性shell
修改电子邮件告警媒介json
点击【管理】-【报警媒介类型】-【Email】vim
修改Email配置,我这里用的是Outlook邮箱,具体SMTP服务器能够参考Outlook官网 SMTP设置。使用其余邮箱也能够去对应官网查询SMTP配置。api
测试发送邮箱,点击【测试】服务器
输入收件人邮箱
收到邮件
新增脚本告警媒介
新建Python脚本告警媒介,用户钉钉告警
点击【建立媒体类型】
进行配置
配置项 | 值 |
---|---|
* 名称 | Python脚本 |
类型 | 脚本 |
* 脚本名称 | pythonScript.py |
脚本参数(参数1) | {ALERT.MESSAGE} |
脚本参数(参数2) | {ALERT.SENDTO} |
脚本参数(参数3) | {ALERT.SUBJECT} |
接下来新建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
测试脚本
钉钉收到消息
新增Webhook告警媒介
配置项 | 值 |
---|---|
* 名称 | Webhook |
类型 | Webhook |
参数: (名称) | 值 |
user | {ALERT.SENDTO} |
subject | {ALERT.SUBJECT} |
message | {ALERT.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);
测试Webhook
须要将新增的告警媒介添加给用户
点击【用户】-【告警媒介】
将上述步骤添加的告警媒介(Python脚本、Webhoob、Email),进行添加(收件人根据告警媒介类型填写邮箱或手机号),严重性也根据须要勾选。
完成上述配置完成后,须要建立动做(Action),将触发器(Trigger)和告警媒介(Media Type)进行关联,一旦触发器触发,那么Zabbix会执行动做,再去执行告警媒介。
添加动做
点击【配置】-【动做】-【建立动做】
配置【动做】相关信息
配置项 | 值 |
---|---|
* 名称 | 告警动做 |
新的触发条件 | 【触发器】【等于】【Template Disk Free Size: 磁盘剩余空间触发器】 |
操做步骤以下图:
群组选择 ->Linux servers
主机选择 -> Template Disk Free Size 模板(上一篇文章中定义的模板)
勾选触发器 -> 磁盘剩余空间触发器 (上一篇文章中建立的触发器)
勾选后点击【选择】
配置【操做】相关信息
点击【操做】
先配置如下信息
配置项 | 值 |
---|---|
* 默认操做步骤持续时间 | 1h(保持默认) |
默认标题 | 告警: {EVENT.NAME} |
消息内容 | 【磁盘空间不足告警】 告警事件: {EVENT.DATE} {EVENT.TIME} 告警问题: {EVENT.NAME} 告警主机: {HOST.IP} {HOST.NAME} 告警级别: {EVENT.SEVERITY} 磁盘剩余:{ITEM.VALUE} |
上述配置表格【默认标题】和【消息内容】值中形如{EVENT.NAME}的内容是Zabbix中的宏(Marco),宏是一个变量,例如 {HOST.IP} 表示告警主机的IP地址,Zabbix自带的宏能够参考Zabbix 4.4自带宏
继续配置操做
【操做类型】选择发送消息,【发送到用户】添加Admin
【仅送到】根据须要选择以前配置的告警媒介,本文选择Email和Python脚本(这里只能单选或全选,因此须要先选择一个,所以须要屡次添加)
添加完成后点击【添加】
向被监控主机拷贝或下载大文件,使其磁盘剩余空间低于触发器监控阈值,等待触发器触发问题,查看仪表盘、邮件等。
仪表盘
钉钉
邮件