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

作者: 太阳上的雨天 分类: 微服务 发布时间: 2022-07-25 17:03

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

监控端

创建主机

image-20220725164622694

image-20220725164716171

添加监控项

image-20220725164811821

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

image-20220725164854380

创建触发器

image-20220725164946319

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

image-20220725165030920

配置zabbix发送告警到钉钉

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

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

image-20220725165307889

image-20220725165353519

编写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/ 下

配置报警媒介

image-20220725165639126

image-20220725165655710

image-20220725165806958

主题:
    {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}

设置触发动作

image-20220725165850548

image-20220725165933674

image-20220725170027526

主题:
    出现问题!! {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}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注