微服务二十二 zabbix监控其它服务器的磁盘空间发送钉钉报警信息

437 次浏览次阅读
没有评论

zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

文章来源于:感谢大佬的分享

https://blog.csdn.net/yulaoer53/article/details/118960381

https://blog.csdn.net/lizhecsdn/article/details/124931385

https://blog.csdn.net/weixin_35886095/article/details/113453008?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8-113453008-blog-118960381.pc_relevant_multi_platform_whitelistv2_ad_hc&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-8-113453008-blog-118960381.pc_relevant_multi_platform_whitelistv2_ad_hc&utm_relevant_index=13

系统 centos7

ip 操作系统 角色
192.168.0.199 centos7 监控端
192.168.0.200 centos7 被监控端

被监控端

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

yum install zabbix-agent

修改配置文件

vim /etc/zabbix/zabbix_agentd.conf

117 Server=192.168.0.199  # 监控端 IP

启动客户端

systemctl start  zabbix-agent
systemctl status  zabbix-agent

监控端

创建主机

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

添加监控项

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

键值:vfs.fs.size[/data,pfree]

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

创建触发器

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

表达式: {200:vfs.fs.size[/data,pfree].last()}=20

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

配置 zabbix 发送告警到钉钉

先去钉钉上获取 [webhook 地址 和 app_secret]

 打开一个想要将预警消息推送到的钉钉群
 群设置 -> 智能群助手 -> 添加机器人 -> 选择自定义机器人 

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

编写 DingDingWarn.py

#!/bin/python3
# -*- coding:utf-8 -*-
import base64
import hashlib
import hmac
import json
import sys
import time
import urllib

import requests

"""
    zabbix 警告消息通过 webhook 方式发送到钉钉机器人
"""

class DingDingWarn:
    headers = {'Content-Type': 'application/json; charset=utf-8'}

    # 从钉钉群机器人配置上获取的 webhook 地址和加签
    url = 'url'
    secret = 'app_secret'

    #linux 日志路径 (自己定义的)
    log_path1 = r'/usr/lib/zabbix/alertscripts/dingdingmsg.log'

    def __init__(self, alert_subject, alert_message):
        '''
        初始化发送的钉钉消息
        :param alert_subject: 警告消息描述
        :param alert_message: 警告消息内容
        '''
        self.alert_subject = alert_subject
        self.alert_message = alert_message

    def build_request_url(self):
        timestamp = str(round(time.time() * 1000))
        secret = self.secret
        secret_enc = secret.encode('utf-8')
        string_to_sign = '{}\n{}'.format(timestamp, secret)
        string_to_sign_enc = string_to_sign.encode('utf-8')
        hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
        sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
        return f'{self.url}&timestamp={timestamp}&sign={sign}'

    def build_body(self):
        '''
        构建请求体
        :return:
        '''
        return {
            "msgtype": "text",
            "text": {"content": f" 告警描述:\n{self.alert_subject}\n\n 告警内容:\n{self.alert_message.strip()}"
            }
        }

    def send_msg(self):
        '''
        发送警告消息
        :return:
        '''
        print(self.build_request_url())
        response = requests.post(url=self.build_request_url(), data=json.dumps(self.build_body()), headers=self.headers)
        body = response.text
        print(body)
        if eval(body)['errmsg'] == 'ok':
            status = 'send success!'
        else:
            status = 'send error!'
        self.save_log(status)

    def save_log(self, status):
        '''
        保存日志
        :param status: 发送状态
        :return:
        '''
        f = open(file=self.log_path1, mode='a')
        f.write(f'''
        {status.center(25, '-')}
        告警描述:
        {self.alert_subject}

        告警内容:
        {self.alert_message}
        {'End'.center(30, '-')}
        ''')
        f.close()

if __name__ == '__main__':
    # 获取执行参数
    alert_subject = sys.argv[1]
    alert_message = sys.argv[2].replace('\r\n', '\n')
    # 将接受到的消息参数, 输出到日志文件
    # a = open("r'/usr/lib/zabbix/alertscripts/dingdingparam.log'", mode='a')
    # a.write(alert_subject + '---' + alert_message)
    # 发送警告消息
    d = DingDingWarn(alert_subject, alert_message)
    # print(' 可执行 ')
    d.send_msg()

将脚本文件放到 /usr/lib/zabbix/alertscripts/ 下

配置报警媒介

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

 主题:
    {HOST.NAME} 告警信息:{TRIGGER.NAME}

消息:
    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    告警信息:{TRIGGER.NAME}
    当前状态:{TRIGGER.STATUS}
    监控取值:{ITEM.LASTVALUE}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    持续时间:{EVENT.AGE}
    事件 ID:{EVENT.ID}
    告警等级:{TRIGGER.SEVERITY}

设置触发动作

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

微服务二十二  zabbix 监控其它服务器的磁盘空间发送钉钉报警信息

 主题:
    出现问题!! {HOST.NAME} 监控信息:{TRIGGER.NAME}

消息:
    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    告警信息:{TRIGGER.NAME}
    当前状态:{TRIGGER.STATUS}
    监控取值:{ITEM.LASTVALUE}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    持续时间:{EVENT.AGE}
    事件 ID:{EVENT.ID}
    告警等级:{TRIGGER.SEVERITY}
正文完
 0
评论(没有评论)