• Zabbix-4.0-设置钉钉报警脚本


    问题:当服务器发生报错时,有一个信息能实现自动发送到我的手机或者应用上,以达到对服务器的实时的监控与处理。邮件与短信不能满足实时性,于是想到了钉钉的通知。

    思路:在钉钉里面建一个群,群里面拉个机器人。用zabbix配置一个脚本,让服务器监控的报警自动发送到钉钉,再由钉钉发送给自己。

    参考链接:

    python之钉钉机器人zabbix报警:https://blog.51cto.com/m51cto/2051945

    小油2018zabbix钉钉报警:https://www.cnblogs.com/xiaoyou2018/p/10612628.html#commentform

    钉钉开发者文档机器人:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

    一、环境准备

    zabbix4.0

    zabbix系统:centos7.6

    脚本:python2.7

    客户端:windwos10

    报警应用:钉钉

    二、脚本及说明

    脚本:dingding.py

    #!/usr/bin/python
    # -*- coding: utf-8 -*- 
    import requests
    import json
    import sys
    import os
    import datetime
    webhook = "https://oapi.dingtalk.com/robot/send?access_xxxxxxxxxxxxxxxxxx"
    user=sys.argv[1]
    text=sys.argv[3]
    data={
            "msgtype": "text",
            "text": {
                    "content":text
            },
            "at": {
                    "atMobiles": [
                            user
                            ],
                            "isAtAll": True
            }
    }
    headers = {'Content-Type': 'application/json'}
    x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
    if os.path.exists("/usr/local/zabbix/log/dingding.log"):
            f=open("/usr/local/zabbix/log/dingding.log","a+")
    else:
            f=open("/usr/local/zabbix/log/dingding.log","w+")
    f.write(" "+"--"*30)
    if x.json()["errcode"] == 0:
            f.write(" "+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+" "+str(text))
            f.close()
    else:
            f.write(" "+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送失败"+" "+str(text))
            f.close()

    解释:一定记住用手打,不要复制粘贴,因为linux的编码可能复制进去用不了,耐心一点!!!

    前面带#的2行是定义,定义语言与编码字符串

    跟着5行import是python的格式用法

    中间的webhook是机器人的地址,要再钉钉群里面建了机器人把地址更换进来

    user很text是定义变量,里面的1跟3是后面输出的的3个值

    data是钉钉机器人的用法

    atMobiles是钉钉里面发给谁的手机号,要加上

    isAtAlL是开启是否@所有人,钉钉发送给群所有人

    下面的if else是定义日志的文件路径与日志显示的内容

    三、钉钉建一个群,添加一个机器人,复制地址

    钉钉新建一个群,点击群右侧“更多”-“群助手”-“添加自定义机器人”-“复制地址”

    四、zabbix服务器配置脚本

    机器人地址:`https://oapi.dingtalk.com/robot/send?access_tokenxxxxxxxxx`
    1.远程zabbix服务器,检查安装python(centos7.6自带python2.x版本)

            python -V                              查看python版本(这个脚本是基于puthon2.x版本的)
            yum -y install epel-release         安装epel源
            yum install python-pip                安装pip工具
            pip -v                                    查看版本
            pip install requests                 安装模块requests


    2.编写脚本,脚本要新建在zabbix 的alertscripts目录下              

       cd /usr/lib/zabbix/alertscripts      打开目录
          vim dingding.py           编辑新建脚本
        
    3.脚本:见上

        一定要将自己的钉钉机器人地址,替换webhook里面的地址,其他可以不变


    4.日志文件创建与授权:
        chmod 777 dingding.py
        chown zabbix.zabbix dingding.py
        touch /usr/local/zabbix/logs/dingding.log
        chown zabbix.zabbix /usr/local/zabbix/logs/dingding.log

    5.测试脚本

      python dingding.py user1 12345678911 测试发送钉钉            (测试中要输入3个数据,分别是用户,电话,跟内容)

    五、zabbix管理界面添加脚本

    1.登录zabbix管理网页,上面选择“管理”-“报警媒介类型”-“创建报警媒介类型”(将刚才写的dingding脚本调用起来)

    2.单击“管理”-“用户”-“Admin”-“报警媒介”-添加一个刚才的报警媒介

    3.单击“配置”-“动作”-“创建一个动作”

    设置“操作”的报警;“恢复操作”的报警;“更新”的报警的格式;

    在操作里面添加发送脚本的动作,每一个都要做添加发送脚本的动作!

     

    操作的报警消息内容格式:

    服务器:{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}
    }

    六、测试

    1.添加一个监控主机,并设置一个测试值,例如ping

    见我的另一篇博客:https://www.cnblogs.com/subsea/p/13532579.html

    2.关闭或者拔掉网线,测试客户机,看钉钉是否通知

    始终相信美好的事情即将发生
  • 相关阅读:
    [内核编程] 串口过滤
    大数问题(高精度运算)
    [内核编程] 实战调试,第一个内核程序
    [内核编程] Windebug双机调试环境搭建
    树状数组
    mysql常用语句
    解决maven工程无法创建src/main/java包名的方法
    java Date中方法toLocaleString过时的替代方案
    Eclipse 无法编译,提示“错误: 找不到或无法加载主类”
    Eclipse如何设置编译文件.class输出路径
  • 原文地址:https://www.cnblogs.com/subsea/p/13532736.html
Copyright © 2020-2023  润新知