当前位置: 首页 > 知识库问答 >
问题:

跨XDB度量查询?

慕朝明
2023-03-14

我在XDB数据库中有3个时间序列指标,类似于:

myservice_processed
myservice_invoked
myservice_error

为了得到一组时间序列值,我有一个grafana图,它映射:

select sum(value) from myservice_processed where $timeFilter GROUP BY time($interval) fill(null)

...对于三个值中的每一个。这提供了一个每分钟发生多少次调用、成功和失败的概念。通常,处理的错误的总和应等于调用的的值。

现在,我想要得到一个基于上述指标的时间序列值,它给出了失败的百分比。例如,在任何给定的时间间隔内,我可能有1000次调用,900次处理,100次错误;我希望这个指标在这个时间间隔内是10%。

对我来说,我不知道如何做到这一点,我已经开始怀疑这是不可能的,这让我难以置信。有人能告诉我我错了,告诉我怎么做吗?


共有3个答案

南门茂才
2023-03-14

XDB缺乏做这类事情的分析结构。如果您想坚持使用influxdb,您必须在外部层中实现它,并将数据反馈回influx。

谢志文
2023-03-14
匿名用户

这可以通过一组连续查询在XDB中完成。

XDB的工作原理似乎是存储便宜,而非计划的处理器时间昂贵。设置存储结果的后台连续计算很容易,而且可以让计算在后台安静地搅动。在XDB中进行动态计算很快就会变得笨拙(或者不可能,如果它们跨越测量范围的话)。

每五分钟,对每个度量进行一次求和,按时间分组,并将求和插入第四个度量,称为myservice\u summary

myservice\u summary将有多个字段,而不是一个名为value的字段;一个用于调用的调用,一个用于已处理的调用,另一个用于有错误的调用。我们将字段命名为对读取数据的人有意义的名称,而不是默认名称

请注意,使用GROUP BY time(x)(在本例中,每五分钟一次)压缩数据也减少了存储开销和客户端查询时间(在客户端检索、传输和显示的点更少)。它还降低了存储需求。它是常见的使用至少两种保留策略:原始数据得到修剪在很短的时间内(例如30天),和压缩和处理的数据可以保持更长的时间(例如月,年,...)

当然,按时间选择过大的组()间隔意味着粗分辨率可能不利于故障查找。e、 g.当您需要知道在哪一个小时内开始寻找特定更改时,按时间分组(1d)没有多大用处。

最佳时间分组窗口平衡了问题何时开始/停止的有意义检测与客户端响应速度和存储负载。找到这个最佳值是留作为一个练习。:)

请注意,使用CLI时,对于下面三个连续查询中的每一个,从CREATE continuous QUERYEND的所有内容可能都需要在一行上,以避免语法错误。我把换行符放进去只是为了提高可读性。

方括号[]表示可选参数。括号本身不包括在字面上。

在这种情况下,您将使用额外的标记键来选择哪些键是重要的,并且应该在新的度量中。

CREATE CONTINUOUS QUERY myservice_processed_sum_5m ON your_db_name
BEGIN
    SELECT sum(value) AS processed_sum_5m 
    INTO myservice_summary 
    FROM myservice_processed GROUP BY time(5m)[, other_tag_keys e.g. vendor_id]
END 

CREATE CONTINUOUS QUERY myservice_invoked_sum_5m ON your_db_name
BEGIN
    SELECT sum(value) AS invoked_sum_5m 
    INTO myservice_summary 
    FROM myservice_invoked GROUP BY time(5m)[, other_tag_keys e.g. vendor_id]
END 

CREATE CONTINUOUS QUERY myservice_error_sum ON your_db_name
BEGIN
    SELECT sum(value) AS error_sum_5m 
    INTO myservice_summary 
    FROM myservice_error GROUP BY time(5m)[, other_tag_keys e.g. vendor_id]
END

现在我们有了一个新的度量,称为myservice\u summary,它有三个字段:processed\u sum\u 5minvoked\u sum\u 5m,和error\u sum\u 5m(假设5分钟的总结是您想要的)。

在此基础上,查询过去24小时的不合格率为:

SELECT (error_sum_5m / invoked_sum_5m) * 100.0 
    AS error_pct_5m
    FROM myservice_summary
    WHERE time > now() - 1d
    [GROUP BY other_tags e.g. vendor_id]

或者用表格形式:

SELECT [vendor_id, etc, ](error_sum_5m / invoked_sum_5m) * 100.0 
    AS error_pct_5m
    FROM myservice_summary
    WHERE time > now() - 1d

在另一个CQ中使用存储在myservice\u summary中的结果是可能的,但我不能100%确定是否要避免竞争条件,即,如果依赖于myservice\u summary的CQ在填充该度量的查询之前执行,该怎么办?

希望有帮助。

濮阳鸿卓
2023-03-14

这目前是不可能的,因为Influxdb目前不支持多个系列的聚合功能(Influxdb 1.0)

到目前为止,Grafana不支持时间序列计算,但我们确实有一张票https://github.com/grafana/grafana/issues/3677

 类似资料:
  • xDB

    xDB 可以实现将来自 Oracle 和 SQL Server 的数据复制到 PostgreSQL 数据库上,这样做的目的: 节省在许可证上的费用 提升 OLTP 和报表性能 避免被供应商捆绑 下载前请阅读 EnterpriseDB Limited Use License

  • 我有一个流入数据库,里面充满了值。这些值由Grafana提供。我需要的是根据选定的时间间隔获取实际值。 目前,我对单个指标有以下查询: 我想要的是从这个区间中减去最小的值,所以它只计算这个区间内的值。因此,图表需要从零开始。要从该间隔中获取最低值,我使用: 所以我认为像这样结合这两个(和子查询)应该可以: 不幸的是,这不起作用。该查询不被接受为子查询。

  • xDB-Replication 为开源的 PostgreSQL 数据库实现多主节点的数据复制解决方案。 特点: Uniqueness, update and delete conflict detection Multiple conflict resolution strategies Replicate one or more tables Automatic Schema replicati

  • 问题内容: 有没有办法在JTable中实现html表格之类的行跨度和colspan。 问题答案: 这是一个非常古老的例子。我不知道它是否仍然有效: http://www.java2s.com/Code/Java/Swing- Components/MultiSpanCellTableExample.htm

  • 我正在使用XDB存储一些服务度量。这些是简单的指标,例如读取字节或活动连接。然后,我将在grafana的帮助下,在此基础上创作一些可视化作品。 将某些内容显示为“读取字节”非常简单,它基本上是按时间间隔对值进行汇总。 这是在“活动连接”上,我很难弄清楚。这些是连接到服务的tcp套接字,其中测量的是连接的套接字的数量;每当套接字连接或断开连接时,都会更新。 如果我只有一个服务实例,这很容易,我只需要

  • 问题内容: 在无序列表中: 允许添加class或style属性,但不允许填充文本以及添加或更改标签。 该页面正在使用Courier New呈现。 目标是在跨度后排列文本。 “ OR”的理由并不重要。 懒惰的动物文字可能包含在其他元素中,但我必须仔细检查。 问题答案: ul { 就像Eoin所说的那样,您需要在“空”跨度中放置一个不间断的空格,但是您不能为内联元素分配宽度,只能填充/边距,因此您需要