如何零数据快速搞定可视化运营页面

2022-08-26 16:07:50 浏览数 (1)

| 导语 云原生时代,微服务业务众多,数据在一个个孤岛中,作为云平台研发人员,我们怎么快速支持纷繁多彩的运营需求?对于 TCE,我们又怎么在私有云的场景下从根本上解决这个问题?本文为你揭开神秘面纱

  没有数据可视化算什么数字化...

云原生时代业务通常会拆成多个细小的服务,这样业务间各司其职,耦合低,迭代快,这是微服务的优势,但是也为横向运营运维带来了难度,想要运营的好,我们不能等到出问题的时候才去补救,这就要求我们能够及时准确地感知观测到这些散落在各地的服务,这就是各种运营可视化页面的作用所在。

而具体到到私有云平台来说这个问题更为复杂,一方面云上应用种类繁多,IaaS、PaaS、SaaS,复杂度和纵深各不相同,运营指标天差地别;另一方面私有云跑在各类客户现场,我们需要从根本上解决需求各异、指标不一、展示灵活、难以标准化的难题,让客户最终在界面上按需自行运营可视化。

   说起来容易做起难,高大上的大屏在哪里?

我们就从这个“普普通通”的需求来入手,它要展示的是 CVM 不同维度下的各类资源指标以及运营的趋势。它通常反应的是一类指标 S 随时间 T 的推移而发生的变化。指标 S 来自于一个接口的字段 A;T0、T1、T2……TN 具有相同的时间间隔。

针对这个需求,我们一般的处理模式是:

1、需求方(客户)提出诉求;

2、开发一个定时采集服务负责周期性的调用接口,并打上时间戳保存到数据库当中;

3、再开发一个接口服务,它会根据需要把一定时间跨度的 A 以一定间隔聚合求取平均值,装配成列表,返回给前端;

4、前端同学,设置折线图控件绑定接口模型,配置x轴y轴到模型字段的映射关系;

5、...

这里的问题是,在 TCE 我们有几十上百诸如 CVM 的产品,每个产品都能从各个维度衍生出各不相同的运营需求,然后还要乘上各种侧重不同的客户诉求。

按照传统的方式,我们只能不断投人、投时间、排期。。。来应对这些无尽的技术重复工作,很不“降本增效”,甚至不可行。

  搞定可视化,这几步就够了

那么,怎么才能从根本上解决问题呢?或者说问题在哪里?

问题在于,运营类可视化需求充斥了大量的重复、“低端”、重复的编码工作,而且这些工作极大地妨碍了真正业务的落地。我们要做的自然就是

从数据的流转角度,我们期望一站式、系统性地解决这些阻碍性的工作。

  • 采集难?:数据采编平台(Flakeminer)来收取信息—可视化编辑采集作业,一站式采集,加工,清洗,入库;
  • 接口麻烦?:数据中台(Flake)来分析及预测—文档式数据系统,统一且灵活的数据查询语言 FQL,甚至提供算法预测;
  • 海量页面?:可视化中台(神工)来自由组合搭配—拖拽式页面装修搭建,各类控件自由装配,所见即所得;

Talk is cheap, 下面我们就来看看怎么从零一步步搭出上面的可视化页面。

1、需求分析

我们不妨以展示 CVM 宿主机内存、磁盘、CPU 使用量状态这一资源容量平台的真实需求为例。

除了需要展示内存、磁盘和 CPU 的当前状态,还要展示历史7天的趋势记录和未来7天的预测。

我们现在有的只是 CVM 业务的云 API、DescribeHosts 可以查询到 CVM 宿主机信息。

问题在于:

1、一次只能查一个地域的宿主机,我们得先调用一个 DescribeRegion 接口获取所有 Region 和 Zone 信息。然后才能去调用 DesribeHosts 接口;

2、分页,考虑不能对业务影响,一次不能拉太多;

调用之后,我们有了全部 Region 的 CVM 信息。通过 ZoneId、IsOnline、HostStatus 来求和 HostResource 字段中的 CPU、Mem、Disk 等相关数值,便可以得到我们需要的指标信息;别忘了时序趋势数据,我们需要对 CVM 接口周期性的采集。

2、可视化编排采集任务

简单来说,我们可以把数据的采集,分为数据获取(云 API)、数据处理(无码/低码)、数据入库这三种类型的任务组成的 DAG 图,而 Flakeminer 提供了可视化的逻辑编排工具,来让你轻松拖拽实现。

对于刚才的问题,

1、拖拽实现前后接口的调用:DescribeRegion -> DescribeHosts;

2、循环,更是简单配置即可;

最后的 unwind 节点代表我们把 DescribeHosts 的结果按照其中的 HostResource 展开到外层属性进行属性拍平。

如此设计完采集流程,交给采集平台执行,我们就会得到全部 Region 下 CVM 的 CPU 等信息了。

3、会 SQL 就能查数据,FQL 让你查的更爽

实际上我们上述采集入库的是 MongoDB,我们是不是可以直接去拖页面了?

是,也不是~

我们可视化低码系统神工装修页面,拖拽控件并使用 FQL 为控件绑定数据模型。

但是,我们现在这里缓一缓,来聊聊我们为什么不直接使用 MongoDB 的查询语言,而是 FQL —— 这种我们创造的类 SQL 的方式。

实际上业界经过 Mongo 的 JS 接口语法洗礼之后,发现还是 SQL 这种声明式的语言更有表达力和更低的门槛,即便没有任何编程经验也很容易在了解基本规则之后快速上手。我只需要表明我在什么条件下要什么样的数据,系统程序理解这些意图自动化完成的查询和组织方式返回就好,而且 SQL 也更适合我们运营类对数据灵活多变的查询需求。

那 FQL 又是什么?

尽管 SQL 能在大多数条件下完美地解决 TCE 的数据查询需求,但 SQL 天生是为关系模型设计的,由于文档模型的结构通常并不像关系模型那么平坦,字段类型也不确定,如果又希望包括子属性在内的任意属性都可以参与计算,SQL 此时就不能很好地工作,加之针对运营类数据可视化场景,又有时序,甚至预测这种复杂场景,我们需要创造我们自己的语法——FQL。

3.1、时序查询

还是这个图,Flake 通过扩展的 “GROUP BY EVERY” 语法糖则助力了时序数据场景下查询,这才造就了“运营趋势”。

代码语言:javascript复制
SELECT     STRFTIME(ctime) AS ctime,     AVG(TotalCpu) AS Total,     AVG(UsedCpu) AS Used FROM     rov_cvmWHERE     Region='chongqing' GROUP BY EVERY 2*hour(ctime) # 注意这里

通过此语法,可以很容易的写出诸如下列任意尺度上的时序数据聚合。

代码语言:javascript复制
EVERY day(ctime)  #每天EVERY 2*hour(ctime)  #每2小时EVERY 15*minute(ctime)   #每15分钟

3.2、高阶能力:预测

还记得我们的初衷么,我们需要掌握又快又准的运营数据才能帮我们做好业务的运营。

如果,我们提供预测,让你能够未雨绸缪?

针对刚刚通过时间聚合出来的趋势数据,进行数据预测,向后预测7个点位并保留原始趋势数据中的末尾7个点位则可以通过如下语句实现。

代码语言:javascript复制
ALGO   my_forecast(y=cpu, date=ctime, forward=7, keeptail=7)USING   SELECT    avg(UsedCpu) AS cpu,     ctime   FROM     rov_cvm  WHERE     region='chongqin' AND    ctime>strptime('2022-01-01')    GROUP BY EVERY day(ctime)

当然,FQL 扩展的语法远不止上述提到的两个。这些扩展出来的语法,都是经过 TCE 众多数据看板类需求的沉淀和归纳而来。

4、低码神工——动动鼠标就能拖页面

有了数据,也有了查数据神器 FQL,终于来到了最后一步,让数据可视化出来。

运营类许多数据大屏、数据看板,这些页面当中的控件往往是相同的,不同之处仅在于排列和布局。这其实是组件化页面搭建场景落地的绝佳机会。为此,我们提供了可视化低码系统神工。

不需要懂 React、Vue,甚至也不需要前端仔。

1、从左侧的物料中选择合适的图表组件;

2、绑定数据, 神工抽离了图表的数据源为单独模块,支持上述数据中台的FQL,也支持普通云API等;

3、配置相图表属性,绑定我们录好的数据源;

4、Done !!!

0 人点赞