当前位置:   article > 正文

zabbix配置钉钉报警_zabbix配置钉钉告警

zabbix配置钉钉告警

一.  通过关键字方式报警:

        1.  在钉钉中创建一个群聊:

        2.  在群聊中添加一个机器人:在" 群设置 -- 智能群助手 -- 添加机器人 -- 选择自定义机器人 --填入机器人的信息 "。

 Webhook一定要妥善保存。

        3.  配置钉钉报警的脚本:

  1. ##将脚本写在/usr/lib/zabbix/alertscripts/目录下
  2. [root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/
  3. ##安装python3
  4. [root@zabbix alertscripts]# yum install python3
  5. [root@zabbix alertscripts]# vim ding.py
  6. #!/usr/bin/env python3
  7. #zabbix钉钉报警
  8. import requests,json,sys,os,datetime
  9. ##刚刚保存的Webhook
  10. webhook="https://oapi.dingtalk.com/robot/send?
  11. access_token=46108713e975eb4fb1db581eb04bf66a7e03ab9ad85665c59307094277ef9220"
  12. user=sys.argv[1] ##执行脚本时传递的第一个参数,发送用户
  13. text=sys.argv[3] ##执行脚本时传递的第三个参数,发送内容
  14. data={
  15. "msgtype": "text",
  16. "text": {
  17. "content": text
  18. },
  19. "at": {
  20. "atMobiles": [
  21. user
  22. ],
  23. "isAtAll": False
  24. }
  25. }
  26. headers = {'Content-Type': 'application/json'}
  27. x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
  28. if os.path.exists("/usr/lib/zabbix/logs/dingding.log"):
  29. f=open("/usr/lib/zabbix/logs/dingding.log","a+")
  30. else:
  31. f=open("/usr/lib/zabbix/logs/dingding.log","w+")
  32. f.write("\n"+"--"*30)
  33. if x.json()["errcode"] == 0:
  34. f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
  35. f.close()
  36. ##为脚本添加执行权限
  37. [root@zabbix alertscripts]# chmod +x ding.py
  38. ##修改脚本的属主和属组:
  39. [root@zabbix alertscripts]# chown zabbix.zabbix ding.py

        4.  创建日志文件:

  1. [root@zabbix alertscripts]# mkdir -p /usr/lib/zabbix/logs/
  2. [root@zabbix alertscripts]# touch /usr/lib/zabbix/logs/dingding.log
  3. [root@zabbix alertscripts]# chown zabbix.zabbix -R /usr/lib/zabbix/logs/

         5.  测试脚本是否能运行成功:

[root@zabbix alertscripts]# ./ding.py a b "zabbix: 这是测试"

         6.  配置zabbix报警:

                1>.  创建报警媒介类型:

                 2>.  用户关联报警媒介:

 

                3>.  配置报警动作:

 

         7.  模拟触发触发器,观察是否会发送信息:

二.  通过加签方式报警: 

        1.  修改机器人配置为加签方式:在" 群设置 -- 智能群助手 --  选择刚刚的机器人 -- 安全设置点击加签 "。

 Webhook不变,加签一定要妥善保存。

        2.  安装pip,pip是python的包管理器

  1. ## 下载pip安装脚本
  2. [root@zabbix ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  3. ## 安装python3.8
  4. [root@zabbix ~]# dnf install python38
  5. ## 运行安装脚本
  6. [root@zabbix ~]# python3.8 get-pip.py

        3.  创建钉钉发送日志文件路径:

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

         4.  创建配置文件zabbix_ding.conf,在/etc/zabbix目录下:

  1. [root@zabbix ~]# vim /etc/zabbix/zabbix_ding.conf
  2. [config]
  3. ## 日志文件
  4. log_path=/var/log/zabbix/zabbix_ding.log
  5. ## 钉钉机器人 webhook 值
  6. webhook=https://oapi.dingtalk.com/robot/send?
  7. access_token=46108713e975eb4fb1db581eb04bf66a7e03ab9ad85665c59307094277ef9220
  8. ## 安全设置 -- 加签
  9. secret=SECd5752bd347a6bdcb07cee150062c25501c57755a796459532c5c0fcf5b07e163

         5.  配置钉钉报警的脚本:

  1. [root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/
  2. [root@zabbix alertscripts]# vim zabbix_ding.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,
  31. digestmod=hashlib.sha256).digest()
  32. sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
  33. return timestamp, sign
  34. # 获取加签后的链接
  35. def get_signed_url():
  36. timestamp, sign = get_timestamp_sign()
  37. webhook = api_url + "&timestamp=" + timestamp + "&sign=" + sign
  38. return webhook
  39. # 定义消息模式
  40. def get_webhook(mode):
  41. if mode == 0: # only 关键字
  42. webhook = api_url
  43. elif mode == 1 or mode == 2: # 关键字和加签 或 # 关键字+加签+ip
  44. webhook = get_signed_url()
  45. else:
  46. webhook = ""
  47. print("error! mode: ", mode, " webhook : ", webhook)
  48. return webhook
  49. def get_message(text, user_info):
  50. # 和类型相对应,具体可以看文档 :https://dingdoc.dingtalk.com/doc#/serverapi2/qf2nxq
  51. # 可以设置某个人的手机号,指定对象发送
  52. message = {
  53. "msgtype": "text", # 有text, "markdown"、link、整体跳转ActionCard 、独立跳转ActionCard、FeedCard类型等
  54. "text": {
  55. "content": text # 消息内容
  56. },
  57. "at": {
  58. "atMobiles": [
  59. user_info,
  60. ],
  61. "isAtAll": False # 是否是发送群中全体成员
  62. }
  63. }
  64. return message
  65. # 消息发送日志
  66. def log(info):
  67. if os.path.exists(log_path):
  68. log_file = open(log_path, "a+")
  69. else:
  70. log_file = open(log_path, "w+")
  71. log_file.write(info)
  72. def send_ding_message(text, user_info):
  73. # 请求的URL,WebHook地址
  74. # 主要模式有 0 : 关键字 1:# 关键字 +加签 3:关键字+加签+IP
  75. webhook = get_webhook(1)
  76. # 构建请求头部
  77. header = {
  78. "Content-Type": "application/json",
  79. "Charset": "UTF-8"
  80. }
  81. # 构建请求数据
  82. message = get_message(text, user_info)
  83. # 对请求的数据进行json封装
  84. message_json = json.dumps(message)
  85. # 发送请求
  86. info = requests.post(url=webhook, data=message_json, headers=header).json()
  87. code = info["errcode"]
  88. errmsg = info["errmsg"]
  89. if code == 0:
  90. log(log_time + ":消息已发送成功 返回信息:%s %s\n" % (code, errmsg))
  91. else:
  92. log(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
  93. print(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
  94. exit(3)
  95. if __name__ == "__main__":
  96. text = sys.argv[3]
  97. user_info = sys.argv[1]
  98. send_ding_message(text, user_info)

        6.  为脚本添加执行权限:

  1. [root@zabbix alertscripts]# chown zabbix.zabbix zabbix_ding.py
  2. [root@zabbix alertscripts]# chmod +x zabbix_ding.py

        7.  测试脚本是否能执行成功:

[root@zabbix alertscripts]# ./zabbix_ding.py zhang li "监控测试"

        8.  配置zabbix监控:步骤和方式一一致,但是报警信息中就不需要再加入关键词" zabbix "

        9.  模拟触发触发器,观察是否会发送信息:

 

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

闽ICP备14008679号