InfluxDB + Grafana计算成功率

建议针对每类Metric,使用一个Metric,增加success的tag区分成功还是失败。

方式一 借助Grafana的Transfrom

第一步:新建2个Query

  • Query Total:

    SELECT sum("count") as "total" FROM "laker_test" WHERE ("cluster" =~ /^$Region$/) AND $timeFilter
    
  • Query Success:

    SELECT sum("count") as "success" FROM "laker_test" WHERE ("cluster" =~ /^$Region$/ AND "success" = true) AND $timeFilter
    

第二步:在Transform处增加Outer joinField Name选择Time

第三步: 在Transform处增加Add field from calculation

  • Mode: Binary operation
  • Operation:

问题:如果 第一步 的查询中没有数据,即没有一条记录,那么这个查询无法返回0这种。导致绘图失败。

方式二 Influx子查询

针对上面的问题当没有记录,不显示默认0的问题,我们可以通过子查询+fill(0)

第一步:新建1个Query子查询+fill(0)

SELECT "success"  , "total"
	 FROM ( 
           SELECT sum("count") as "total" FROM "laker_test" WHERE ("cluster" =~ /^$Region$/) AND $timeFilter
		   ), (
           SELECT sum("count") as "success" FROM "laker_test" WHERE ("cluster" =~ /^$Region$/ AND "success" = true) AND $timeFilter
           )
	fill(0)

此时结果如下图:

1.当没值的时候显示情况

2.当有值的时候显示情况

这之后也可以配合Transform使用了,例如Reduce - Calcuations = max,这里不讲了,反正Transfrom很强大哈。

第二步:针对第一步的结果包装一层。

SELECT sum("success") as tsuccess , sum("total") as ttotal
		FROM 
		( // start
	 SELECT "success"  , "total"
	 FROM ( 
           SELECT sum("count") as "total" FROM "laker_test" WHERE ("cluster" =~ /^$Region$/) AND $timeFilter
		   ), (
           SELECT sum("count") as "success" FROM "laker_test" WHERE ("cluster" =~ /^$Region$/ AND "success" = true) AND $timeFilter
           )
	fill(0)
         // end 这是第一步的sql
        ) Group by time($interval) fill(0)

在这里插入图片描述

第三步:针对第二步的结果包装一层。

select 
	 sum("tsuccess") / sum("ttotal") as rate
from 
	(
        第二步的sql
    )

Transfrom介绍

参考:https://blog.51cto.com/u_12227788/5471570

1. Add field from calculation 从计算中添加字段

从计算中添加字段,使用其他两个字段计算的新字段,每个转换可以添加一个新的字段

mode -选择一种模式:

  • Reduce row -对选定字段的每一行独立应用选定的计算。
  • Binary option -对来自两个选定字段的单行中的值应用基本数学运算(求和、乘法等)。

Field name -如果选择 Reduce row,选择要在新字段计算中使用的字段名称。
Calculation -如果您选择Reduce row模式,则会出现calculation字段。单击该字段以查看可用于创建新字段的计算选项列表。
Operation -如果您选择Binary option模式,则会出现operation字段。这些字段允许对来自两个选定字段的单行中的值执行基本数学运算。还可以将数值用于二元运算。
Alias -(可选)输入新字段的名称。如果将此留空,则该字段将被命名为与计算匹配。

Replace all fields -(可选)如果您想隐藏所有其他字段并在可视化中仅显示您的计算字段,请选择此选项。

2.Outer join 按字段连接

使用此转换按字段连接来自结果集的多个时间序列。

如果想组合查询以便从字段计算结果,则此转换特别有用。

多个Query的场景。一般选择按Timejoin。

3.Merge 合并
使用此转换将多个查询的结果组合成一个结果。这在使用表格面板可视化时很有帮助。可以合并的值被合并到同一行。如果共享字段包含相同的数据,则值是可合并的。

多个Query的场景。没有上面的Outer Join好用

4.Concatenate fields 连接字段
将两个查询结果简单粗暴的拼接到一起

猜你喜欢

转载自blog.csdn.net/abu935009066/article/details/128703237