InfluxDB 查询以获取 Grafana 的不同值的计数

InfluxDB Query to fetch count of distinct values for Grafana

我有一个收集器,它从日志文件中收集三个字段,并以以下格式将其保存到 influxDB 中:

FeildA FeildB FeildC
------ -------- --------
a 00 123
b 02 100
a 00 13
a 00 123

我想在 Grafana 中绘制图形,这样我就可以计算 "A" 和 "B" (FeildA)
的出现次数 IMP: FeildA 可以有多个值,事先不知道。因此,使用 "where" 子句编写查询不是一种选择。

如果 FeildA 在测量模式中仅定义为 field,您可以在 "where" 子句中使用正则表达式,这些查询可能对您有用:

```

SELECT COUNT(FeildA) FROM "logdata" WHERE $timeFilter and FeildA::field =~ /^A$/
SELECT COUNT(FeildA) FROM "logdata" WHERE $timeFilter and FeildA::field =~ /^A$/
SELECT COUNT(FeildA) FROM "logdata" WHERE $timeFilter and FeildA =~ /^(A|B)$/

```

如果 FeildA(基数)的预期不同值的数量是合理的,那么真正的解决方案是使 FeildA 成为 "Tag" 而不是 "Field"。然后你可以在查询中使用 "group by tag" 。例如查询:

```

SELECT COUNT(FeildA) FROM "logdata" WHERE $timeFilter AND "FeildA" =~ /^(A|B|C|D)$/ GROUP BY time(1m), FeildA fill(null)

```

将给出 "A"、"B"、"C"、"D" 的出现次数。但这需要更改收集器。 FeildA 在 influxdb 中既可以是 "tag" 也可以是 "field",但最好是名称不同以避免冲突并简化查询中的语法。