regex 如何在Grafana中使用变量来排除在检索数据时的标签名称列表?

cyej8jka  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(322)

我正在寻找一种通过在Grafana中使用变量来从查询中排除一些标签名称的方法。
当前查询:

rate(http_request_duration_seconds_sum{container="$container", namespace="$namespace"}[5m]) / rate(http_request_duration_seconds_count{container="$container", namespace="$namespace"}[5m])

我们可以通过以下方式将其添加到当前查询中来完成此操作:

rate(http_request_duration_seconds_sum{container="$container", namespace="$namespace",exported_endpoint=~"/management/health.*"}[5m]) / rate(http_request_duration_seconds_count{container="$container", namespace="$namespace",exported_endpoint=~"/management/health.*"}[5m])

上面的查询排除了所有以'/management/health'开头的“exported_endpoint”标签。
该查询有两个关键问题:

  • 它是硬编码,而不是使用变量。
  • 我们不能使用排除名称列表,将来我们可能要排除更多端点。

你有什么建议?

sczxawaw

sczxawaw1#

在正则表达式匹配器中使用变量是没有限制的。基本上在向普罗米修斯发送请求之前,Grafana会替换它。
所以你可以用

metric{label1="$label1", label2=~"$label2_filter"}
metric{label1="$label1", label2!~"$label2_filter_exclude"}

关于多个标签的删除:如果你使用'!~'来排除标签,你总是可以使用类似filter1_.*|filter2_.*或者甚至${filter1}|${filter2}的东西,其中filter1filter2是grafana中的变量。

相关问题