我有一个系统要求监控其指标 . 为了做到这一点,我使用grafana Influxdb . 我目前使用的Influxdb版本是0.9.x.
我希望能够计算一些统计数据 . 我的用例很简单:
-
我想从几个时间序列源中进行选择查询 .
-
我想在select查询中创建group by语句以将我的数据分组 .
-
最后,我想找到每个组内的平均值 .
我的查询如下:
SELECT mean(value) FROM /namespaces_.*.amount/ where time < "2015-10-21T14:16:18Z" group by time(1m);
这似乎微不足道,然而,它有点棘手 . 我得到这样的东西:
name: namespaces_1.amount
------------------------------------------------------------
time mean
1970-01-01T00:00:00Z 0.8877630461283463
name: namespaces_2.amount
------------------------------------------------------------
time mean
1970-01-01T00:00:00Z 0.6982870635693408
根据Influxdb文档,您可以从多个来源获取数据 . 换句话说,您可以在FROM关键字后编写多个数据系列 . 虽然我想 merge 他们并在合并系列上进行处理 . 在Influxdb 0.8.x中有 merge
函数,它使您能够混合数据源 . 但是,在Influxdb 0.9.x中既没有合并也没有连接操作 .
参考:https://influxdb.com/docs/v0.9/concepts/08_vs_09.html
在InfluxDB 0.9中,既不支持MERGE也不支持JOIN操作 . 不再需要MERGE操作 . 测量中的所有序列在查询时自动合并,除非WHERE子句中的标记明确排除 .
所以,当你写作
SELECT mean(value) FROM merge(/namespaces_.*.amount/) where time < "2015-10-21T14:16:18Z" group by time(1m);
你得到一个空的结果......
因此,我的问题是: what is the way to select data from multiple time series sources, merge them, group by some criteria and apply aggregation function to each group using tools of influxdb 0.9.x ?
1 回答
您需要正确构建架构,因为我在mailing list上做出了回应 .
在InfluxDB 0.9中,默认情况下合并给定测量下的所有系列,并使用
WHERE
子句中的过滤使用标记 .不同测量下的系列不能合并为单个结果 .
您有多个测量,每个测量一个系列 . 您应该进行少量测量,每个系列都有很多系列见0.8 vs 0.9 docs .