79. Zabbix4.0------邮箱报警 |微信报警 | 钉钉报警
1. zabbix中的各种报警媒介
准备监控项
监控主机登录用户数量, 当用户登录数量超过5个就进行报警 --system.users.num
zabbix-server可验证:
添加监控项
(可以把 历史数据保留时长设置的小一些,注意信息类型结合实际)
---- {web01:system.users.num.last()}>5
创建触发器
(你可以监控一段时间的平均值,或者最近时刻值)
查看监控有没有添加成功:
添加Xshell窗口数量,并验证
1.2 自定义邮件报警
###创建媒介报警类型:
这里需要注意的是163邮箱需要开启SMTP服务,才能拿到授权码。默认端口25。其他邮箱同理:
自定义邮件收件人
点击右上角用户头像,到 用户基本资料 下的 报警媒介 下添加Email类型的报警媒介:
启用触发器的动作
到 配置 选项下的 动作 项中将状态修改为已启用的状态:
当触发“当前系统用户的登录数”触发器的时候,会向接收邮箱发送消息。这里可以查看已经发送的报警邮件:
邮箱也会接收到报警消息:
自定义邮件 报警信息
默认的邮件报警信息除了宏部分,其它均为英文且比较乱。所以,为了方便查看,需要自定义邮件报警信息:
自定义邮件报警信息模板:
服务器: {HOST.NAME}发生:{EVENT.NAME}故障!
{
告警主机: {HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
替换:
当触发报警后,可以在 动作日志 中查看到发送给接收邮件的报警信息:
检查邮箱后发现邮箱也收到了对应的报警信息:
1.2 自定义微信报警
首先注册号企业微信:https://work.weixin.qq.com/
企业ID号码: xxxxxxx
AgentId: xxxxxxx
Secret: xxxxxxx
写一个微信发送消息的脚本,这里需要用到企业微信。
需要修改企业微信ID、机器人密码和应用ID,这些在企业微信管理都可以看到。
#导入相关模块
import requests, os, sys, logging, json
#定义日志的格式
logging.basicConfig(
filename=os.path.join('/tmp', 'weixin.log'),
format='%(asctime)s - %(name)s - %(levelname)s - %(module)s:%(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=logging.DEBUG,
)
#企业微信id
corpid = ''
#机器人密码
appsecret = ''
# 应用id
agentid = ''
# 获取accesstoken
token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettonken?corpid' + corpid + '&corpsecret=' + appsecret
req = requests.get(token_url)
accesstoken = req.json()['access_token']
# 发送消息
send_msg_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser = sys.argv[1]
subject = sys.argv[2]
message = subject + '\n\n' + sys.argv[3]
params = {
'touser': touser,
'msgtype': 'text',
'agentid': agentid,
'text': {
'content': message
},
'safe': 0
}
req = requests.post(send_msg_url, data=json.dumps(params))
#把结果记录的日志中
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
#查看脚本应该放到哪个位置
[root@Zabbix-server ~]# grep -Ev '^$|#' /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
测试脚本开始向微信发送报警信息:
[root@Zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@Zabbix-server alertscripts]# python weixin.py 用户名 标题 报警内容
------> 查看消息
报错:
NO module named requests
系统缺失python代码需要加载的模块信息
解决:
yum install python pip
pip install requests==version (可以安装指定版本)
创建微信报警媒介(指定路径下的脚本名称要写对):
--->右上角---->报警媒介---->指定收件人:
添加完成后启用微信报警媒介,可以暂时把Email报警媒介停用:
多开几个窗口 出发报警 测试
1.3 自定义钉钉报警
自定义机器人----->添加工作群组
自定义机器人 |
---|
关键字:zabbix |
wehook:xxx |
准备连dingding信平台实现报警脚本到该目录下
/usr/local/zabbix/lib/zabbix/alertscripts
进入到/usr/local/zabbix/alertscripts下编写dingding.py脚本(脚本中包含钉钉机器人的webhook值):
[root@SrtAly120 ~]# cd /usr/local/zabbix/lib/zabbix/alertscripts
[root@SrtAly120 alertscripts]# cat dingding.py
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="" #这里改为自己创建的机器人的webhook的值
user=sys.argv[1]
text=sys.argv[3] + "\n\n" + sys.argv[3]
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)
if os.path.exists("/usr/local/zabbix/log/dingding.log"):
f=open("/usr/local/zabbix/log/dingding.log","a+")
else:
f=open("/usr/local/zabbix/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()
: set ff 查看脚本格式 (doc ./不能直接执行no such of dirctor 需要指定python解释器)
赋予脚本执行权限
[root@SrtAly120 alertscripts]# chmod +x dingding.py
创建上面脚本中的日志路径(脚本日志属组可能是root,需要该为zabbix,不会报错)
[root@SrtAly120 alertscripts]# mkdir /usr/local/zabbix/log/
[root@SrtAly120 alertscripts]# t ouch /usr/local/zabbix/log/dingding.log
[root@SrtAly120 alertscripts]# chown zabbix.zabbix /usr/local/zabbix/log/dingding.log
手动测试脚本是否可以正常发送消息
这个条文档记录的测试信息,忽略
[root@SrtAly120 alertscripts]# ./dingding.py 电话号码 zabbix_test "测试下"
(关键子一定要有)
1.管理--->报警媒介类型--->创建报警媒介:
脚本传参的信息: zabbix宏 --- 内置变量
{ALERT.SENDTO} 接收信息人员地址
{ALERT.SUBJECT} 发送信息标题情况
{ALERT.MESSAGE} 发送消息内容情况
- 添加收件人
小人头 --- 报警媒介 --- 添加邮件报警收件人信息