当前位置:   article > 正文

Zabbix告警通知(钉钉告警)_zabbix 钉钉告警

zabbix 钉钉告警

目录

1获取钉钉群机器人

2 配置钉钉告警脚本

3 添加报警媒介

4 添加消息模板

5 添加用户报警媒介

6 添加动作

7 钉钉通知测试


1获取钉钉群机器人

创建或者加入钉钉企业内部群

在群聊中添加机器人

群设置>机器人>添加机器人>自定义>添加

注:如果忘记保存密钥和Webhook可以在机器人设置中查找

2 配置钉钉告警脚本

注意:所有配置均在zabbix server服务器上完成

①安装python依赖模块

yum -y install python3 python3-requests

②配置钉钉告警的配置脚本

在 /etc/zabbix/ 目录下创建 zabbix_dingding.conf 文件

vim /etc/zabbix/zabbix_ding.conf

添加如下内容:

  1. [config]
  2. log_path=/var/log/zabbix/zabbix_ding.log
  3. # webhook和secret的内容复制实际获取到的信息
  4. webhook=https://oapi.dingtalk.com/robot/send?access_token=f6bd4c0b8aa5011bc7d6f81ea6018fd45c2a7c21c1ecf1f9e03f9e61cabedfba
  5. secret=SECe81b7bae0862dac26709b82f06f213aea0d3e2ae74eeed15a194ec4d06379201

在 /var/log/zabbix 目录中创建钉钉告警日志文件 zabbix_dingding.log

touch /var/log/zabbix/zabbix_ding.log

设置钉钉告警日志文件zabbix_ding.log的所有权

chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log

③配置钉钉告警执行脚本

在 zabbix_server.conf 中配置告警脚本的路径

vim /etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/lib/zabbix/alertscripts

在 /usr/lib/zabbix/alertscripts 目录中添加执行脚本 dingding.py 文件

cd /usr/lib/zabbix/alertscripts
vim dingding.py

添加下面的内容:

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

设置脚本目录的所有权

chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/

给脚本x权限后测试

chmod +x dingding.py
./dingding.py  user subject hello

3 添加报警媒介

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

4 添加消息模板

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

5 添加用户报警媒介

6 添加动作

7 钉钉通知测试

关闭nginx

查看问题

查看消息

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

闽ICP备14008679号