欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 架构师面试(三十七):监控系统架构模式

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

2025/5/4 7:16:50 来源:https://blog.csdn.net/wang_zong_sheng/article/details/147645018  浏览:    关键词:架构师面试(三十七):监控系统架构模式

题目

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

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

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

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

解析

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

一、轮询计算模式

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

图片

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

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

脚本:针对特定的日志文件和特定的日志统计逻辑编写特定的【脚本】,比如“ 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 基于业务服务器资源对监控的数据进行了计算,大大降低了服务端的压力,所以称为【边缘计算模式】。 

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

图片

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词