InfluxDB2 / Grafana:我们如何使用 Flux 过滤标签值列表

Fab*_*ien 2 influxdb grafana influxdb-2 flux-influxdb

InfluxDB2 Flux 语言提供了一种使用schema.measurementTagValues函数获取特定存储桶/测量组合的所有标签值的便捷方法。问题是文档没有提到如何过滤此列表以仅保留符合特定条件的标签值。

示例:
通过以下查询,我可以获得所有交易标签值:

import "influxdata/influxdb/schema"

schema.measurementTagValues(
    bucket: "jmeter",
    measurement: "jmeter",
    tag: "transaction",
)
Run Code Online (Sandbox Code Playgroud)

该架构包含另一个名为“application”的标签。我想获取特定应用程序的所有交易,而不是全部。
我们如何通过助焊剂来实现这一目标?
InfluxQL 中的相同请求将非常简单:
SHOW TAG VALUES FROM "jmeter" WITH KEY = "transaction" WHERE "application" = $application

目标是创建像这样的 Grafana 动态下拉列表: 在此输入图像描述

oid*_*amo 7

如果您使用schema.tagValues()而不是schema.measurementTagValues()可以定义一个谓词函数来过滤结果。在你的例子中:

import "influxdata/influxdb/schema"

schema.tagValues(
    bucket: "jmeter",
    tag: "transaction",
    predicate: (r) => r._measurement == "jmeter" and r.application == ${application:doublequote},
    start: -3000d
)
Run Code Online (Sandbox Code Playgroud)

如您所见,您需要为此函数定义一个时间范围。如果合适的话,您可以在此处使用 grafana 仪表板的时间范围变量(v.timeRangeStartv.timeRangeStop)。