首先在钉钉上开启钉钉机器人功能
说明:自定义关键词是zabbix发送过来的消息内容必须含有你定义的ERROR或者error字段,否则消息无法发送过来
ip地址段:一般都是zabbix-server的IP地址
webhook 是钉钉接口的地址,等会要复制粘贴到zabbix-server上面去
自定义机器人
钉钉提供了一个 webhook 地址,https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx。 复制地址
获取到Webhook地址后,用户可以使用任何方式向这个地址发起 HTTP POST 请求,即可实现
给该群组发送消息。
--------------------------------------------------------------------------------------------------------------------------------------
在zabbix-server服务器上编写发送到钉钉接口的脚本,一般都是用python编写的
vim /etc/zabbix/zabbix_server.conf
:/alertscripts 找到这一行(alertscripts是zabbix-server自定义脚本的目录,所有自定义的脚本都放在此处)
cd /usr/lib/zabbix/alertscripts/
vim dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://xxxxxxxxxx" 钉钉机器人擎天柱的webhook地址
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
"1527xxxxxx23" 发送给这个钉钉用户 (钉钉用户都是手机号码注册的)
],
"isAtAll": True 发送给群里面的所有人(不想让其他人收到报警这里填False即可)
}
}
print(requests.post(api_url,json.dumps(json_text),headers=headers).content)
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
:wq保存退出
chmod 755 dingding.py
手动测试是否能发消息到钉钉
./dingding.py "ERROR could not found java-scripts"
注意这里的内容包含了钉钉自定义的关键词ERROR,如果没有关键词你是发不过去的
去钉钉上面看看有没有收到消息
说明zabbix-server手动发送消息到钉钉的成功,接口无问题
----------------------------------------------------------------------------------------------------------------------
上面是手动测试的,现在我们在zabbix-server页面配置zabbix自动发送报警内容到钉钉
名称就叫钉钉好了(可以随便取名)
类型选择脚本
脚本名称对应zabbix服务器/usr/lib/zabbix/alertscripts/路径下的dingding.py,名字要和dingding.py保持一致
脚本参数{ALERT.MESSAGE}
网上还有很一部分人这里写-msg={ALERT.MESSAGE} 效果应该是一样的(我不确定)
直接用管理员用户,也可以创建用户
用系统默认的好了,这里面的信息不要动,我没标红色框的不要动好吗,敌不动我不动
动这个
点击添加
类型是钉钉
收件人是 我的钉钉账户(也就是你的手机号码,手机号码就是钉钉账户,要我说几遍)
都勾选上,不要质疑我
手动添加主机
表示添加成功
名称随便取
名称 website 我的应用服务就叫website,所以取名叫website,方便(可以任意取名)
类型 选择zabbix主动模式(这里不一定是主动模式,根据实际情况选择)
键值 是非常重要的
我这里是检查tomcat的日志文件
log[/root/logs/website-log/website-error-2020-01-02.log,"ERROR|error",,,skip,,]
或许你有疑问,如果这里是轮训日志怎么办
log[/root/logs/website-log/website-error-`date +%F`.log,"ERROR|error",,,skip,,]
这是有问题的,log不支持正则表达式`date +%F`
logtr[/root/logs/website-log/website-error-`date +%F`.log,"ERROR|error",,,skip,,]
logtr倒是支持正则表达式,这样写也不报错
但是好像消息发送不出去(我不知是哪里有问题)
我建议还是监控web1和web2的原始日志吧website-error.log(这样要监控两边,很麻烦)
如果你是测试的话我建议在zabbix-agent上创建一样的日志
zabbix-agent服务器
cd /root
mkdir logs
cd logs
mkdir website-log
cd website-log
touch website-error-2020-01-02.log
等会测试完了之后你可以删掉
配置动作(就是如果检测到website-error-2020-01-02.log内容有ERROR字段之后该做些什么)
在新的触发条件里面选择 触发器示警度 选择 >= 信息
在点击添加
触发器示警度>= 信息 表示如果报警的后果要大于等于信息,就开干
告警主机:{HOST.NAME}
告警信息:{TRIGGER.NAME}
告警项目:{ITEM.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警问题:{ITEM.VALUE}
当前状态:故障
故障已持续{EVENT.AGE},请尽快处理
事件ID:{EVENT.ID}
告警信息:{TRIGGER.NAME}
告警项目:{ITEM.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
告警问题:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}
故障共持续{EVENT.AGE}
事件ID:{EVENT.ID}
--------------------------------------------------------------------------------------------------------------------------------------------
现在开始测试
zabbix-agent
cd /root/logs/website-log
echo "17:12:56.370 ERROR com.alibaba.druid.pool.DruidDataSource[ROW=1087][mdc=Hd1bb2J81X] - testWhileIdle is true, validationQuery not set ">>website-error-2020-01-02.log
-----------------------------------------------------------------------------------------------------------------------------------------
去钉钉上看看
-----------------------------------------------------------------------------------------------------------------------
在到zabbix-server上面
我这里本来是1,我手动把问题关闭了就是0了
你那里应该是显示1
点击有问题的那一项,进去之后确认问题,
状态:输入ok
然后 在关闭问题的框上打勾
----------------------------------------------------------------------------------------------------------------------------
去钉钉上看看