在InfluxDB中计算费率

时间:2015-12-01 00:11:54

标签: time-series influxdb

我有3列的测量表(时间,值,结果)。 timevalue是时间序列数据库所需的基础。 result列标记可能具有以下值之一(成功/硬失败/软失败/未知)。

我想跟踪给定时间窗口内的成功率(成功/总计)(因为我将在grafana上使用此功能,时间窗口可能会更改并应支持动态时间范围查询)

我在Influx 0.9上尝试过的事情:

1: Using Grafana: 

Grafana有一个百分比堆栈选项来显示计数值。不幸的是,它没有显示百分比值。它只显示带有分布的图形。我有兴趣产生一个百分比数字,我不认为Grafana有这种能力。

2: Continuous queries - single table:

我尝试设置连续查询以汇总新测量表中的成功次数和总次数。

CREATE CONTINUOUS QUERY count_total ON metrics BEGIN SELECT SUM(value) as total INTO "metric_agg" FROM "original_metric" WHERE time > now() - 1h GROUP BY time(5m) END

CREATE CONTINUOUS QUERY count_success ON metrics BEGIN SELECT SUM(value) as success INTO "metric_agg" FROM "original_metric" WHERE result = 'success' and time > now() - 1h GROUP BY time(5m) END

鉴于这些是两个不同的CQ写入相同的表,一些值在新的metric_agg表上不完全匹配,导致grafana查询失败。我觉得我可能会在这里做错事。如果你看到错误,Pelase告诉我

更新:不确定以下内容是否有效,但想在查看beckettsean的回复后将其放入此处。我很快就会尝试一下。

在单独的字段下创建2个CQ转储聚合值并运行分部:

CREATE CQ count_total ON metrics BEGIN SELECT SUM(value) as total INTO "metric_agg" FROM "original_metric" WHERE time > now() - 1h GROUP BY time(5m) END

CREATE CQ count_success ON metrics BEGIN SELECT SUM(value) as success INTO "metric_agg" FROM "original_metric" WHERE result = 'success' and time > now() - 1h GROUP BY time(5m) END

Grafana:select success / total from metric_agg where $timeFilter

3: Continuous queries - single table - overwrites:

我尝试在上面的每个CQ上插入“dummy”0值,以确保每列的每一行都有一个值。在大多数情况下,这实际上会用0覆盖原始值,并生成不正确的值,从而导致错误的速率。

4: Continuous queries - multiple tables:

我现在正试图在自己的表中编写每个CQ,并希望在Grafana查询中合并聚合表。然而,涌入的“合并”似乎并没有产生一个单一的系列。

SELECT sum("success") as success, sum("total") as total FROM merge /metric_result_*/ WHERE time > now() - 2h GROUP BY time(5m) fill(0)

生成2个系列(metric_result_successmetric_result_total ..与CQ编写数据的位置相同。)

我想我想问的是: 什么是计算0.9+流入费率的最佳方法?如果可能的话,CQ似乎非常脆弱,我很乐意避免它们。

2 个答案:

答案 0 :(得分:1)

  

2:连续查询 - 单表:

不推荐使用此方法,因为CQ都写入同一系列。没有用于区分结果的标签,因此一个CQ覆盖来自另一个CQ的点。点由其测量名称,标记集和时间戳唯一标识。这些字段不是唯一性的一部分。每个CQ都写入相同的度量metric_agg。由于没有GROUP BY <tag>GROUP BY *,因此两个CQ的标记集都是空的。这只留下时间戳来区分两者,并且因为它们具有相同的GROUP BY time()子句,所以它们将写出具有相同时间戳的点。

  

4:连续查询 - 多个表:

无法计算测量值(您称之为“表格”)。测量中的系列可以合并,但不能跨测量。

这是一个很长的路要说,仅在InfluxDB查询语言中,您所要求的内容尚不可能。要计算在特定状态下花费的时间,您需要在InfluxDB之外处理查询结果。

答案 1 :(得分:0)

对于现在阅读此内容的任何人(最近推出了Influx 1.0 beta)。

Influx团队通过他们的0.10版本修复了一个问题**,使得“2:连续查询 - 单表:”方法对我起作用。注意:我在不同的标签中写入值,因此没有覆盖。只需继续将聚合值写入这个新表,在grafana中我可以使用一个查询来划分我感兴趣的列/标记。

或者您也可以使用Kapacitor来执行相同操作。

**对于任何好奇的人来说,在0.10中修复的Influx问题是在0.10之前在现有时间戳添加新标签值,将删除旧标签/ feild并仅写入此新信息(导致我们删除信息)。