谛听|大规模主机监控告警平台的架构演变

2024-02-19 21:50

本文主要是介绍谛听|大规模主机监控告警平台的架构演变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击「京东数科技术说」可快速关注

「摘要」谛听是京东数科自行研发的一套主机监控系统。整套系统对所有业务进行主机性能采集和相应的告警。目前谛听覆盖10个地区、4个国家,每天产生800多G数据量,平均每天发送告警1万余次,已成为公司平时,特别是大促前夕压测模拟必不可少的重要平台之一。

本文从谛听最初的开发目标,到后续所碰到的一些重要困难,从架构设计角度出发,讲述这过程中的演变历程。希望我们走过的弯路,能够警示大家尽可能避开。没有一套监控系统是完全理想的,有自己见解的同学也欢迎一起共同探讨。

 

背  景 

 

数字科技创立之初,由于不是所有的业务都完全继承自商城的技术体系,很多业务的部署方式甚至开发框架都有很多不同。那时并没有一套通用的监控系统。大多是各业务线自行搭建开源监控系统,nagios、cacti、zabbix都有人使用过。互相之间的告警也不统一,甚至看个监控图都要去好几个平台,出个故障,事件处理小组要去多个地方截图,再拼接到一起来做故障分析报告。

 

几个需求和痛点

  • 覆盖率问题。以前多个平台,责任不明确,有些机器没有监控,或装的监控版本不统一,监控项不具备可比性,无法分析问题。

  • 不能丢数据。相关业务经常进行压测,一台机器被临时压死后再恢复过来,这期间的数据要保存下来;或者网络出现问题后,到底业务之间会有怎样的影响不是很明确。

  • 性能要好,不能几千个节点部分功能就失效或不好用了,至少要支持数万个节点而不出现任何问题。

  • 要能结合公司自身的业务信息、组织架构。

  • 能按需求出性能报表。

 V1 诞 生 - 混 沌 的 开 始 

 

按照最开始的5点需求,设计了V1的版本:

  • miicoo是agent端,部署在每台服务器上。自行采集数据后,主动发送给paaraa组件。

  • paaraa是每个机房的代理节点。汇总数据后,异步的投递给消息队列。

  • 中间有个统一的消息队列。

  • dt-MQ负责提取消息,并做报警处理。

  • MongoDB负责存储监控数据。

  • MySQL负责存储关系数据。

  • DT-monitor是web界面。

  V1架构特点

1、miicoo放到装机模板里,这样保证每一个终端,都会有我们的监控。之前监控团队的同学需要为每台机器添加监控,现在只要确认每台机器的监控是否运行正常,简化了工作。

2、miicoo和paaraa两个组件,都带有数据缓冲。如果一个机器的网卡IO被打满,一时半会无法发送监控数据到paaraa,它会将发送失败或者超时的数据放入缓冲区,等待下一次成功发送后,再进行补发。同样,如果某个机房的上连线故障,整个区域断网,paaraa也会把所有数据缓存,等网络恢复后,进行统一的上报。这样就解决了数据丢失的问题。

3、业务和组织架构信息定时通过脚本导入到MySQL库中。加上各个机器的告警阈值,一并推送到dt-MQ组件中。dt-MQ不停的从消息队列中抽取监控采集的信息,进行报警判断,同时将原始监控数据存入MongoDB。

4、DT-monitor为用户提供可视化的展示,根据MySQL中记录的组织架构和权限,相关的绘图数据从MongoDB获取。大促前的压测,我们直接使用MongoDB跑MR任务来生成相关统计报表。

基本上最初的几点需求都满足了。整个从开发设计到最终上线,用时大概不到半年。那年的618和双11所有的性能报表,都由谛听产生,这为下一年的大促提供了非常重要的优化依据。

  几个问题

但随着使用,我们还是发现了很多问题,有的问题甚至无法忍受,相关的投诉也越来越多。

1、所有组件都采用Python编写,环境是碰到最麻烦的问题。我们在装机包中,最开始附带了一个pypi的运行环境。但发现整个包要超过200M。后来改用二进制编译miicoo组件,即使这样整个包也要超过100M,而且python的二进制化兼容性令人发指……

2、所有告警的策略开始都是统一的,如果想做个性化的配置,就需要修改对应miicoo组件的配置文件,同时还要把相关信息推送到dt-MQ。如果有大量机器需要改特殊配置,例如某些大数据相关的业务,就需要做大量的操作,即使使用自动化脚本去做这件事,效率也非常低。每个特殊的应用上线时,又多了修改默认报警配置的工作,这和最早每个机器上线都需要添加监控相比,并没有什么本质的区别,非常不理想。

3、有些演练压测时必然会产生告警,实际上这些告警并不重要。如果需要暂停这些告警,就要针对相关范围的机器,提前修改告警配置。改配置实在是太多太麻烦了,但是不修改可能会使压测时真故障告警被埋没在告警风暴中,没有及时发现,影响其他业务。

4、miicoo的版本更新工作繁琐。有些特殊硬件配置的机器,要用特殊版本的miicoo。而每台机器所部署的miicoo版本,没有组件自动管理,全是人工维护。在数万节点的情况下,这个工作非常反人类。

5、在数万节点的前提下,DT-monitor组件的出图效率非常慢。关注监控的同学,可能每天都要被迫看几十分钟折线图加载过程。

 V2 - 灵 魂 的 觉 醒 

 

总结之前一年的经验后,有针对性的推出了V2.0架构。

  V2架构特点

1、强化节点管理,增加了一个dt-mgt组件,用来管理所有的miicoo节点。miicoo也增加了自动升级功能。每次启动时,miicoo需要通过最近的paaraa找到dt-mgt服务,进行注册,获取监控配置,获取最新版本信息。这样可以按照预先设定好的节点属性,进行监控,而不用现场去修改配置。每个节点在dt-mgt中的属性,也是根据相关的资源系统(IAAS)、应用管理系统(SURE)或者某些专用平台,例如数据库管理系统(MEGA)来同步节点属性。得到了正确的配置,就能进行更准确的监控。如果需要对节点进行批量监控策略调整,只要都到dt-mgt修改区域维度或者应用维度的配置,dt-mgt会自动转义成对应的节点配置并下发下去,miicoo得到新的配置后,会自行调整。

2、spark流式计算组件加入,可处理大量的告警计算。

3、Alarm组件,针对更为复杂的告警策略,可专门负责告警。


相关配置可分为三部分。如上图:

  • 蓝色部分,是采集配置

  • 中间橙色和红色部分是告警判断配置

  • 右边绿色的部分是告警发送配置

把配置分开的好处是可以灵活的进行设置。比如某些监控项可以采集,但不报警。而有些监控项要采集,也要进行告警判断,但在允许的时间内才发送特定形式的告警通知。或者有的告警项在极端的情况下会影响服务器性能,要在大部分时间屏蔽掉,而在特定的时间区间才进行采集。

4、双库存储数据,为了提高绘图效率,并且照顾到数据的存储成本,把数据分成了两个库来存储。

  • Cassandra库用来存储绘图数据,由spark直接计算后写库,数据只是为了绘图使用,长期数据进行归并处理。

  • MongoDB用来存储原始数据,长期数据可以存储到磁带上进行备份。如果我想分析每年618的业务数据的区别,我就可以单独把每年618的数据提出进行统一分析。

  V2架构部署

整个2.0部署起来如下图:

为了简化部署,用go重写了miicoo。go语言可以编译成二进制可执行文件,而不需要在每一台机器上部署相同的执行环境,直接传包过去就可以了。所有基础的检查脚本几乎都内置到了单个的可执行文件中。

相应的,也扩充了paaraa层的通信协议。首先采用长连接方式来上报采集的数据。当连接中断,或者一定时间没有上传心跳数据,都会触发paaraa的宕机检测。再加上之前提到的注册逻辑,就组成了一个实时在线的采集关系网。这时我们又加入了一个创(专)新(利)功能,就是paaraa的动态负载均衡策略。

例如当一个机房有2W台节点,并且有2台paaraa节点的时候,理想的情况下应该是每个paaraa维护1万台miicoo。如果一台paaraa不小心维护了1万6千台,而另一台只维护了4千台时,这就是一种非理想的负载情况。此时设定平均数AVG=1W,偏移百分比为 OFFSET=40%,也就是说当一个节点维护的量大于 AVG * (1 + OFFSET) = 1W4 时,负载高的一台paaraa会强行切断多出来40%的节点,使两台paaraa的压力均衡。如果这时再加入一台新的paaraa节点时,同样也是不需要任何人工干预,一个心跳周期后,会变成每台paaraa维护6666台(或6667)miicoo。

升级架构后的谛听,当年非常顺利的完成了当年618和双11的考验。但V2的架构在运行了1年多的时间里,也积累了一些问题。

  几个新问题

1、miicoo版本太复杂,这是最消耗我们精力的一个问题。随着机型和操作系统版本不停增多,同样的功能所使用的采集细节也会各有区别,再加上虚机和容器的盛行,导致miicoo版本复杂到了难以维护的程度。而且经常有特殊情况,促使升级特定区域的miicoo。每次升级都会导致所有采集项中断几分钟的时间。

2、告警的配置过于局限,一个节点,只有一套告警配置。因为是应用负责人和运维,共同使用一套配置,就会出现配置上的冲突。比如有些应用的CPU告警,开发并不关心,就会把阈值调到几乎最大。但运维的SA经常碰到CPU故障导致强制降频,进而促使使用率过高。如果这个机器的CPU告警阈值被开发改大了,很可能SA就收不到相关的告警。以往都是靠通过配置不同的告警接收人来解决,但实际情况过于复杂,导致这样也很难满足需求。

3、第三方编写的监控脚本也变得越来越复杂。一个典型的例子,PE编写的清除磁盘日志的脚本,需要获取磁盘监控的结果。现在的做法是,他们通过订阅我们的消息,然后再远程ssh触发脚本删除日志,整个绕了一大圈,中间还容易出现各种意外情况导致日志清理不及时影响业务。或是DBA针对数据库监控的一些特殊脚本,可能需要特殊的高频率采集,并且又需要报警和绘图,这都是目前支持起来相对麻烦的事情。

 V3 - 越 发 精 彩 

 

通过这段时间的运营总结,针对以上新的问题,设计出了V3的架构。对比前一架构有两点明显变化: 

  1、miicoo组件拆分

拆分成了core和plugin的形式。这样主采集框架就可以不用总是去更新,只更新对应的插件就可以,保证了整体的稳定性。个别插件的采集失败也不会影响其他插件汇报数据。专门分化出一个组件DT-softCenter用来管理每个节点的插件。每个插件也都有自己能够运行的条件限制。这样不同的系统版本,可以共用主框架,配置不同版本的插件就可以完美运行。

  2、alarm组件拆分

这样alarm可以进行更为复杂的告警配置。从下图可以看出,我们的告警配置可以针对所有用户,而不是像以前一样,大家公用一套配置。不同的用户设置的不同阈值,也不会影响互相的告警效果。避免了别人配置了一个过于严格的阈值,导致频繁发送告警,自己被动收取。 

未 来 之 路

 

在未来,行业内推行智能化运维,可能阈值都不需要人为来设置,通过测试中积累的数据,就能自动判断。甚至相关问题的出现也都能提前预测。谛听作为一个工具系统,势必会朝着越来越智能的方向发展。

 推荐阅读

1、自动化建模 | H2O开源工具介绍

相信很多读者在日常的建模工作中都会或多或少地思考一个问题:建模可不可以被自动化?笔者围绕这个问题向大家介绍一个开源的自动建模工具H2O。

2、金项奖入围展播 | 从技术金项奖说起,我在京东这一年

张亮,数据库管理部资深架构师,Apache ShardingSphere发起人 & PPMC热爱开源,目前主导开源项目ShardingSphere(原名Sharding-JDBC)和Elastic-Job。

3、量化模型 | 基于Logistict回归的评分卡模型

为大家介绍基于Logistic回归的评分卡模型,分享量化团队分析师构建评分卡模型的全过程,并逐步介绍模型算法、模型评价指标等具体实现方式。 


京东数科技术说&技术课堂

   ▼▼▼     

由京东数科-技术研发部策划组织

倡导“原创·实用·技术·专业”

致力于分享技术领域实战经验与技术干货

线上订阅“京东数科技术说”,线下聆听“技术课堂”

为加强技术分享、总结沉淀,提升数科技术影响力而搭建的

线上线下融合交流平台

不只一技之长 · 我有N技在手

 咨询、建议、合作请联系:

刘嘉璐(liujialu)/张明瑛(zhangmingying3)

长按识别二维码关注我们

这篇关于谛听|大规模主机监控告警平台的架构演变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/726080

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP