当前位置:   article > 正文

Zabbix钉钉机器人告警_zabbix 钉钉告警

zabbix 钉钉告警

目录

一.在钉钉群里添加机器人

二.配置钉钉告警脚本

1.安装python依赖模块python-requests

2.配置钉钉告警配置脚本zabbix_ding.conf

3.创建告警日志并且授权。

4.配置钉钉告警执行脚本dingding.py

5.测试

三.配置zabbix告警

1.创建媒介

2.给用户添加报警媒介

3.配置动作

 4.测试


一.在钉钉群里添加机器人

通过自定义webhook接入自定义服务

注意:webbhook:记住webhhook地址和;

安全设置:设置加签,只有信息内容包含签才会被机器人发送。

314632f7bc3149e881cf30ad6116adfc.png01b4781e27854845b06506b01e1ff0f4.png

二.配置钉钉告警脚本

1.安装python依赖模块python-requests

yum -y install python3 python3-requests

2.配置钉钉告警配置脚本zabbix_ding.conf

在/etc/zabbix下创建zabbix_ding.conf

  1. [root@server01 ~]# vim /etc/zabbix/zabbix_ding.conf
  2. [config]
  3. log_path=/var/log/zabbix/zabbix_ding.log
  4. webhook=https://oapi.dingtalk.com/robot/send?access_token=2d691339c865c548c6f2d19af32094eefd054e63d520815f39098bb373fd3516
  5. secret=SEC3e31084bf8b8fbe4897918035a6049359c125bb3a204048045ce68b034c2596d

3.创建告警日志并且授权。

  1. [root@server01 ~]# touch /var/log/zabbix/zabbix_ding.log
  2. [root@server01 ~]# chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log

4.配置钉钉告警执行脚本dingding.py

注意: 系统需要同步时间

  • 在/usr/lib/zabbix/alertscripts目录中执行的脚本dingding.py的内容
  1. [root@server01 ~]# cd /usr/lib/zabbix/alertscripts/
  2. [root@server01 alertscripts]# vim dingding.py
  3. #!/usr/bin/env python3
  4. # coding:utf8
  5. #
  6. import configparser
  7. import os
  8. import time
  9. import hmac
  10. import hashlib
  11. import base64
  12. import urllib.parse
  13. import requests
  14. import json
  15. import sys
  16. config = configparser.ConfigParser()
  17. config.read('/etc/zabbix/zabbix_ding.conf', encoding='utf-8')
  18. log_path = config.get('config', 'log_path')
  19. api_url = config.get('config', 'webhook')
  20. api_secret = config.get('config', 'secret')
  21. log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  22. # 钉钉机器人文档说明
  23. # https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
  24. def get_timestamp_sign():
  25. timestamp = str(round(time.time() * 1000))
  26. secret = api_secret
  27. secret_enc = secret.encode('utf-8')
  28. string_to_sign = '{}\n{}'.format(timestamp, secret)
  29. string_to_sign_enc = string_to_sign.encode('utf-8')
  30. hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
  31. sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
  32. return timestamp, sign
  33. # 获取加签后的链接
  34. def get_signed_url():
  35. timestamp, sign = get_timestamp_sign()
  36. webhook = api_url + "&timestamp=" + timestamp + "&sign=" + sign
  37. return webhook
  38. # 定义消息模式
  39. def get_webhook(mode):
  40. if mode == 0: # only 关键字
  41. webhook = api_url
  42. elif mode == 1 or mode == 2: # 关键字和加签 或 # 关键字+加签+ip
  43. webhook = get_signed_url()
  44. else:
  45. webhook = ""
  46. print("error! mode: ", mode, " webhook : ", webhook)
  47. return webhook
  48. def get_message(text, user_info):
  49. # 和类型相对应,具体可以看文档 :https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
  50. # 可以设置某个人的手机号,指定对象发送
  51. message = {
  52. "msgtype": "text", # 有text, "markdown"、link、整体跳转ActionCard 、独立跳转ActionCard、FeedCard类型等
  53. "text": {
  54. "content": text # 消息内容
  55. },
  56. "at": {
  57. "atMobiles": [
  58. user_info,
  59. ],
  60. "isAtAll": False # 是否是发送群中全体成员
  61. }
  62. }
  63. return message
  64. # 消息发送日志
  65. def log(info):
  66. if os.path.exists(log_path):
  67. log_file = open(log_path, "a+")
  68. else:
  69. log_file = open(log_path, "w+")
  70. log_file.write(info)
  71. def send_ding_message(text, user_info):
  72. # 请求的URL,WebHook地址
  73. # 主要模式有 0 : 关键字 1:# 关键字 +加签 3:关键字+加签+IP
  74. webhook = get_webhook(1)
  75. # 构建请求头部
  76. header = {
  77. "Content-Type": "application/json",
  78. "Charset": "UTF-8"
  79. }
  80. # 构建请求数据
  81. message = get_message(text, user_info)
  82. # 对请求的数据进行json封装
  83. message_json = json.dumps(message)
  84. # 发送请求
  85. info = requests.post(url=webhook, data=message_json, headers=header).json()
  86. code = info["errcode"]
  87. errmsg = info["errmsg"]
  88. if code == 0:
  89. log(log_time + ":消息已发送成功 返回信息:%s %s\n" % (code, errmsg))
  90. else:
  91. log(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
  92. print(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
  93. exit(3)
  94. if __name__ == "__main__":
  95. text = sys.argv[3]
  96. user_info = sys.argv[1]
  97. send_ding_message(text, user_info)
  • 在zabbix_server.conf中配置告警脚本的路径
  1. [root@server01 ~]# vim /etc/zabbix/zabbix_server.conf
  2. AlertScriptsPath=/usr/lib/zabbix/alertscripts
  • 设置脚本所有权和执行权
  1. [root@server01 ~]# chown zabbix.zabbix -R /usr/lib/zabbix/alertscripts/
  2. [root@server01 ~]# cd /usr/lib/zabbix/alertscripts/
  3. [root@server01 alertscripts]# chmod +x dingding.py
  4. [root@server01 alertscripts]# ll
  5. 总用量 4
  6. -rwxr-xr-x 1 zabbix zabbix 3334 1115 17:50 dingding.py

5.测试

[root@server01 alertscripts]# ./dingding.py  user subject okok!

d6d0d26dd82f434bacc0cc46fc04fd20.png

三.配置zabbix告警

1.创建媒介

管理--->报警媒介类型--->创建报警媒介类型

脚本参数:{ALERT.SENDTO}
                  {ALERT.SUBJECT}
                  {ALERT.MESSAGE}

a8c9f0b8526b4b70a7de0ea8d3677e5f.png

创建消息模板:添加问题模板和问题恢复模板。

e1133c2a0dd7493282c1e600b815bcd2.png

消息模板

主题:服务器报警
消息:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}


主题:服务器已恢复
消息:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}

测试媒介:

可以看出机器人已发送测试消息。

4c94198d87b8432c87fce59285336c89.png

fef979da3d2c4655ae0ca28816488d25.png

2.给用户添加报警媒介

管理-->用户-->Admin

添加后需要更新

8ed08e8367f6494ab3ec1a5e6a620843.png

3.配置动作

这里需要有触发器才能配置动作。

配置--->动作

db6ba8cb03d9407fb5e01bb80edbfb83.png

  •  添加具体操作

操作:

1513a87f877c4f49bafb8c1b292cd4e5.png

da96cf5370de46fba8bcfe5a5bfe089b.png还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:

[root@server02 ~]# visudo          #相当于“vim /etc/sudoers”
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)   ALL
    zabbix    ALL=(ALL)   NOPASSWD: ALL     #添加的一行,表示不需要输入密码
​
[root@server02 ~]#  vim /etc/zabbix/zabbix_agentd.conf 
    EnableRemoteCommands=1          #允许接收远程命令  修改原有的值,不要在末尾追加
    LogRemoteCommands=1             #把接收的远程命令记入日志
​
[root@server02 ~]#  systemctl restart zabbix-agent.service

恢复操作:

d981b7765389441a8ec4b949ecc0e416.png

 4.测试

这里我们监控的是客户端的22端口,将22端口停掉。机器人会发出警告。

[root@server02 ~]# systemctl  stop sshd

12cd435d5b27469084a87d568c56eac6.png

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/898488
推荐阅读
相关标签
  

闽ICP备14008679号