【问题标题】:InfluxDB Query to fetch count of distinct values for GrafanaInfluxDB 查询以获取 Grafana 的不同值的计数
【发布时间】:2018-04-11 14:30:01
【问题描述】:
我有一个收集器,它从日志文件中收集三个字段并以下列格式保存到 influxDB:
FeildA FeildB FeildC
------- -------- --------
A 00 123
B 02 00 00 13
A 00 123
我想在Grafana 中绘制图表,以便获得“A”和“B”(FeildA)的出现计数
IMP:FeildA 可以有多个值,未知预先。因此,不能选择使用“where”子句编写查询。
【问题讨论】:
标签:
monitoring
influxdb
grafana
【解决方案1】:
如果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 成为“标签”而不是“字段”。然后您可以在查询中使用“按标签分组”。例如查询:
```
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 中既可以是“标签”也可以是“字段”,但名称不同时更好,以避免冲突并简化查询中的语法。