Influx中使用Flux查询通过两个求和值计算错误率的咨询
修正后可直接计算错误率的Flux代码
count = from(bucket: "stress") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["application"] == "application name" and r["_field"] == "count" and r["transaction"] == "all") |> sum(column: "_value") countError = from(bucket: "stress") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["application"] == "application name" and r["_field"] == "countError" and r["transaction"] == "all") |> sum(column: "_value") // 修正join关联规则,用公共维度做关联 join( tables: {count, countError}, on: ["_measurement", "application", "transaction"] ) // 新增字段计算错误率 |> map(fn: (r) => ({ r with // 加入除以0的异常判断,避免计算报错 errorRate: if r._value_count == 0 then 0.0 else float(v: r._value_countError) / float(v: r._value_count) // 如果需要百分比格式,就用下面这行 // errorRatePercent: if r._value_count == 0 then 0.0 else float(v: r._value_countError) / float(v: r._value_count) * 100.0 })) // 可选:只保留需要的字段,清理结果 |> keep(columns: ["application", "transaction", "errorRate", "_time"])
核心修改说明
- 修正了join关联逻辑:原代码用
_value作为关联键是错误的,会导致两个求和结果值不相等时关联失败,改用两个结果集共有的_measurement、application、transaction等维度字段作为关联键,保证关联结果正确 - 新增
map算子实现错误率计算:join完成后会自动把两个表的_value字段重命名为_value_count和_value_countError,直接对两个字段做除法即可得到错误率,同时加入除以0的边界处理,避免请求总数为0时查询报错
内容的提问来源于stack exchange,提问作者Ayansplatt
相关产品推荐
相关产品推荐

