架构师面试(三十七):监控系统架构模式

题目

监控是在产品生命周期的运维环节,能对产品的关键指标数据进行【实时跟踪】并对异常数据进行【实时报警】。

一句话描述,监控系统可以帮我们【主动预防和发现】业务系统中的问题。

我们常说,监控系统是 “粮草”,业务系统是 “兵马”,【兵马未动,粮草先行】,其重要性可见一斑。

你都接触过哪些监控系统或监控模式呢?能否抽象出监控系统的【架构模式】,并对架构模式中各个关键部分的职责进行分析?

解析

监控系统需要对指标数据进行【实时跟踪】和【实时报警】,所以数据源非常关键;根据对数据源处理的方式,我们可以抽象出三类监控系统的【架构模式】,即:【轮询计算模式】、【中心计算模式】和【边缘计算模式】。

一、轮询计算模式

在项目初创,业务和集群规模都非常小的时候,通常使用【轮询计算模式】搭建监控系统,如下图所示:

图片

【轮询计算模式】的监控系统主要包括这样几个关键部分:日志、脚本、中控机。

日志:服务在运行过程中会将日志打印在日志文件中,比如常见的错误日志;

脚本:针对特定的日志文件和特定的日志统计逻辑编写特定的【脚本】,比如“ grep err error.log | wc -l ”;

中控机:中控机即是部署中控逻辑程序的服务器;中控机会定时发送指令到每台业务服务器上,运行已经部署好的脚本来对日志进行统计,在中控机获取到的统计结果超过预定的阈值时,进行报警。

轮询模式的监控系统架构比较简单,也非常容易落地实现。每台服务器上的脚本在中控机指令的驱动下会轮询对日志进行计算,不过这类计算比较简单,以统计特定关键字的日志为主;每产生一类新的日志,需要根据逻辑编写新的脚本,并需要对脚本进行部署。轮询模式的监控系统适合小规模的集群系统。

二、中心计算模式

在上述【轮询计算模式】的监控系统中,逻辑处理集中在 【脚本】单元,在部署和维护上很麻烦;【中心计算模式】的监控系统则将统计和分析逻辑进行中心化处理,如下图所示:

图片

【中心计算模式】的监控系统主要包括这样几个关键部分:日志、flume、kafka集群 和 大数据日志统计平台。

日志:服务在运行过程中会将日志打印在日志文件中,在【中心计算模式】下,日志文件种类会很多,可以是错误日志,也可以各类业务信息日志;

flume:flume 是很常用的日志采集程序,它时刻监测日志文件,并读取新增日志,然后将新增日志进行上报;常见的采集程序除了 flume外,还有 filebeat;

kafka集群:流处理平台,对大量的采集程序客户端生产的日志消息做数据缓冲,并与 消费端逻辑处理进行解耦;

大数据日志统计平台:通过大数据实时数据处理技术,如:Spark/Storm/Flink,对日志根据指定关键字进行统计,在达到预设阈值时进行报警。

另外,ELK日志查询平台也可以从 kafka 集群中消费日志,然后对日志进行查询。

所有服务节点打印的日志,都会被采集程序采集后上报到中心化的处理单元,即【大数据日志统计平台】进行集中处理,而服务节点没有任何的计算逻辑,所以这种模式叫做【中心计算模式】;业务开发同学有任何的统计和监控需求,直接将需求和日志格式提报给 “大数据”部门即可。【中心计算模式】的监控系统,可以对日志做非常灵活的统计和分析,但是 磁盘IO 和 网络IO 非常大,而且中心计算单元机器成本非常高。

三、边缘计算模式

上述两种监控计算模式:【轮询计算模式】和【中心计算模式】的处理对象都是服务程序打印的日志,这就决定了这两种模式对资源的重量级消耗;【边缘计算模式】的监控系统相对来说更轻量级,如下图所示:

图片

【边缘计算模式】的监控系统主要包括SDK、agent、监控后台系统 三部分。

SDK:SDK 是数据采集组件,嵌入在服务程序中运行;SDK提供函数供服务程序调用,常见函数如:Sum()、Avg()、Max()、Min()等;

agent:agent 是监控系统客户端,作为独立进程运行,在每台服务器上会部署一个专门的 agent 进程;服务器上所有的服务程序调用 SDK 后采集到的数据,通过本机传输到 agent,由 agent 进行汇总后上报到 监控系统服务端;

监控后台系统:监控后台系统即监控系统服务端;后台系统包括三大功能:接收 agent 上报的数据后,首先进行阈值告警判断,如果超过阈值则要报警;上报的数据为了方便分析和展示需要进行持久性存储(历史久远的数据意义不大,只存储近期数据即可);最后需要一个管理平台对阈值进行设定,对监控项数据进行图形化展示。

【边缘计算模式】的监控系统,采集程序 SDK 采集的是汇总过的一个数值,而非日志。举个例子, 要统计消息发送接口(msg_send)的 QPS,则服务程序需要在接口的入口处添加一行 代码:Sum("msg_send", 1);SDK会定时或定量将汇总过的一个数值传输给 agent,agent 会定时上报再次汇总过的数值到监控系统服务端,服务端也会对 agent 上报的数值进行聚合和统计。SDK 和 agent 基于业务服务器资源对监控的数据进行了计算,大大降低了服务端的压力,所以称为【边缘计算模式】。 

下面对 【中心计算模式】和【边缘计算模式】进行简单对比:

图片

三种模式的监控系统各有优劣,你是否都经历过?!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试 · 二】JS个别重点整理

目录 数组方法 字符串方法 遍历 es6 构造函数及原型 原型链 this指向 修改 vue事件循环Event Loop FormData 数组方法 改变原数组:push、pop、shift、unshift、sort、splice、reverse不改变原属组:concat、join、map、forEach、filter、slice …

深度学习里程碑:AlexNet 架构解析与核心技术详解

内容摘要 本文深度解析2012年ILSVRC冠军模型AlexNet,全面阐述其在深度学习发展中的关键突破。从模型架构出发,详细解析卷积层、池化层、全连接层的数学原理,重点分析ReLU激活函数、LRN局部归一化、重叠池化等创新技术的数学表达与工程价值。…

第5章 深度学习和卷积神经网络

深度学习是人工智能的一种实现方法。本章我们将考察作为深度学习的代表的卷积神经网络的数学结构。 5-1小恶魔来讲解卷积神经网络的结构 深度学习是重叠了很多层的隐藏层(中间层)的神经网络。这样的神经网络使隐藏层具有一定的结构,从而更加…

JVM——JVM是怎么实现invokedynamic的?

JVM是怎么实现invokedynamic的? 在Java 7引入invokedynamic之前,Java虚拟机(JVM)在方法调用方面相对较为“僵化”。传统的Java方法调用主要依赖于invokestatic、invokespecial、invokevirtual和invokeinterface这四条指令&#x…

STM32教程:ADC原理及程序(基于STM32F103C8T6最小系统板标准库开发)*详细教程*

前言: 本文章介绍了STM32微控制器的ADC外设,介绍了ADC的底层原理以及基本结构,介绍了ADC有关的标准库函数,以及如何编写代码实现ADC对电位器电压的读取。 可以根据基本结构图来编写代码 大体流程: 1、开启RCC时钟(包括ADC和GPIO的时钟,另外ADCCLK的分频器,也需要配置…

2025年APP安全攻防指南:抵御DDoS与CC攻击的实战策略

2025年,随着AI技术与物联网设备的深度渗透,DDoS与CC攻击的复杂性和破坏性显著升级。攻击者通过伪造用户行为、劫持智能设备、利用协议漏洞等手段,对APP发起精准打击,导致服务瘫痪、用户流失甚至数据泄露。面对这一挑战&#xff0c…

STM32的定时器

定时器的介绍 介绍:STM32F103C8T6微控制器内部集成了多种类型的定时器,这些定时器在嵌入式系统中扮演着重要角色,用于计时、延时、事件触发以及PWM波形生成、脉冲捕获等应用。 *几种定时器(STM32F103系列)&#xff1…

算法中的数学:约数

1.求一个整数的所有约数 对于一个整数x,他的其中一个约数若为i,那么x/i也是x的一个约数。而其中一个约数的大小一定小于等于根号x(完全平方数则两个约数都为根号x),所以我们只需要遍历到根号x,然后计算出另…

不同OS版本中的同一yum源yum list差异排查思路

问题描述: qemu-guest-agent二进制rpm包的yum仓库源和yum源仓库配置文件path_to_yum_conf, 通过yum list --available -c path_to_yum_conf 查询时,不同的OS版本出现了不同的结果 anolis-8无法识别 centos8可以识别 说明: 1 测试…

如何使用极狐GitLab 软件包仓库功能托管 helm chart?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 Helm charts (BASIC ALL) WARNING:Helm chart 库正在开发中,由于功能有限,尚未准备好用…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.1 数据质量评估指标(完整性/一致性/准确性)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 数据质量评估核心指标:完整性、一致性、准确性实战解析3.1 数据质量评估指标体系3.1.1 完整性:数据是否存在缺失1.1.1 核心定义与业务影响1.1.2 检测…

详解 FFMPEG 交叉编译 `FLAGS` 和 `INCLUDES` 的作用

FLAGS 和 INCLUDES这两行是 Android NDK 编译时的编译器选项,用于控制代码生成、优化、调试、安全性和头文件搜索路径。下面逐项详解: 1. FLAGS 详解(编译器选项) FLAGS 定义了传递给 C/C 编译器(如 clang 或 gcc&…

【RK3588嵌入式图形编程】-Cairo-Cairo图形库支持后端

Cairo图形库支持后端 文章目录 Cairo图形库支持后端1、PNG图像后端2、PDF文件后端3、SVG文件后端4、GTK窗口支持Cairo库支持多种后端。在本文中,我们使用Cairo创建PNG图像、PDF文件、SVG文件,并在GTK窗口上绘制。 1、PNG图像后端 在第一个示例中,我们创建一个 PNG 图像。 …

【常用算法:排序篇】2.快速排序的算法精要

快速排序是算法领域的"九阳神功",掌握其精髓能让你在算法修炼之路上突破瓶颈。 1. 快速排序的核心思想 快速排序(Quicksort)是一种基于分治思想的高效排序算法,核心步骤为: 选择基准值(Pivot&…

在现代Web应用中集成 PDF.js (pdfjs-dist 5.2 ESM): 通过 jsdelivr 实现动态加载与批注功能的思考

PDF 文档在现代 Web 应用中越来越常见,无论是作为文档预览、报告展示还是在线编辑的载体。Mozilla 的 PDF.js 是一个功能强大的 JavaScript 库,它使得在浏览器端渲染和显示 PDF 文件成为可能,无需依赖原生插件。 本文将深入探讨如何在你的项…

基于FPGA控制ADC0832双通道采样+电压电流采样+LCD屏幕显示

基于FPGA控制ADC0832双通道采样电压电流采样LCD屏幕显示 前言一、芯片手册阅读1.SPI通信时序 二、仿真分析三、代码分析总结视频演示 前言 定制 要求使用ADC0832芯片进行ADC采样。其中电压采样以及电流采样是固定电路,是硬件设计,跟软件没没关系。本质上…

生产部署方案pm2配合python3脚本

前言 使用python3来处理redis 消息队列,记录下生产部署方案 「生产部署方案」: 多进程(动态扩容)无限自愈日志自动压缩系统级守护可多队列多worker 终极稳健版:PM2 Logrotate 自动扩容 守护链 适合&#xff1a…

Python全流程开发实战:基于IMAP协议安全下载个人Gmail邮箱内所有PDF附件

文章目录 一、需求分析与安全前置:为什么需要专用工具?1.1 痛点场景1.2 技术方案选择 二、准备工作:Gmail账号安全配置与环境搭建2.1 开启两步验证(必做!)2.2 创建应用专用密码(替代普通密码&am…

巧用python之--模仿PLC(PLC模拟器)

工作中用到了VM(VisionMaster4.3)有时候需要和PLC打交道,但是PLC毕竟是别人的,不方便修改别人的程序,这时候需要一个灵活的PLC模拟器是多么好呀! 先说背景: PLC型号 汇川Easy521: Modbus TCP 192.168.1.10:502 在汇川Easy521中Modbus保持寄存器D寄存器 ,在modbus协议中 0-4区…

docker构建镜像并上传dockerhub

docker构建镜像并上传dockerhub 前提条件:需要连接梯子 将梯子配置到虚拟机中(确保主机能够连接 hub.docker.com) 使用ipconfig 查询主机的 ip4地址虚拟机的连接模式改成桥接模式(复制主机的地址网络)将ip4配置到虚拟…