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",但最好是名称不同以避免冲突并简化查询中的语法。
我有一个收集器,它从日志文件中收集三个字段,并以以下格式将其保存到 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",但最好是名称不同以避免冲突并简化查询中的语法。