hmf-tsdb 虚拟测点与前置聚合

概述

在监控系统中,需要监控、分析的数据通常不仅限于那些直接能获得的采样数据(传感器获得的数据或者设备自主生成的状态数据)。这时候,人们通常需要对“采样数据”进行聚合运算,生成更加抽象和宏观的数据,并在这个基础上进行分析。HMF-TSDB提供了后置聚合分析能力(请参考查询、数据分析语法),但对于那些最常用的 聚合算法,最好还是使用前置聚合功能,该功能使得tsdb能够在存储"采样数据"的过程中,对普通采样数据进行聚合,当用户需要查询、分析这些数据的时候,可以直接查询得到结果,而无需过于频繁地进行聚合运算。

虚拟测点

HMF-TSDB 中使用虚拟测点的概念来定义前置聚合算法,应用开发者可以在vm.json中配置虚拟测点,下面文本是几个虚拟测点的例子:

{"name":"sumOfCurrent","tags":{"area":"area_1"},"exp":"sum(current{area='area_1'}) downsample[5s:avg]"},

{"name":"sumOfCurrent","tags":{"area":"area_2"},"exp":"sum(current{area='area_2'}) downsample[5s:avg]"},

{"name":"sumOfCurrent","tags":{"area":"area_3"},"exp":"sum(current{area='area_3'}) downsample[5s:avg]"},

上面的代码配置了三个虚拟测点,他们分别聚合了区域1、区域2和区域3 内各个用电设备电流的合计值,聚合周期是5秒,在时间轴上同一个测点采用平均值算法,在测点之间采用求和算法。

每个虚拟测点应该包含以下几个部分:

name:测点名称

tags:测点标签

exp:聚合算法

其中exp 的语法和 HMF-TSDB的查询分析语法完全一致,但在定义虚拟测点的时候不可以用group by子句。exp中的函数子句可以嵌套,能够根据业务需要定义出复杂的聚合逻辑。exp中的downsample 包含了两个含义,":"之前的部分是计算周期,必须数字开头,s结尾,表示多少秒计算一次虚拟测点 值。":"后的部分定了在exp中包含的各个测点在时间轴上聚合算法。

虚拟测点的值产生过程:

1、虚拟测点计算线程,总是在遍历所有的虚拟测点,并在遍历过程中,根据表达式中 downsample 子句的 时间周期判断是否需要计算虚拟测点的值。

2、如果需要计算虚拟测点的值,“测点值计算器” 首先遍历表达式中所有的"测点选择器",根据选择器得到一个测点集合。比如"sum(current{area='area_1'}) downsample[5s:avg]"这个表达式中,就可以得到 位置在区域1的设备 的电流测点 的集合。

3、根据downsample子句,对测点的采样值进行降频处理,比如“ downsample[5s:avg]”这个子句的含义是,找到测点最近5秒内的值,并做平均值计算。

4、把所有相关测点降频后得到的值,作为exp中函数的参数,计算函数值,最终得到虚拟测点的值。

查询和展示

当你定义了虚拟测点后,HMF-TSDB 会在运行过程中,自动把相应的测点采样值聚合成虚拟测点的采样值,并存储在TSDB中。当应用需要这些聚合数据的时候,直接按照普通查询语法就能到到相应的serial。比如,应用需要查询最近24小时内区域1内所有设备电流总和的时序数据,执行下面这个查询就可以了:

sumOfCurrent{area:"area_1"} last [24h]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值