我有一个需要监控其度量的系统。为了做到这一点,我使用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关键字之后写入多个数据系列。然而,我想合并它们并对合并的系列进行处理。在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操作。a内的所有级数除非显式地,否则在查询时将自动合并度量被WHERE子句中的标签排除。
所以,当你写
SELECT mean(value) FROM merge(/namespaces_.*.amount/) where time < "2015-10-21T14:16:18Z" group by time(1m);
你得到一个空的结果…
因此,我的问题是:如何从多个时间序列源中选择数据,合并它们,按一些标准分组,并使用influxdb 0.9.x工具将聚合函数应用于每个组?
如何从多个时间序列源中选择数据,合并它们,按一些标准分组,并使用influxdb 0.9.x工具对每个组应用聚合函数?
您需要正确地构建您的模式,正如我在邮件列表中回应的那样。
在InfluxDB 0.9中,给定度量下的所有系列默认合并,并使用WHERE
子句中的标记进行过滤。
不同测量下的系列不能合并为一个结果。
你有很多测量,每一个系列。每个系列应该有几个测量值。参考0.8 vs 0.9文档