开发者社区> 花肉酱> 正文

蚂蚁金服智能监控云原生可观测大盘设计概览

简介: 本文将介绍蚂蚁金服监控产品在监控大盘方面的创新设计与尝试。
+关注继续查看

背景

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

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

本文将介绍蚂蚁金服监控产品在监控大盘方面的创新设计与尝试,新版自定义监控大盘 Barad-Dur 目标成为业界体验最优秀的自定义监控大盘,在交互、体验与设计理念上有诸多创新点,同时将以模块的形式发布,支持二次开发,可以同时为蚂蚁金服内外监控系统服务。

产品体验

WYSIWYG

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

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

体验1:缩放

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

1_scale.gif

体验2:拖动

Barad-Dur 的图表拖动可以实现图表位置的一步交换,而市面上常见的大盘产品需要进行多次拖动才能实现两个图表的交换。且在拖动过程中,图表的整体布局会被打乱,而 Barad-Dur 不会存在这样的问题。

2_swap.gif

体验3:自动重布局

Barad-Dur 的自动重布局功能非常强大,可以支持实时布局预览(当然市面上常见的大盘产品也支持),同时大盘的布局调整会根据具体操作(缩放、拖动)的方向进行。而市面上常见的大盘产品只能在垂直方向上进行布局调整,因为所用的算法非常简单,只是粗暴地把所有图表向页面上“推”。

3_layout.gif

体验4:任意位置

Barad-Dur 的布局支持图表在任意位置摆放,而市面上常见的大盘产品由于上述的简陋算法,不支持此功能,所有的图表必须堆叠在页面的顶部。

4_free.gif

体验5:布局复位

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

5_reset.gif

体验6:文字编辑

Barad-Dur 支持在大盘中添加静态文字以及对于文字的编辑。静态文字可用于公告、标题、说明等一些常见的大盘场景。

6_text.gif

功能对比

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。其本意是指汽车上的仪表板,这里的仪表板包括了两类组成部分:监视器、控制器。在仪表板上不仅能看到汽车的当前状态,也能对汽车进行各种控制。这是大盘的本意,但是就目前看来,市面上所有的监控大盘产品都缺失了控制器这个重要的组成部分,导致监控大盘其实只是监视大盘。如果只是用来监视的,那大盘独立存在就没有意义,就像汽车的仪表板上只有转速表、时速表、里程表,却没有油门、刹车、换挡杆。

我们再来看几个工业产品的大盘:

image.png

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

image.png

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

chernobyl.jpeg

面向专家的定制产品

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

技术实现

自定义数据源

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

  1. 继承 AbstractDatasource,并实现 doRequestData 接口;
  2. 调用 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 的设计理念,并融入了大盘的设计需求。

image.png

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

未来展望

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

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

关于我们

欢迎来到「蚂蚁智能运维」的世界。本公众号由蚂蚁智能监控团队出品,面向关注智能运维技术的同学,将不定期与大家分享云原生时代下蚂蚁金服在智能监控的架构设计与创新方面的思考与实践。

蚂蚁智能监控团队,负责蚂蚁金服的基础设施和业务应用的监控需求,正在努力建设一个支撑百万级机器集群、亿万规模服务调用场景下的,覆盖指标、日志、性能和链路等监控数据,囊括采集、清洗、计算、存储乃至大盘展现、离线分析、告警覆盖和根因定位等功能,同时具备智能化 AIOps 能力的一站式、一体化的监控产品,并服务蚂蚁金服众多业务和场景。

关于「智能运维」有任何想要交流、讨论的话题,欢迎留言告诉我们。

PS:蚂蚁智能监控正在招聘 AIOps 专家,欢迎加入我们,有兴趣联系 boyan@antfin.com

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
D3 不到20行代码就能实现世界地图的绘制
每到农历年末,相信很多小伙伴和本作者一样,都忍不住会去看江苏卫视的一档脑力比拼节目《最强大脑》,尽管上一季最强大脑喷点确实很多,但依旧没有减弱"追剧"的热情。今年最强大脑(第5季)的赛制有很大的变化,挑战的人数从百人大战,到最强30脑,再到现从第三场的一对一PK,确实与以往有了很大的不同。此外,今年更加强调了选手在生活中的光环,例如本文要引用的一场比赛就是最近一期来自清华的孙勇与北京的陈泽坤的一场以地图投影为背景的比赛,孙勇就是顶着2016安徽省高考理科状元的光环来的。今年没了叨叨魏,节目的流程显得自然了很多。好了,不扯了,来、来、来来来!我们开始说本文要讲的主题--地图。
1 0
Redis主从复制原理以及常见问题(2)
Redis主从复制原理以及常见问题
5 0
markdown 替代品 asciidoc 介绍
AsciiDoc,它的设计初衷就是为了解决写书规模的问题,并且是 O’Reilly 的在线出版平台 Atlas 的推荐语言。经过一番学习,我觉得 Asciidoc 确实很适合电子书制作。 AsciiDoc 相比 Markdown 支持更多的格式,包括而不限于: • 文档属性,设置作者、版本信息等。 • 语法高亮。 • 表格。 • Include 功能,将大文档拆分几个文件。 • 自定义块语法,可扩展性。
6 0
Kaggle新赛一览
Kaggle新赛一览
4 0
从零开始学设计模式(十五):模版方法模式(Template Method Pattern)
模版方法模式(Template Method)定义一个操作中算法的框架,并且将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
3 0
Hystrix技术分享
在微服务架构中,一个请求需要调用多个服务是非常常见的。如客户端访问A服务,而A服务需要调用B服务,B服务需要调用C服务,由于网络原因或者自身的原因,如果B服务或者C服务不能及时响应,A服务将处于阻塞状态,直到B服务C服务响应。此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
5 0
Javascript 字符串与文本格式化
字符串 JavaScript中的 String 类型用于表示文本型的数据. 它是由无符号整数值(16bit)作为元素而组成的集合. 字符串中的每个元素在字符串中占据一个位置. 第一个元素的index值是0, 下一个元素的index值是1, 以此类推. 字符串的长度就是字符串中所含的元素个数.你可以通过String字面值或者String对象两种方式创建一个字符串。
3 0
浅谈Single-Pass算法
Single-Pass算法又称单通道法或单遍法,是流式数据聚类的经典方法。对于依次到达的数据流,该方法按输入顺序每次处理一个数据,依据当前数据与已有类的匹配度大小,将该数据判为已有类或者创建一个新的数据类,实现流式数据的增量和动态聚类,适合对流数据进行挖掘,而且算法的时间效率高;不足之处主要表现在该方法具有输入次序依赖特性,即对于同一聚类对象按不同的次序输入,会出现不同的聚类结果。
3 0
从零开始学设计模式(十六):策略模式(Strategy Pattern)
策略模式(Strategy Pattern)也被称为政策模式(Policy)。它指的是定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,算法的变化不会影响使用算法的客户。
2 0
C语言基础知识(三)-程序设计结构、数组、字符串处理函数(上)
程序设计是什么 顺序结构 实例 1.首先生成一个随机的四位数整数。 2.拆分这个四位整数,获得其各位上的数字。 选择结构 最简单的if语句 if实例 语句块 if else语句 if else实例 多个if else语句 if else语句的嵌套 switch case语句 switch 语句的执行流程 循环结构 循环控制语句 while 循环 实例 do while 循环 实例 while语句和do-while语句的互换 while和do-while小结 for循环 实例 for循环语句的嵌套
3 0
+关注
花肉酱
以前端开发工程师的身份进入阿里云。曾负责阿里云容器服务运营,是云栖大会Tech Insight技术大会的策划人和执行人之一,后策划阿里云MVP项目,并致力于改善阿里云产品的用户体验。 现已加入蚂蚁金服,是金融级分布式架构 SOFASTACK 首席运营。
114
文章
2
问答
来源圈子
更多
致力于打造一流的分布式技术在金融场景应用实践的技术交流平台,专注于交流金融科技行业内最前沿、可供参考的技术方案与实施路线。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载