Zabbix5.0钉钉告警实战

1、服务器环境准备(Centos7.6)

(1)

服务器1:zabbix服务端

服务器2:客户端

(2)

客户端服务器上安装agent,并且安装httpd服务,在zabbix网页添加此主机,并且配置监控项和触发器

①安装httpd服务

[root@controlnode alertscripts]# yum install httpd -y


②启动httpd服务并加入开机自启

[root@controlnode alertscripts]# systemctl start httpd

[root@controlnode alertscripts]# systemctl enable httpd

[root@controlnode alertscripts]# netstat -tunlp | grep 80


③创建主机

 

 

 

④创建监控项

 

 

 

⑤创建触发器

 

 

 

⑥环境准备完毕

 

2、钉钉环境准备

2.1、到钉钉官网下载pc版钉钉,安装、注册、登陆:

钉钉下载地址:https://www.dingtalk.com/

 

2.2、创建群聊和钉钉机器人:

1、创建群聊,把需要收到报警的人员都拉到这个群:

(1)

 

 

 (2)

 

 

 (3)

 

 

  

2.3、创建钉钉机器人:

(1)

 

 

 (2)

 

 

 (3)

 

 

 (4)

 

 

 (5)

 

 

 (6)

 

 

 (7)

 

 

 点击“设置说明”可以查看钉钉服务端API说明。

 

2.4、脚本配置:

(1)、查看zabbix-server脚本存放的位置:

[root@controlnode ~]# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/lib/zabbix/alertscripts

(2)、创建钉钉报警脚本:

[root@controlnode ~]# cd /usr/lib/zabbix/alertscripts/

[root@controlnode alertscripts]# vim dingding.py

#说明:以下脚本只要将webhook改为你自己的webhook值即可,其它的不需要改变。

复制代码
#说明:以下脚本只要将webhook改为你自己的webhook值即可,其它的不需要改变。
 
#!/usr/bin/python
 
#-*- coding: utf-8 -*-
 
#zabbix钉钉报警
 
 
import requests,json,sys,os,datetime
 
webhook="https://oapi.dingtalk.com/robot/send?access_token=feb43aea482d9da72e781d92dbfc074f701642a166f31194ff347954f500a404"
 
#说明:这里改为自己创建的机器人的webhook的值
 
user=sys.argv[1]
 
#发给钉钉群中哪个用户
 
text=sys.argv[3]
 
#发送的报警内容
 
data={
 
    "msgtype": "text",
 
    "text": {
 
        "content": text
 
    },
 
    "at": {
 
        "atMobiles": [
 
            user
 
        ],
 
        "isAtAll": False
 
    }
 
}
 
#钉钉API固定数据格式
 
headers = {'Content-Type': 'application/json'}
 
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
 
if os.path.exists("/var/log/zabbix/dingding.log"):
 
    f=open("/var/log/zabbix/dingding.log","a+")
 
else:
 
    f=open("/var/log/zabbix/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()
 
#将发送的告警信息写入本地日志/var/log/zabbix/dingding.log中
复制代码

(3)、赋予脚本执行权限和创建日志文件:

①、脚本赋予可执行权限:

[root@controlnode alertscripts]# chmod +x dingding.py

②、创建日志文件:

[root@controlnode alertscripts]# touch /var/log/zabbix/dingding.log

[root@controlnode alertscripts]# chown zabbix.zabbix /var/log/zabbix/dingding.log

(4)、手动测试脚本是否可以正常发送消息:

①、测试命令:

[root@controlnode alertscripts]# ./dingding.py qichangjun0110 test "这是条告警测试信息,请忽略"

参数说明:

1)qichangjun0110:钉钉群中任意一个人员的钉钉号。

如何查看自己的钉钉号:

 

 

 2)test:这里因脚本中没有设置接收参数,所以无实际意义,仅仅起到变量占位的作用。

3)"这是条告警测试信息,请忽略":这是具体的告警信息,告警信息必须包含“安全设置”

中自己设置的“自定义关键词”,否则无法发送告警信息,我这里设置的告警关键字是"告警"。

 

 

 注意:该脚本要求至少python2.6.6版本,且具有requests模块,否则会报如下错误:

Traceback (most recent call last):
 
  File "./dingding.py", line 4, in <module>
 
    import requests,json,sys,os,datetime
 
ImportError: No module named requests

解决办法如下:

yum install python-pip -y

pip install --upgrade pip

pip install requests

②、钉钉群收到报警信息:

 

 

 ③、在ZabbixServer上查看发送消息日志:

[root@controlnode alertscripts]# cat /var/log/zabbix/dingding.log

2.5、zabbix web 界面设置:

触发器触发"动作"——>特定的"报警媒介"——>单个用户的账号或用户组中用户的账号

1、创建报警媒介:

(1)

 

 

 (2)

脚本参数:

{ALERT.SENDTO}

#对应脚本中的,user=sys.argv[1](发给钉钉群中哪个用户)。

{ALERT.SUBJECT}

#代表发送的信息的标题,在"报表"的"动作日志"中可以看到。

{ALERT.MESSAGE}

#对应脚本中的,text=sys.argv[3](发送的报警内容)。

 

 

 2、创建报警动作,将报警发送给Admin用户:

(1)创建动作

 

 

 (2)添加触发器,添加上文环境准备的触发器

 

 

 (3)分别添加告警操作和恢复操作

 

 

 (4)添加告警操作

 

 

 "主题"对应"钉钉告警"媒介中的:{ALERT.SUBJECT}

"消息"对应"钉钉告警"媒介中的:{ALERT.MESSAGE}

 

主题:

故障名称(触发器名称):{EVENT.NAME}

 

消息:

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

(5)添加恢复操作

 

 

 (6)恢复操作配置详情

 

 

 主题:故障恢复:{EVENT.NAME}

消息:

恢复主机:{HOSTNAME1}

恢复时间:{EVENT.DATE} {EVENT.TIME}

主机IP:{HOST.IP}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

(7)点击添加

 

 

 3、给Admin用户添加报警媒介:

(1)

 

 

 (2)

 

 

 "收件人"对应"钉钉告警"中的:{ALERT.SENDTO}

特别注意:这里只需要添加钉钉群里的任何一个成员的钉钉账号即可,即添加一个收件人,这样在机器人群里成员都能看到告警信息.

如果添加多个收件人,则机器人群里就会发送多个告警信息,一个收件人发一条信息.

(3)

 

 

 2.6、报警测试(在zabbixServer服务器上进行测试):

(1)、httpd 服务停止告警:
①、停止httpd服务:

[root@controlnode alertscripts]# systemctl stop httpd

②、服务故障告警信息:

 

 

 (2)、httpd 服务恢复告警:

①、启动httpd服务:

[root@controlnode alertscripts]# systemctl start httpd

②、服务恢复告警信息:

 

 


原文链接:https://blog.csdn.net/qq_40165796/article/details/109849914

posted @   民宿  阅读(543)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示