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

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

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

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


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

    首先,我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人:


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

    接下来就是编写我们的钉钉机器人脚本,需要注意的是,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找<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服务器上,进行一些简单的设置,等设置好之后,就可以实现自动化监控了。(若没有部署好的用户,可以参考的zabbix官方文档,文档内有详细的部署步骤,或网上查阅ZABBIX服务部署的相关文档


   如图1所示,在ZABBIX上,创建需要监控的主机


    2,创建报警媒介类型:


    3,由于需要ZABBIX管理用户才有一定的执行权限,所以这里在我们需要绑定用户


    如图4所示,然后在发生警报的时候,ZABBIX需要有执行的动作,所以需要创建³³动作

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


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

      本文旨在提供参考,如有错误,欢迎大家指正。帮助编者不断的改进!

猜你喜欢

转载自blog.csdn.net/Scirhh/article/details/81610675