共计 3886 个字符,预计需要花费 10 分钟才能阅读完成。
背景
蚂蚁金服业务自定义监控是蚂蚁金服监控产品中的一个重要功能,主要是通过自定义日志数据源并配置大盘的方式来解决蚂蚁金服业务实时监控的需求。在产品功能上,用户可以通过对一系列日志数据源的创建、组织、管理及表单配置化的方式,简单、快速组织出一个多维监控大盘。这项能力在当时是一个具有创新性的能力,从功能到产品体验上很好解决了当时蚂蚁金服复杂业务监控的痛点。
但是,随着蚂蚁金服监控产品的不断迭代更新,以及云原生可观测性对于监控大盘的高要求,大家对自定义监控的体验诉求也越来越多,包括更便捷的交互方式、更丰富的图表、更丰富的数据源、更多扩展点等,因此对监控大盘的升级也势在必行。
本文将介绍蚂蚁金服监控产品在监控大盘方面的创新设计与尝试,新版自定义监控大盘 Barad-Dur 目标成为业界体验最优秀的自定义监控大盘,在交互、体验与设计理念上有诸多创新点,同时将以模块的形式发布,支持二次开发,可以同时为蚂蚁金服内外监控系统服务。
产品体验
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 | 市面上常见的大盘产品 | |
---|---|---|
任意拖动 | ✔︎ | ✔︎ |
任意缩放 | ✔︎ | ✘ |
多样图表 | ✔︎ | ✔︎ |
图表实时编辑 | ✔︎ | ✔︎ |
图表导入导出 | ✔︎ | ✔︎ |
任意布局 | ✔︎ | ✘ |
添加文字 | ✔︎ | ✘ |
综上对比,可以看出 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 等常用监控数据源。本文提到的可以预定义一组图表以及一组变量,创建大盘时可以快速添加相应的图表组件,同时也支持导入从其他大盘产品直接导出的大盘,使用户可以快速平滑迁移。
希望本文的介绍可以为大家在云原生监控领域的设计带来一些思考与启发,也欢迎关注该领域的优秀的你,跟我们交流更多想法~
关于我们
欢迎来到「蚂蚁智能运维」的世界。本公众号由蚂蚁智能监控团队出品,面向关注智能运维技术的同学,将不定期与大家分享云原生时代下蚂蚁金服在智能监控的架构设计与创新方面的思考与实践。
蚂蚁智能监控团队,负责蚂蚁金服的基础设施和业务应用的监控需求,正在努力建设一个支撑百万级机器集群、亿万规模服务调用场景下的,覆盖指标、日志、性能和链路等监控数据,囊括采集、清洗、计算、存储乃至大盘展现、离线分析、告警覆盖和根因定位等功能,同时具备智能化 AIOps 能力的一站式、一体化的监控产品,并服务蚂蚁金服众多业务和场景。
关于「智能运维」有任何想要交流、讨论的话题,欢迎留言告诉我们。
PS:蚂蚁智能监控正在招聘 AIOps 专家,欢迎加入我们,有兴趣联系 boyan@antfin.com