【bosun】查询表达式

表达式文档

https://bosun.org/expressions

seriesSet的理解

可以将其结构看成:

seriesSet = {
   "group0":{
       time0: num0,
       time1:num1,
       ....
    },
  "group1":{
       time0: num0,
      time1:num1,
       ....
  }
}

每个seriesSet由多个组构成,每个组由时间和值映射的序列构成。
group的格式: {tagA=A,tagB=B}

如果数据未做分组操作,则有唯一的一个空组:group={}.

addtags(seriesSet,"tagA=A,tagB=B...)

seriesSet中的每个组添加额外的tag.

merge(seriesSet...) 合并多个数据集

要求:所有数据集之间的组没有冲突.

aggr(seriesSet,"groups...","sum|max|min...")聚合操作

其操作过程就是将seriesSet中的组进行削减,只保留groups...中指定的组,如果两个组,保留之后具有相同的组,则将它们进行聚合。

比如seriesSet中有多个组:{A=a,B=b,C=c1},{A=a,B=b,C=c2},{A=a1,B=b,C=c2}, groups=A,B, 则对前两个组进行聚合操作,并去掉C=c1,C=c2的tag;第三个组去掉C=c2的tag即可。最终结果:{A=a,B=b}, {A=a1,B=b}.

特别地,如果groups为空,则对所有组进行聚合操作,并最终保留一个空的组.

例子

使用addtagsmergeaggr完成不同指标的聚合

根据实际场景我们可能将一类指标拆分成很多个指标,而不是把他们都放到一个指标下面用group区分。如果需要做累加运算,由于+的逻辑是以右边的值为准,去掉左边不存在的值,所以不能满足统计和的需求。

这个时候,我们可以通过将两个指标聚合到一个指标里面,来进行聚合操作。
为了聚合指标,我们需要避免组冲突,所以使用addtags为两个数据集加上tag,然后进行merge,将两个数据集加在一起,然后使用aggr进行去组操作,从而得到最终数据。

$success = q("sum:rate{count}:call.method.success.throughput", "$start", "2m")
$fail = q("sum:rate{count}:call.method.failed.throughput", "$start", "2m")

$success_set = addtags($success,"type=success")
$fail_set = addtags($fail,"type=fail")

$merge_set = merge($success_set,$fail_set)
$sum = aggr($merge_set, "", "sum")
$sum

你可能感兴趣的:(脚本&工具)