Zabbix推送告警概述
本文介绍了如何创建Zabbix告警脚本、配置告警以及一些其他注意事项,实现Zabbix告警推送至钉钉和邮件,由于邮件接收有一定的滞后性,这里最推荐使用钉钉接收告警,也是我自己最常用的告警接收方式。
文章分三个阶段,本篇是第三阶段:
邮件告警请从第四章开始操作
一、获取钉钉webhook
-
登录钉钉
-
发起群聊-选择普通群-选择需要接收告警的人
-
点击右上角三个点,创建机器人根据需求,任选其一:阿里云Codeup(无需配置安全设置)、自定义(需配置安全设置)
-
输入名字,设置安全措施(阿里云Codeup无需此步骤)
安全设置为必填项,请根据实际情况选择,为保证安全性,建议限制IP地址;如果不知道怎么填写,请勾选“自定义关键词”,填写“主机名”。
-
复制webhook链接
二、创建钉钉告警脚本
-
ssh登录到zabbix服务器
-
创建告警脚本
#zabbix脚本保存目录
cd /usr/lib/zabbix/alertscripts
#创建脚本
vim DingDing.py
- 复制脚本内容至DingDing.py,将webhook后面的XXX…替换为上面创建的机器人webhook地址
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import datetime
webhook = "XXXXXXXXXXXXXXXXXXXXXXXX"
user=sys.argv[1]
subject=sys.argv[2]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content": "%s%s"%(subject,text)
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/lib/zabbix/alertscripts/log/dingding.log"):
f=open("/usr/lib/zabbix/alertscripts/log/dingding.log","a+")
else:
f=open("/usr/lib/zabbix/alertscripts/log/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
f.close()
else:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送失败"+"\n"+str(text))
f.close()
- 保存脚本
三、钉钉告警媒介配置
- 告警-媒介
- 创建媒介类型
名称:钉钉告警
类型:脚本
脚本名称:DingDing.py
脚本参数:添加三项
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
- 消息模板:添加两项
- 消息类型:问题
主题:
故障名称: {EVENT.NAME},
消息:
开始时间:{EVENT.DATE} {EVENT.TIME}
主机名: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器URL: {TRIGGER.URL}
- 消息类型:问题恢复
主题:
故障恢复:{EVENT.NAME}
消息:
故障已经恢复,恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
故障持续时间: {EVENT.DURATION}
主机名: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
触发器URL: {TRIGGER.URL}
四、邮件告警(钉钉告警请跳过此步)
此处使用阿里云邮箱SMTP SSL/TLS举例,其他邮箱配置办法参考各邮箱帮助文档
将举例中的电子邮件替换为你实际的电子邮件地址,此处假设电子邮件为:123@test.local
- 告警-媒介
- 创建媒介类型
名称:邮件
类型:电子邮件
邮箱提供商:Generic SMTP
SMTP服务器:smtp.qiye.aliyun.com
SMTP服务器端口:465
电子邮件(例):123@test.local
SMTP HELO(例):test.local
安全连接:SSL/TLS
认证:用户名和密码
用户名称(例):123@test.local
密码:填写实际密码
消息格式:文本
- 消息模板:添加两项
- 消息类型:问题
主题:
故障名称: {EVENT.NAME},
消息:
开始时间:{EVENT.DATE} {EVENT.TIME}
主机名: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器URL: {TRIGGER.URL}
- 消息类型:问题恢复
主题:
故障恢复:{EVENT.NAME}
消息:
故障已经恢复,恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
故障持续时间: {EVENT.DURATION}
主机名: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
触发器URL: {TRIGGER.URL}
五、触发器动作配置
- 告警-动作-触发器动作
- 动作-添加告警条件
根据需要设置触发告警的等级
配置大于等于“告警”等级才会触发推送
- 操作-设置接收推送的群组
添加用户组和条件
六、用户告警方式配置
- 用户
- 报警媒介
- 添加媒介
邮件告警配置如下:
收件人填写需要接收者的邮箱
钉钉告警配置如下:
收件人填写:@all