> 文章列表 > 【grafana】使用多级变量解决Granfana模板变量中的大小限制

【grafana】使用多级变量解决Granfana模板变量中的大小限制

【grafana】使用多级变量解决Granfana模板变量中的大小限制

前言

最近对公司的Kafka 集群集成了 exporter + prometheus + granfana 服务,我们将 topic 变量抽象成模板变量,此时发现 granfana 变量有 10k 的个数限制。导致我们显示 topic 名称不全。

效果如下:全选后只有 10k 个变量。
【grafana】使用多级变量解决Granfana模板变量中的大小限制

解决

一番百度后,发现 granfana 没有修改这个限制的计划,并且开发者认为 超过数千个选定值的模板变量可能会导致服务崩溃。

推荐方案

并且开发者推荐了,通过将多个模板变量连接在一起来解决此类问题。

类似于:【grafana】使用多级变量解决Granfana模板变量中的大小限制

具体实现

那我们也只能使用上面的方案,类似于前面加一个前缀过滤变量。通过前缀来过滤下级的 topic 名称。

  1. 新建一个 custom 类型的变量
    【grafana】使用多级变量解决Granfana模板变量中的大小限制

  2. 传入自定义参数内容

  3. 效果如下
    【grafana】使用多级变量解决Granfana模板变量中的大小限制

  4. 新建"下级"变量

新建一个名称叫 topicquery 类型的变量
【grafana】使用多级变量解决Granfana模板变量中的大小限制
5. query 查询语句
【grafana】使用多级变量解决Granfana模板变量中的大小限制

我这里的query 语句

label_values(kafka_log_log_size{topic=~"$prefix.*"}, topic)

这里的query 语句,大家可以参考grafana + Prometheus 的文档
https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels
https://yunlzheng.gitbook.io/prometheus-book/part-ii-prometheus-jin-jie/grafana/templating

  1. 最终实现:
    【grafana】使用多级变量解决Granfana模板变量中的大小限制

【grafana】使用多级变量解决Granfana模板变量中的大小限制

扩展

grafana里prometheus查询语法

名称 描述
label_values(label) 返回Promthues所有监控指标中,标签名为label的所有可选值
label_values(metric, label) 返回Promthues所有监控指标metric中,标签名为label的所有可选值
metrics(metric) 返回所有指标名称满足metric定义正则表达式的指标名称
query_result(query) 返回prometheus查询语句的查询结果

Prometheus匹配模式

匹配模式

  • 完全匹配
  • 正则匹配

完全匹配

语法:

key = "value"key != "value"

查询状态码为200的:

http_server_requests_seconds_count{application="hubble-biz-aiops", uri="/actuator/metrics",status="200"}

查询状态码为非200的:

http_server_requests_seconds_count{application="hubble-biz-aiops", uri="/actuator/metrics",status!="200"}

正则匹配

正则匹配分为正向匹配和反向匹配:

  • 正向匹配:使用 label=~regx 表示选择那些标签符合正则表达式定义的时间序列。
  • 反向匹配:使用 label!~regx 进行排除。

案例:
我想查询指标 kafka_log_log_size中,所有 topic 标签以 “a” 开头的记录,那么我的表达式为:
kafka_log_log_size{topic=~"a.*"}

参考

  • https://community.grafana.com/t/size-limit-in-templating-variables/8920
  • https://github.com/grafana/grafana/issues/12664