首页 文章

在InfluxDB中计算费率

提问于
浏览
4

我有3列的测量表(时间,值,结果) . timevalue 是时间序列数据库所需的基础 . result 列标记可能具有以下值之一(success / hard-fail / soft-fail / unknown) .

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


我试过关于Influx 0.9的事情:

1: Using 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 's writing to the same tables, some values don' t在新的 metric_agg 表上完全匹配,导致grafana查询失败 . 我觉得我可能会在这里做错事 . 如果你看到错误,Pelase让我知道

UPDATE :不确定以下内容是否有效,但是想看看beckettsean之后想把它放在这里's response. I' ll很快就会尝试这个 .

在单独的字段下创建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

格拉法娜: 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

    2:连续查询 - 单表:

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

    4:连续查询 - 多个表:

    没有办法计算测量值(你称之为“表”) . 测量中的系列可以合并,但不能跨测量 .

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

  • 1

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

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

    或者,你也可以使用Kapacitor来做同样的事情 .

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

相关问题