当前位置:   article > 正文

Zabbix 配置钉钉报警_zabbix钉钉告警

zabbix钉钉告警

如有错误,敬请谅解!

此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!!

1. 创建服务群【手机钉钉】|【电脑钉钉】- 右上角【+】-【发起群聊】-【选人建群】/选择不同的群类型创建;

2 .创建钉钉机器人

2.1. 步骤:智能群助手—>添加机器人—>自定义—>添加

2.2. 进行机器人设置

3. zabbix设置

3.1.编写脚本

用python编写:

  1. [root@node1 alertscripts]# cat dingding.py
  2. #!/usr/bin/env python3
  3. #coding:utf-8
  4. #zabbix钉钉报警
  5. import requests,json,sys,os,datetime
  6. webhook="https://oapi.dingtalk.com/robot/send?access_token=???????????????????????????????"
  7. user=sys.argv[1]
  8. text=sys.argv[3]
  9. data={
  10. "msgtype": "text",
  11. "text": {
  12. "content": text
  13. },
  14. "at": {
  15. "atMobiles": [
  16. user
  17. ],
  18. "isAtAll": False
  19. }
  20. }
  21. headers = {'Content-Type': 'application/json'}
  22. x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
  23. if os.path.exists("/usr/lib/zabbix/logs/dingding.log"):
  24. f=open("/usr/lib/zabbix/logs/dingding.log","a+")
  25. else:
  26. f=open("/usr/lib/zabbix/logs/dingding.log","w+")
  27. f.write("\n"+"--"*30)
  28. if x.json()["errcode"] == 0:
  29. f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
  30. f.close()
  31. else:
  32. f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text))
  33. f.close()

3.2. 创建上面脚本日志的路径和文件

以bash格式编写:

  1. [root@node1 alertscripts]# mkdir -p /usr/lib/zabbix/logs/
  2. [root@node1 alertscripts]# touch /usr/lib/zabbix/logs/dingding.log
  3. [root@node1 alertscripts]# chown zabbix.zabbix dingding.py
  4. [root@node1 alertscripts]# chown zabbix.zabbix /usr/lib/zabbix/logs/dingding.log
  5. [root@node1 alertscripts]# chmod +x dingding.py
  6. 测试脚本:
  7. [root@node1 alertscripts]# ./dingding.py a b "zabbix: 这是测试"

4. 机器人使用加签配置

4.1. 在钉钉群中创建机器人

  • 安全模式选择加签,并复制一个 67位字符串
  • 记录webhook地址
    获取到的这两串字符配置到后面的zabbix_ding.conf文件中

4.2. Zabbix 服务器端配置

4.2.1 安装Python3、相关包以及创建钉钉发送消息日志文件

以bash格式:

  1. # 安装python3,脚本是基于Python3写的
  2. yum install -y python3
  3. # 安装pip,pip是python的包管理器
  4. # 下载pip安装脚本
  5. curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  6. # 运行安装脚本
  7. sudo python3 get-pip.py
  8. # 安装puthon包
  9. pip3 install configparser
  10. pip3 install requests
  11. # 创建钉钉发送日志文件路径
  12. touch /var/log/zabbix/zabbix_ding.log
  13. chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log

4.2.2 将脚本及配置文件上传至服务器zabbix脚本目录

  1. 修改以下配置文件zabbix_ding.conf,并将文件上传至/etc/zabbix/

bash:

  1. [config]
  2. # 日志文件
  3. log_path=/var/log/zabbix/zabbix_ding.log
  4. #钉钉机器人 webhook 值
  5. webhook=https://oapi.dingtalk.com/robot/send?access_token=b3e6fa0f410e7ced04c81680f036xxxx
  6. # 安全设置 -- 加签
  7. secret=SEC64d20b4e9d2e2677f7aa01d2a7c2f9xxxx
  1. 自定义修改,并复制脚本内容,上传至AlertScriptsPath路径下

bash:

  1. # 查看zabbix的脚本默认路径,请注意使用您自己的zabbix_server.conf
  2. cat /etc/zabbix/zabbix_server.conf |grep AlertScriptsPath
  3. ### Option: AlertScriptsPath
  4. # AlertScriptsPath=${datadir}/zabbix/alertscripts
  5. AlertScriptsPath=/usr/lib/zabbix/alertscripts

python:

  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)

bash:

  1. # 修改脚本权限
  2. chown zabbix.zabbix /lib/zabbix/alertscripts/zabbix_ding.py
  3. chmod u+x /lib/zabbix/alertscripts/zabbix_ding.py

bash:

  1. # 测试脚本内容
  2. [root@node1 alertscripts]# ./ding.py a b "这是监控测试"

5. Zabbix监控界面配置

5.1. 创建报警媒介. 三个参数分别是:ALERT.SENDTO ALERT.SUBJECT ALERT.MESSAGE

5.2. 修改报警模板

此处和微信报警类似,过程略。不同的是报警信息要添加之前定义的关键词。

5.3. 给用户添加报警媒介

5.4. 配置动作

6. 测试报警

如有错误,请联系作者删除

并恳请同行朋友予以斧正,万分感谢!

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

闽ICP备14008679号