欢迎光临,赤鹿小组
记录过程,分享经验

利用Python编写钉钉机器人脚本,实现Zabbix自动化监控

Zabbix,Nagios 等监控软件在运维方面越来越受青睐,因为能够准时,及时的将服务器产生的故障信息,发送给运维人员,以便运维人员能够及时的解决问题。但是近来,越来越多的公司就偏向了的 zabbix 阵营,当然选择这东西,因人而异。

zabbix 的部署可参考 前面 zabbix3.4.4 源码安装部署zabbix_server

编者在学习了 Python 一段时间后,发现 Zabbix Api 可以利用脚本的形式实现 Zabbix 自动监控,所以编者在兴趣驱使下,在查阅了相关的资料后,就开始使用自己的云服务器进行实验。

所以本文介绍的就是如何使用 Python,Zabbix Api,钉钉机器人,来实现自动化监控。

既然是钉钉机器人,那么在开始实现的 zabbix 自动化监控之前,肯定是先有钉钉添加机器人才能实现。

1、首先,在钉钉上建立群聊,然后在群聊上添加钉钉机器人:
DingDing Robot

DingDing Robot

DingDing Robot

到这里,钉钉机器人已经创建成功,在这里需要着重强调是,一定要将网络的api接口保存。在编写脚本时,需要用到接口信息。

接下来就是编写的钉钉机器人脚本,需要注意的是,脚本需要放在 zabbix 的 alertscripts 目录下(如果不知道该目录的位置,可以使用 find 命令查找 find / -iname alertscripts,脚本具体内容附下文:

[[email protected] ] find /-iname "alertscripts"
#!/usr/bin/python
# -*- conding:utf8-*-
# Author Scong

import requests
import json
import sys
import os

url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxx"    # 这里的url就是webhook的Api接口
headers = {'Content-Type': 'application/json;charset=utf-8'}    # 头部信息,Zabbix官方文档写法,可以查看zabbix官方文档

def message(text):                    # 定义信息函数
    text_info= {                      # 编写规则可以查看Zabbix官方文档的Zabbix Api
    "msgtype": "text",
    "at": {
           "atMobiles": [
           "132xxxxx672"
            ],
            "isAtAll": False
          },
          "text": {
             "content": text
            }
        }
     print requests.post(url,json.dumps(text_info),headers=headers).content    # 将返回的数据编码成 JSON 字符串

if __name__ == '__main__':        # 调用message函数
      text = sys.argv[1]
      message(text)

如果想知道自己的脚本是否可用,可以在命令行下(针对 Linux 操作系统),输入python dingding.py 123 ,如果你在钉钉上收到了信息,则说明该脚本可用。

在上述步骤都完成后,进入到已经部署好的 ZABBIX 服务器上,进行一些简单的设置,等设置好之后,就可以实现自动化监控了。

2、在 ZABBIX 上,创建需要监控的主机:
zabbix

3、创建报警媒介类型:
zabbix

zabbix

4、由于需要 ZABBIX 管理用户才有一定的执行权限,所以这里需要绑定用户:
zabbix

zabbix

5、在发生警报的时候,ZABBIX 需要有执行的动作,所以需要创建动作:

创建内容的默认信息附文章末,可以在文章末进行复制粘贴
zabbix

zabbix

好了,到这里,可以说已经完成了 95% 了,还有 5% 就是测试。由于编者使用的是阿里云的云服务器,是没有交换(交换空间)的,所以编者就修改了相对应的数值,测试在发生故障的时候,钉钉机器人是否有将故障信息发到编者的钉钉上。果然,上述在步骤无误的部署下,成功编者的实现了钉钉机器人脚本实现的 zabbix 自动化监控。

如图 钉钉机器人发送的故障信息:
zabbix

如图,修复后,钉钉机器人发送的已修复信息:
修复后的问题,返回的信息当前状态会变成确定
zabbix

附:

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

恢复操作默认信息:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
{
报警主机:{HOST.NAME}
主机地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
报警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
报警信息:{TRIGGER.NAME}
报警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
}

确认操作默认信息:
服务器:{HOST.NAME}: 报警确认
{
执行人:{USER.FULLNAME}
时间:{ACK.DATE} {ACK.TIME}
确认信息如下:
“{ACK.MESSAGE}”
问题服务器IP:{HOSTNAME1}
问题ID:{EVENT.ID}
当前的问题是: {TRIGGER.NAME}
}

赞(1)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址