揭密首个面向IaaS的查询语言:ZStack Query Language(ZQL)
在ZStack中使用了两种数据库:关系数据库存放元数据,时序数据库存放监控数据。由于不同数据库查询方式不一样,在ZQL之前,用户要查询一个资源的监控数据,需要先通过Query API获得该资源的元数据,再通过ZWatch的查询API获得其监控数据。例如要查询一个名为webvm虚拟机的CPU使用率监控数据,要执行如下API: QueryVmInstance fields=uuid name=webvm GetMetricData namespace=ZStack/VM metricName=CPUUsedUtilization labels=VMUuid=QueryVmInstance返回的UUID offsetAheadOfCurrentTime=60 ZQL通过return with子句解决这个问题。return with是一种插件机制,它允许子系统 通过插件将自身的查询条件注入ZQL中,ZQL会先执行关系数据库查询,将满足条件资源的原数据查询出来后,再将资源的主键(primary key)作为输入条件调用实现return with子句的插件,最后将插件的查询结果一并返回给ZQL的调用者。 上述查询虚拟机监控数据的需求可以通过一条ZQL语句实现: query vminstance.hostUuid,uuid where name = 'webvm' return with (zwatch{resultName='webvm-cpu',metricName='CPUAllUsedUtilization',offsetAheadOfCurrentTime=60}) 返回: { "results": [ { "inventories": [ { "hostUuid": "f8271f58468b4281a212a43e530b5535", "uuid": "05781209d24341ac84fc055ae71820ac" } ], "returnWith": { "webvm-cpu": [ { "labels": { "VMUuid": "05781209d24341ac84fc055ae71820ac" }, "time": 1533280402, "value": 0.8 }, { "labels": { "VMUuid": "05781209d24341ac84fc055ae71820ac" }, "time": 1533280462, "value": 0.8 } ] } } ], "success": true } (编辑:PHP编程网 - 湛江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |