我有一个收集器,它从日志文件中收集三个字段,并按以下格式将其保存到InfluxDB:
FeildA FeildB FeildC
------- -------- --------
A 00 123
乙02 100
A 00 13
A 00 123
我想在Grafana
中绘制图表,以便计算“A”和“B”(FeildA)的出现次数
IMP :FeildA可以有多个值,前面不知道。因此,使用“where”子句编写查询不是一种选择。
答案 0 :(得分:1)
如果FeildA
仅在测量模式中定义为field
,您可以在“where”子句中使用regexp,这些查询可能对您有用:
```
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
成为“标记”而不是“字段”。然后你可以在查询中使用“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中的“标记”和“字段”,但是当名称不同以避免冲突并简化查询中的语法时,它会更好。