背景
最近收到一份关于杭州亚运会技术保障的公众号文章(mp.weixin.qq.com/s/YO\_bq62L...%25E3%2580%2582 "https://mp.weixin.qq.com/s/YO\_bq62LqUX0Vgv3DIU3zA)%E3%80%82")
其中观测云Function函数平台与云商产品整合的部分个人会觉得很有意思。之前简单聊过Function这个产品在数据整合及数据开发方面的功能。今天借杭州亚运会数据可视化这个主题,尝试使用Function配合云厂商可视化套件给公司新上线的测试机做了个监控大屏,再次感受了一下Function强大的数据功能。以下便是这个过程的简单分享。
观测云数据的获取
根据Function官网的介绍,通过开发平台访问观测云特定工作空间的数据主要有几种获取方式。一种是通过Datakit连接器连接到空间进行数据查询的方式。这种方式对于初次接触观测云的同学来说会比较友好。因为连接器对象自身封装了一些数据查询方法,大家可以按照官网的例子方便的实现数据查询功能。另一种是通过观测云网关连接器进行对应工作空间的访问,这种方式的学习成本相对较高,需要理解观测云OpenAPI的设计及请求构造方式。不过适用场景方面应该会更灵活一些。本文使用的是datakit连接器的query方法进行数据的获取:
通过datakit连接器进行数据查询,就必须要引入另一个概念------DQL语言。DQL语言的全称,没记错的话应该是Debug Query Language(或者DataFlux Query Lauguage?),是观测云封装的一款混合查询语法工具。DQL通过一定的语法规则,将原先不同数据引擎和数据类型的查询语法简化为一套查询语法,降低运维监控场景下数据查询操作的复杂度。在本文的例子中,建立datakit连接器后我们可以直接使用DQL语句来获取这个datakit对应空间的某个数据。以下图中查询CPU负载为例:
在选定我们需要查询的数据后,只需要在指标分析的指标选项右侧,点击「</>」按钮,即可获取查询这个指标所对应的DQL语句。对于不是很熟悉观测云DQL语法体系的同学或者初学者来说是非常友好的功能:
将上面这个语句放入我们在Function平台编写的代码中,点击运行即可检查数据读取的效果:
这里为了演示清晰以及减少数据处理工作量,我们对原查询语句增加了group by条件和查询数据量的限制。这些小的语法技巧大家可以在官网资料: DQL查询 这个链接中学习和了解。
到这里我们就完成了样本数据获取的准备工作。当然,在构建整个运维监控大屏的过程中,一两个指标数据的查询肯定是不够的,这需要我们分别获取不同对象、不同维度的数据进行展示和分析。不过这个操作具体到代码层面就只是DQL语言参数上的差异而已,使用Python处理这些差异还是比较简单的。
Function数据接口对外封装
完成观测云数据的对接后,如果想要将这些数据封装给外部系统使用,需要用到Function平台的第二个功能------授权链接。授权链接可以理解为一套内置的Http Server,用户无需关心其具体实现,只需要聚焦需要开放的接口和具体的处理参数,即可实现函数功能的对外暴露
在暴露接口之前,还需要做两方面的准备。一个是我们接口对外提供的数据格式。这个信息需要根据大家所选用的可视化产品,按照产品要求的数据格式对外返回数据。另一个是接口对入参的处理,这个取决我们对接口功能的定义和设计。还是以上面CPU负载这个指标为例,假设考虑最简单的实现方式,调用方无需下发入参,仅以接口区分获取数据的类型。则对上述代码再次封装,处理好返回值格式后将这个接口函数通过装饰器声明给Function平台:
声明的作用是让Function平台能够获取需要对外暴露服务的地址。接下来需要在「管理」-「授权链接」页面中点击新建,执行函数选择上面声明的datav_interface_demo并保存。
这个操作之后,一个可对外调用的授权链接就生成了。点击授权链接的示例,可以获取如何调用链接的提示:
访问这个链接地址,即可看到调用后的返回数据:
以这样的方式提供对外封装,则每个接口只能获取对应的指标或数据。如希望通过下发参数的方式来区分不同的查询请求或者获取不同的数据,则需要对函数的入参**kwargs进行处理,按照约定的参数执行相关操作。
阿里云DataV视图控件数据对接
完成数据封装后。就可以开始在阿里云DataV可视化控件上使用接口了。我们首先为这次测试创建一个新的画布,在画布上拖拽一个控件来验证刚才我们接口数据的效果。
以这个数字翻牌器为例,双击数据显示区域,设置数据源选择类型为API,在URL地址中填入我们刚才生成的接口:
这里就完成了FunctionAPI到DataV视图控件的打通。操作起来还是比较简单的,不过有两个点还是提醒一下。一个是关于数据返回格式,刚才提到我们接口返回的数据需要与调用发起方所需的数据格式匹配。那么如何确定发起调用的数据接口需要什么样格式的返回值呢?我们在DataV视图控件编辑的最下方可以看到数据响应结果的按钮,旁边通常会提供当前这个视图控件所需的数据格式样例:
对于数字翻牌器来说,我们需要返回一个json数组,每个数组中的k-v取值和类型按照图中表格进行配置,就可以将数据正确发送给对应控件了。编写针对其他控件的Function API时,如果不知道如何确定返回值格式,就去看一下示例吧。
第二个需要注意的点是带参数调用的入参格式问题:
其实在上面示例代码中应该可以看到我们预留了接口调用时传入参数的处理。如果在实际使用时希望知道阿里云管控台配置的参数是以什么格式传入Function API的,可以在入口位置print(**kwargs),然后将代码发布给授权链接。在授权链接的任务记录中,点击最近一次调用的"显示详情",详情信息就可以看到DataV组件下发的参数格式了:
知道了入参格式和返回格式,就可以套用给其他DataV组件,根据自己的需求构建大屏
总结
最终效果嘛。。相比观测云官方的亚运会大屏还是简陋了一些,部分图例的参数还在研究和学习中。不过数据打通的主要部分还是基本都涉及到了。Function的数据封装和发布功能非常简单,容易上手,稍作研究即可实现对数据的提取和对外发布,确实是一款非常好用的数据处理平台。期待官方推出更多Function的场景来教大家如何用好Function~
与本文相关的链接:
DataFlux Func开源项目地址:github.com/GuanceCloud...
DataV产品文档:help.aliyun.com/document\_d...
杭州亚运会官方文章:mp.weixin.qq.com/s/YO\_bq62L...