监控是在产品生命周期的运维环节,对产品的关键指标数据能进行【实时跟踪】并对异常数据能进行【实时报警】; 一句话描述,监控系统可以帮我们【主动预防和发现】业务系统中的问题。
我们常说,监控系统是粮草,业务系统是兵马,【兵马未动,粮草先行】,其重要性可见一斑。你都接触过哪些监控系统或监控模式呢?能否抽象出监控系统的【架构模式】,并对架构模式中各个关键部分的职责进行分析?
=========================================
解析:
监控系统需要对指标数据进行【实时跟踪】和【实时报警】,所以数据源非常关键;根据对数据源处理的方式,我们可以抽象出三类监控系统的【架构模式】,即:【轮询计算模式】、【中心计算模式】和【边缘计算模式】。
一、轮询计算模式
在项目初创,业务和集群规模都非常小的时候,通常使用【轮询计算模式】搭建监控系统,如下图所示:
(下边附图:图1)
【轮询计算模式】的监控系统主要包括这样几个关键部分:日志、脚本、中控机。
日志服务在运行过程中会将日志打印在日志文件中,比如常见的错误日志;
脚本针对特定的日志文件和特定的日志统计逻辑编写特定的【脚本】,比如“ grep err error.log | wc -l ”;
中控机中控机即是部署中控逻辑程序的服务器;中控机会定时发送指令到每台业务服务器上,运行已经部署好的脚本来对日志进行统计,在中控机获取到的统计结果超过预定的阈值时,进行报警。
轮询模式的监控系统架构比较简单,也非常容易落地实现。每台服务器上的脚本在中控机指令的驱动下会轮询对日志进行计算,不过这类计算比较简单,以统计特定关键字的日志为主;每产生一类新的日志,需要根据逻辑编写新的脚本,并需要对脚本进行部署。轮询模式的监控系统适合小规模的集群系统。
二、中心计算模式
在上述【轮询计算模式】的监控系统中,逻辑处理集中在 【脚本】单位,在部署和维护上较为麻烦;【中心计算模式】的监控系统则将统计和分析逻辑进行中心化处理,如下图所示:
(下边附图:图2)
【中心计算模式】的监控系统主要包括这样几个关键部分:日志、flume、kafka集群 和 大数据日志统计平台。
日志服务在运行过程中会将日志打印在日志文件中,在【中心计算模式】下,日志文件种类会很多,可以是错误日志,也可以各类业务信息日志;
flumeflume 是很常用的日志采集程序,它时刻监测日志文件,并读取新增日志,然后将新增日志进行上报;常见的采集程序除了 flume外,还有 filebeat;
kafka集群流处理平台,对大量的采集程序客户端生产的日志消息做数据缓冲,并与 消费端逻辑处理进行解耦;
大数据日志统计平台通过大数据实时数据处理技术,如:Spark/Storm/Flink,对日志根据指定关键字进行统计,在达到预设阈值时进行报警。
另外,ELK日志查询平台也可以从 kafka 集群中消费日志,然后对日志进行查询。
所有服务节点打印的日志,都会被采集程序采集后上报到中心化的处理单元,即【大数据日志统计平台】进行集中处理,而服务节点没有任何的计算逻辑,所以这种模式叫做【中心计算模式】;业务开发同学有任何的统计和监控需求,直接将需求和日志格式提报给 “大数据”部门即可。 【中心计算模式】的监控系统,可以对日志做非常灵活的统计和分析,但是 磁盘IO 和 网络IO 非常大,而且中心计算单元机器成本非常高(转转的大数据统计平台大概用了400~500台的机器规模)。
三、边缘计算模式
上述两种监控计算模式:【轮询计算模式】和【中心计算模式】的处理对象都是服务程序打印的日志,这就决定了这两种模式对资源的重量级消耗; 【边缘计算模式】的监控系统相对来说更轻量级,如下图所示:
(下边附图:图3)
【边缘计算模式】的监控系统主要包括SDK、agent、监控后台系统 三部分。
SDKSDK 是数据采集组件,嵌入在服务程序中运行;SDK提供函数供服务程序调用,常见函数如: Sum()、Avg()、Max()、Min()等;
agentagent 是监控系统客户端,作为独立进程运行,在每台服务器上会部署一个专门的 agent 进程;服务器上所有的服务程序调用 SDK 后采集到的数据,通过本机传输到 agent,由 agent 进行汇总后上报到 监控系统服务端;
监控后台系统监控后台系统即监控系统服务端;后台系统包括三大功能:接收 agent 上报的数据后,首先进行阈值告警判断,如果超过阈值则要报警; 上报的数据为了方便分析和展示需要进行持久性存储(历史久远的数据意义不大,只存储近期数据即可);最后需要一个管理平台对阈值进行设定,对监控项数据进行图形化展示。
【边缘计算模式】的监控系统,采集程序 SDK 采集的是汇总过的一个数值,而非日志。举个例子, 要统计消息发送接口(msg_send)的 QPS,则服务程序需要在接口的入口处添加一行 代码: Sum("msg_send", 1); SDK会定时或定量将汇总过的一个数值传输给 agent,agent 会定时上报再次汇总过的数值到监控系统服务端,服务端也会对 agent 上报的数值进行聚合和统计。 SDK 和 agent 基于业务服务器资源对监控的数据进行了计算,大大降低了服务端的压力,所以称为【边缘计算模式】。
下面对 【中心计算模式】和【边缘计算模式】进行简单对比:
(下边附表:表1)
三种模式的监控系统,你是否都经历过?!
如若转载,请注明出处:https://www.hanjifoods.com/22093.html