深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

背景

蚂蚁业务自定义监控是蚂蚁监控产品中的一个重要功能,主要是通过自定义日志数据源并配置大盘的方式来解决蚂蚁业务实时监控的需求。在产品功能上,用户可以通过对一系列日志数据源的创建、组织、管理及表单配置化的方式,简单、快速组织出一个多维监控大盘。这项能力在当时是一个具有创新性的能力,从功能到产品体验上很好解决了当时蚂蚁复杂业务监控的痛点。

但是,随着蚂蚁监控产品的不断迭代更新,以及云原生可观测性对于监控大盘的高要求,大家对自定义监控的体验诉求也越来越多,包括更便捷的交互方式、更丰富的图表、更丰富的数据源、更多扩展点等,因此对监控大盘的升级也势在必行。

产品体验

WYSIWYG
当前优秀的监控大盘产品都标配一个“所见即所得(WYSIWYG)”编辑器,这方面能力是蚂蚁监控产品一直缺失的。在蚂蚁监控产品中配置大盘还是通过传统的表单方式,对用户非常不友好、学习曲线陡峭、配置效率不高。导致用户经常将配置大盘作为一项需求提给监控团队,由监控团队的“大盘配置专家”来进行配置,不仅存在较高的沟通成本,也给监控团队增加了很大的负担。

在新版监控大盘 Barad-Dur 中,对 WYSIWYG 编辑器的交互体验进行了大量工作,力求做到市面上优秀的编辑体验。

体验1:缩放
Barad-Dur 的缩放是可以在四周以及四角上进行的,而市面上常见的大盘产品只支持右下角的缩放。由于坐标系统一般采用的是 (left,top,width,height) 来定义一个矩形,最容易实现的就是右下角缩放,只需要变动 width 和 height 两个参数即可。最难实现的是左上角的缩放,四个参数需要同时变动,且关系比较复杂。特别是在引入网格布局后,缩放时要自动“吸附”临近的网格点,难上加难。
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

体验2:拖动
Barad-Dur 的图表拖动可以实现图表位置的一步交换,而市面上常见的大盘产品需要进行多次拖动才能实现两个图表的交换。且在拖动过程中,图表的整体布局会被打乱,而 Barad-Dur 不会存在这样的问题。
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

体验3:自动重布局
Barad-Dur 的自动重布局功能非常强大,可以支持实时布局预览(当然市面上常见的大盘产品也支持),同时大盘的布局调整会根据具体操作(缩放、拖动)的方向进行。而市面上常见的大盘产品只能在垂直方向上进行布局调整,因为所用的算法非常简单,只是粗暴地把所有图表向页面上“推”。
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

体验4:任意位置
Barad-Dur 的布局支持图表在任意位置摆放,而市面上常见的大盘产品由于上述的简陋算法,不支持此功能,所有的图表必须堆叠在页面的顶部。
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

体验5:布局复位
Barad-Dur 的自动重布局能够在对单个图表进行调整时将其他图表“推开”,然后更强大的是可以再将被推开的图表复位。这里找到了市面上常见的大盘产品直接拿来用的开源布局框架进行对比。该框架其实提供了上述的任意位置功能,然而由于没有布局复位的功能,导致该功能一旦启用,会令整个大盘在编辑过程中布局被扰乱,对用户起不到任何帮助,所以市面上常见的大盘产品没有启用这个功能。
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

体验6:文字编辑
Barad-Dur 支持在大盘中添加静态文字以及对于文字的编辑。静态文字可用于公告、标题、说明等一些常见的大盘场景。
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

功能对比
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

综上对比,可以看出 Barad-Dur 的 WYSIWYG 编辑器在各项功能上已经领先于市面上常见的大盘产品。

控制器
大盘,即 Dashboard (in an automobile or similar vehicle) a panel beneath the front window having various gauges and accessories for the use of the driver; instrument panel。其本意是指汽车上的仪表板,这里的仪表板包括了两类组成部分:监视器、控制器。在仪表板上不仅能看到汽车的当前状态,也能对汽车进行各种控制。这是大盘的本意,但是就目前看来,市面上所有的监控大盘产品都缺失了控制器这个重要的组成部分,导致监控大盘其实只是监视大盘。如果只是用来监视的,那大盘独立存在就没有意义,就像汽车的仪表板上只有转速表、时速表、里程表,却没有油门、刹车、换挡杆。

我们再来看几个工业产品的大盘:
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

面向普通消费者的量产产品


深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

面向专业消费者的量产产品


深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

面向专家的定制产品


控制器是不可或缺的组成部分,甚至比监视器更加重要。Barad-Dur 提供了在大盘中设置控制按钮的功能,可以实现一些简单的控制,比如关闭/启动报警、打开钉钉聊天窗口、启动控制预案等。日后会不断加入更加强大的控制功能,让蚂蚁监控大盘变成一个完整的监控系统。

技术实现

自定义数据源
上文提到 Barad-Dur 支持二次开发,支持自定义数据源,仅需一点点工作即可接入自己的数据源:

  • 继承 AbstractDatasource,并实现 doRequestData 接口;
    调用 registerDatasource 将数据源注册至 Barad-Dur(如果使用 Barad-Dur 的数据源编辑器,可在注册时指定自定义的数据源的编辑器);

Barad-Dur 会对所有的数据源进行包装,提供缓存、增量加载、请求合并等功能。

统一时序数据库
为了实现自定义数据源能够在任意图表中正确展现,Barad-Dur 定义了一种 universal 的时序数据格式,支持多 key 以及多 value。所有的时序数据源(未来可能会支持非时序数据源)都会将查询结果转换为这种格式,所有的图表也都会使用这种数据格式进行展现。

使用统一数据格式的优势在于,图表和数据源都是按照同样的数据接口(约定)来实现的,所以图表和数据源是可以独立变化的。即图表可以任意切换而不需要改动数据源配置,数据源也可以任意切换而不需要调整图表配置。这是市面上常见的大盘产品做不到的。

另一大优势在于计算。Barad-Dur 支持数据源的简单前端计算(如计算比率的场景需要将数据 A 与数据 B 相除),在使用了统一的数据格式之后,将计算也视为一个时序数据源,它的输入是一组时序数据源,也就是说一个计算数据源可以引用另一个计算数据源。这也是市面上常见的大盘产品做不到的。

Scene Graph
Scene Graph 的概念常用于游戏引擎对于场景的渲染。由于场景中各个节点有父子关系且子节点的空间关系常常用相对于父节点的量来表示,所以需要一种数据结构来将这些 local 空间的量(translation、rotation)转变为 global 空间的量,才能最终转换成屏幕空间的量用于渲染。这种父子关系恰好对应了大盘中的各个图表以及整个大盘的关系。就拿一个最常见的需求来举例说明:大盘上有全局回放的功能(这是一个非常重要的功能,没有这个功能大盘就对排查问题毫无意义),而每个图表又有自己的设置:

  • 时间跨度:分钟级的图表与秒级的图表不会展现同样范围的数据;
    时间偏移:图表数据产生存在不同的延时;

我们可以使用类似 Scene Graph 的数据结构来保存每个图表自己的时间轴配置以及全局大盘的时间轴配置,最后计算出查询数据所需的时间参数。

同时,未来还会引入技术栈的概念,即一个预定义的图表组,可以直接放入到自定义的大盘中,只需要做少量配置。例如,用户可以一步创建一台物理机的 CPU、Memory、Disk 监控图表,只需要修改这个图表组的 ip 参数。

所以在 Barad-Dur 中借鉴了 Scene Graph 的设计理念,并融入了大盘的设计需求。
深度揭秘!蚂蚁业务自定义监控大盘是怎么设计的?

总体是一个树形结构,但是每个节点都会有一个 MVC 结构,将数据源、视图以及控制数据分离,控制流与数据流分离。同时数据源部分可以相互依赖,使 Barad-Dur 可以优化数据查询,做到缓存、增量查询、合并查询等。

未来展望

目前 Barad-Dur 已经内置支持 OpenTSDB、CeresDB(蚂蚁自研的高性能、分布式、高可靠时序数据库,支持 PromQL)以及部分蚂蚁内部数据源,计划将兼容更多数据源,如 PromQL、InfluxDB、MySQL 等常用监控数据源。本文提到的可以预定义一组图表以及一组变量,创建大盘时可以快速添加相应的图表组件,同时也支持导入从其他大盘产品直接导出的大盘,使用户可以快速平滑迁移。

希望本文的介绍可以为大家在云原生监控领域的设计带来一些思考与启发,也欢迎关注该领域的优秀的你,跟我们交流更多想法~

关于我们

蚂蚁智能监控技术中台负责解决蚂蚁大型分布式架构下的监控问题,提供百万级机器集群、亿万级服务调用场景下的监控数据采集、计算、存储、服务、智能预警的一站式实时监控、智能诊断解决方案,提供统一监控数据分析平台,赋能数字化运维。

职位描述:
1、负责蚂蚁智能监控、性能容量、风险数据基础设施的研发建设,包括需求调研,系统分析设计,核心模块实现,调优与维护。
2、主导核心技术问题攻关,解决世界级的分布式处理难题,识别和解决潜在的技术风险。
3、对平台自身稳定系和系统质量负责,保障系统运行可用率和数据质量相关衡量指标。
4、参与蚂蚁双十一等大型活动,通过平台能力保障整体蚂蚁系统在极限请求量下的高可用和资金安全。
5、持续对接平台上各类技术风险防控业务方和防控系统,满足不断发展的业务需求。

职位要求:
1、有强烈的技术热情,工作责任感;计算机软件或相关专业,本科或以上学历;
2、有创新精神,乐于和热于技术钻研。思维严谨,逻辑清晰,具备批判性思维能力和习惯;
3、具备扎实的计算机专业基础,包括算法和数据结构、操作系统、计算机体系结构、计算机网络、数据库等;
4、具备扎实的Java/C/C++/Rust/Go等语言基础,良好的编程素养,对代码美感有追求,至少熟悉一种关系型数据库如Oracle、Mysql等;
5、具备知名互联网企业高可用经验,具备实时计算(Spark/Flink/Storm)或海量数据处理(Hadoop/HBase/Hive)相关经验优先考虑;
6、有很强的分析复杂问题和解决复杂问题的能力,有强烈的责任心和使命感。

欢迎加入我们,有兴趣联系 boyan@antfin.com

上一篇:使用 Linux 的 strace 命令跟踪/调试程序的常用选项


下一篇:删除时显示确认对话框