文章目录
- 方式一 借助Grafana的Transfrom
- 方式二 Influx子查询
- Transfrom介绍
建议针对每类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 join
,Field 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的场景。一般选择按
Time
join。
3.Merge 合并
使用此转换将多个查询的结果组合成一个结果。这在使用表格面板可视化时很有帮助。可以合并的值被合并到同一行。如果共享字段包含相同的数据,则值是可合并的。
多个Query的场景。没有上面的Outer Join好用
4.Concatenate fields 连接字段
将两个查询结果简单粗暴的拼接到一起