当前位置:   article > 正文

zabbix之邮箱告警,钉钉告警,电话告警_zabbix钉钉告警

zabbix钉钉告警

安装zabbix的服务器 zabbix-server 192.168.231.219

zabbix-agent  192.168.231.217 ,已安装nginx

前提

Zabbix告警是指当监控项的值超过了预设的阈值时,Zabbix会向管理员发送告警信息,以便管理员及时处理问题。

浏览器访问  192.168.231.219/zabbix

创建监控项

检查 TCP 端口 是否处于侦听状态。返回 0 - 未侦听;1 - 正在侦听

创建触发器

当ngixn开启时80端口存在监控正常,当nginx端口不存在时,那么就会触发警报

触发器动作

也就是监控项在监控nginx端口是否被监听,如果端口不存在,那么就会触发触发器,动作就会执行,动作执行的命令时 启动nginx服务

在zabbix-agent服务器修改

  1. [root@zabbix-agent ~]# vim /etc/sudoers
  2. 101行添加
  3. zabbix ALL=(ALL) NOPASSWD: ALL

修改配置文件

  1. [root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. 87行左右
  3. EnableRemoteCommands=1
  4. 102行左右
  5. LogRemoteCommands=1
  6. 这个是开启的,后面添加等于1即可

修改完配置文件,记得重启服务

systemctl restart zabbix-agent

这样的话,在zabbix-agent关闭nginx服务的话 就会触发触发器,引发动作去执行启动命令,那么有时候我们不知道什么时候会发生这种情况,这样就涉及到自动告警,可以借助第三方的服务 来告诉我们监控出现的告警情况。

以前三种告警都是基于关闭nginx服务,没有nginx80端口,来触发告警的前提做的实验

zabbix邮箱告警

注册网易邮箱

注册地址:163网易免费邮-你的专业电子邮局

开启SMTP服务,获取授权码

在zabbix页面查看:

192.168.231.219/zabbix

1. SMTP服务器如果是网易就写163,如果是QQ邮箱就写qq

2. 服务器端口号默认是25,不加密,465是加密,如果填写465那么下main安全链接就得选择SSL/TLS

3. SMTP HELO, SMTP电邮,用户名都写你的网易邮箱即可。密码写之前网易获取到的授权码

消息模板

有自动生成是英文的,如果想是中文,更改就好

默认信息:邮件的主题
主机: {HOST.NAME1}
时间: {EVENT.DATE} {EVENT.TIME}
级别: {TRIGGER.SEVERITY}
触发: {TRIGGER.NAME}
详情: {ITEM.NAME1}:{ITEM.KEY1}:{ITEM.VALUE1}
状态: {TRIGGER.STATUS}
项目:{TRIGGER.KEY1}
事件ID:{EVENT.ID}

我这里是发现问题是英文,解决问题时中文

zabbix添加动作

测试媒介类型

收件人是我的QQ邮箱

给用户绑定媒介类型

开始测试,在zabbix-agent端测试

[root@zabbix-agent ~]# systemctl stop nginx 

查看邮箱

发现错误

解决错误

查看报表--动作日志

zabbix钉钉机器人告警

在钉钉中创建群聊(同组的同学创建一个群聊),在群里面添加自定义机器人

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

webhook:记住webhook的地址

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

在zabbix-server端进行操作

  1. 下载python
  2. [root@zabbix-server ~]# yum -y install python3 python3-requests

配置钉钉告警脚本zabbix_ding.conf

  1. [root@zabbix-server ~]# 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=c1d11ecf6704f008eb25de644ed5cead752c065c0d11f9f89b58273cf0c78a96
  5. secret=SECc26e5bc55c64d454f15a8bdcce6825b7e5bb4f6fecc38025d2845837415192d7

将之前钉钉创建机器人时候生成的俩个码 粘贴复制过来,注意别少复制

创建钉钉告警日志文件zabbix_ding.log

[root@zabbix-server ~]# touch /var/log/zabbix/zabbix_ding.log 

设置权限

[root@zabbix-server ~]#  chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log 

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

vim /etc/zabbix/zabbix_server.conf
在zabbix_server.conf中配置告警脚本的路径
# AlertScriptsPath=/usr/lib/zabbix/alertscripts
我这里修改为
AlertScriptsPath=/usr/lib/zabbix/alertscripts

abbix5.0的默认是开启的

在/usr/bin/zabbix/alertscripts目录中执行的脚本dingding.py的内容

  1. [root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
  2. [root@zabbix-server alertscripts]# vim dingding.py
  3. 以下内容添加至dingding.py内
  4. #!/usr/bin/env python3
  5. # coding:utf8
  6. #
  7. import configparser
  8. import os
  9. import time
  10. import hmac
  11. import hashlib
  12. import base64
  13. import urllib.parse
  14. import requests
  15. import json
  16. import sys
  17. config = configparser.ConfigParser()
  18. config.read('/etc/zabbix/zabbix_ding.conf', encoding='utf-8')
  19. log_path = config.get('config', 'log_path')
  20. api_url = config.get('config', 'webhook')
  21. api_secret = config.get('config', 'secret')
  22. log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  23. # 钉钉机器人文档说明
  24. # https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
  25. def get_timestamp_sign():
  26. timestamp = str(round(time.time() * 1000))
  27. secret = api_secret
  28. secret_enc = secret.encode('utf-8')
  29. string_to_sign = '{}\n{}'.format(timestamp, secret)
  30. string_to_sign_enc = string_to_sign.encode('utf-8')
  31. hmac_code = hmac.new(secret_enc, string_to_sign_enc, 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://ding-doc.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)

设置脚本目录的所有权

[root@zabbix-server alertscripts]# chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/

给脚本执行权限执行

  1. [root@zabbix-server alertscripts]# chmod +x dingding.py
  2. [root@zabbix-server alertscripts]# ./dingding.py user subject mesages

钉钉群查看消息

在页面端进行操作,创建媒介类型并测试

脚本传输参数

  1. {ALERT.SENDTO}
  2. {ALERT.SUBJECT}
  3. {ALERT.MESSAGE}

消息模板:

以下消息模板会自动填充

也可以更改

自定义消息内容

主题:服务器报警
消息:
告警主机:{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}

开始测试

添加动作:远程执行命令,发邮件

为用户添加报警媒介

开始测试,在zabbix-agent端测试

[root@zabbix-agent ~]# systemctl stop nginx 

查看报表--动作日志

电话告警

使用第三方服务:睿象云-智能运维管理平台-智能运维系统-自动化运维性能监控平台 睿象云

注册账号,登录

选择完成后 按照右面的提示步骤做可以,我这里将文件下载到前面做钉钉告警的路径下

在zabbix-server端进行操作

  1. [root@zabbix-server zabbix]# cd /usr/lib/zabbix/alertscripts/
  2. 下载
  3. [root@zabbix-server alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.3.tar.gz

解压,安装

  1. [root@zabbix-server alertscripts]# tar -xzf ca_zabbix_release-4.0.3.tar.gz
  2. [root@zabbix-server alertscripts]# cd cloudalert/bin
  3. [root@zabbix-server bin]# bash install.sh b8bf3f8e2132439191fddb2f68224de5

注意事项

1、在安装过程中根据安装提示,输入zabbix管理地址、管理员用户名、密码。

 2、zabbix管理地址正确示例:http://zabbix.server.com/zabbix 或是:https://zabbix.server.com/zabbix

4、修改运行zabbix服务权限与cloudalert探针目录权限
请保证运行zabbix服务的权限和cloudalert探针目录的权限保持一致,不一致会导致告警无法正常接入。

5、验证告警集成
产生新的zabbix告警(problem),动作状态为“已送达”表示集成成功。

分配策略

分配策略:什么类型的报警发送到哪个用户

通知策略

通知策略:采用什么方式进行通知

zabbix添加动作

给用户绑定报警媒介类型

查看报警媒介类型自动生成

开始测试告警

[root@zabbix-agent ~]# systemctl stop nginx 

    

由于是设置了发生故障通知与故障解决通知,因此会有俩个电话

查看报表--动作日志

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

闽ICP备14008679号