过滤整数范围

Filtering on integer range

我们是 运行 一项 Java 服务,使用 Micrometer 将指标记录到 InfluxDB 并使用 Grafana 对其进行可视化。 Micrometer 仅支持字符串 tag/values,但我已将整数存储为字符串值 query_span 并希望在 Grafana 中对其进行过滤。

这就是我在 Grafana 中点击的内容:

SELECT sum("value") FROM "db_read"
WHERE ("short_name" = 'app' AND "environment" =~ /^$site$/
        AND "query_span" > '1' AND "query_span" <= '7')
        AND $timeFilter
GROUP BY time(5m) fill(null)

query_span 部分不产生任何数据。删除单引号也不起作用。当我将间隔的下部设置为 "query_span" >= '2' 时,我得到了一些点击。这让我相信某种字符串到字符串的比较正在进行(并且 'greater or equal' returns 的 'equal' 部分在 =="2" 时为真)。我看到 Influx 支持 casting selected fields,但我不明白如何在 WHERE 子句中进行转换(天真尝试失败)。

注意: 这不是 this 的克隆,不同的 Grafana/InfluxDB 问题。 (哦,我是否怀念那些免责声明是多余的美好时光!:)

编辑: 正则表达式过滤有效但并不理想。

当然,正则表达式可以处理字符串,但数学比较 ><<=>= 不会 - 你需要 float/int 类型。如果你在字符串上使用 <,<,那么你将得到字典顺序。参见:https://docs.influxdata.com/influxdb/v2.0/reference/flux/language/operators/#string-operators

我会说正则表达式是您用例的最佳选择(如果您的基数较低)。您需要明确定义允许的范围,例如4-9:

"query_span" =~ /^[4|5|6|7|8|9]$/

当然,带有浮点数的适当 InfluxDB 模式将是最佳选择。