hmf-tsdb 时序数据库 查询和数据分析 的语法

 

HMF-TSDB 表达式通常由多个“子句”组成。HMF-TSDB表达式中存在以下几种子句:

1、选择器子句

2、时间范围子句

3、函数子句

4、降频子句

5、分组子句

1、选择器子句

选择器子句是用来 选择测点/指标的。在一个简单查询或者复杂分析的表达式中,可以定义一个或多个选择器。选择器的语法如下: metricName{tagName1=’tagValue1’,tagName2=’tagValue2’} 其中“metricName”是一个测点名,tagName是测点的一个标签,tagValue是测点标签值。

例子1:

查询一号配电柜的输入端口的功率,表达式可以这么写: power{device=‘一号配电柜’,port=‘输入’}

例子2:

在选择器中,对同一个标签,可以设置多个值。假如我们要查询两个设备的输入功率,可以这么写: power{device=‘一号设备’|‘二号设备’,port=‘输入’}。

2、时间范围子句

时间范围子句是表达用来定义时间范围的。在一个表达式中,必须有且仅有一个时间范围子句。时间范围子句有两种形式: from ‘yyyy-MM-dd HH:mm:ss’to ‘yyyy-MM-dd HH:mm:ss’或者 last[1h]

前一种形式直接定义了开始时间和结束时间。第二种形式定义了最近多长的一个时间范围,比如: last[1h] 表示最近1小时; 这种形式中,时间长度单位可以是:m、h或者d,分别表示分钟、小时和天。

3、函数子句

函数子句 赋予了HMF-TSDB强大的时序数据分析计算能力。函数子句的语法形式如下:functionName(subExp[…])。其中functionName是函数名,括号内是一个或者多个 选择器子句或者函数子句。HMF-TSDB表达式支持的函数包括:sum、avg、min、max、mul、div、sub等。

上述函数可以分为两个类型:集合参数型、二元参数型。其中sum、avg、min、max都属于集合参数型,mul、div、sub都属于二元参数型。

集合参数型函数:

参数为一个或多个(选择器或者函数)子句;每个子句获得的series数量不限;执行结果和参数顺序无关。我们以sum函数为例,无论我们为其定义了几个参数,每个参数能得到几个series。最终在执行函数的时候,HMF-TSDB表达式引擎会把每个参数所得到的series放到一起,再基于这些series执行求和运算。假如函数内部的子句得到了2个series,分别为:

S1={t1:v1,t2:v2,t3:v3 …};

S2={t1:v1’,t2:v2’,t3:v3’ …}

对这两个series进行sum计算的后,得到一个新的series:

{t1:(v1+v1’), t2:(v2+v2’), t3:(v3+v3’),…}

例子3:

如果要计算某个集群中所有服务器的cpu负载平均值,可以这么写表达式:

avg(cpu{cluster=‘web服务集群’}) last[3h]

二元参数型函数:

这类函数必须有2个参数;每个参数只能获得的一个series;执行结果和参数顺序相关。 我们以sub(减法)函数为例,该函数必须申明两个参数,每个参数必须能获得一个series,执行时将第一个参数所得series的所有时序数据减去第二个参数所得series中相应的时序数据。

例子4:

如果要分析电能从某个配电柜到用电终端之间线路损耗情况,可以这样表达式:

sub(power{device=‘配电柜1’,port=‘输入’},sum(power{src=‘配电柜1’})) last [1d]

上述表达式的含义是:计算“最近一天内配电柜1的输入功率” 减 “该配电柜下所有用电设备的功率和”

备注:假如作为参数的多个series之间,时序数据的采样时间并不一一对应,则函数在执行过程中会采样插值算法,推算出部分时序数据值。

4、降频子句

降频子句允许HMF-TSDB在时间轴上对时序数据进行聚合,假如用户希望在比较大的时间尺度上对时序大数据进行分析的话,常常希望得到的是一个较为粗粒度的曲线,这时候就需要用到降频子句。每个表达式最多可以申明一个降频子句。

降频子句语法如下:downsample[1m:avg]。其中downsample是降频关键字;1m是降频后时间间隔,1m表示降频后的时间间隔为1分钟,avg是降频算法,avg表示在指定的时间间隔内执行平均算法。假如原始数据是每秒钟存储一次,被降频为每分钟展示一个数据,那么我们需要在时间轴上将每60秒的时序数据合并为一个时序数据,此时可能用到的算法有:avg(求平均值),sum(求和),min(求最大值),max(求最小值),first(求初值),last(求末值)。

例子5:

如果有个web服务,运维监控系统每秒钟采样并存储了一次pv(页面访问量),运维人员想了解最近24小时内每小时的pv值,则可以用这样的表达式: pv{server=‘webServer’} downsample[1h:sum] last[24h]

5、分组子句

分组子句允许HMF-TSDB对时序数据采用分组聚合算法,语法如下:by tagName。每个表达式最多可以申明一个分组子句。

例子6:

如果某个业务系统,所有服务器被分为三个集群:存储集群、微服务集群、web服务集群。运维人员希望能够获得三组集群平均cpu使用率,以便分析系统性能瓶颈。那么下面的表达式就可以做到:

avg(cpu{business=‘应用系统A’}) by serverType last[24h]

该表达式执行后,我们可以得到三个series,分别代表:

serverType=“存储服务集群”的所有服务器的平均cpu使用率序列、

serverType=“微服务集群”的所有服务器的平均cpu使用率序列、

serverType=“web服务器集群”的所有服务器的平均cpu使用率序列。

其他说明

在HMF-TSDB表达式中:

1、最小的表达式必须包含至少一个测点选择器、和一个时间范围子句

2、函数是可以嵌套的;

3、分组子句只能用于集合参数型函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值