【grafana】使用多级变量解决Granfana模板变量中的大小限制
前言
最近对公司的Kafka 集群集成了 exporter + prometheus + granfana
服务,我们将 topic
变量抽象成模板变量,此时发现 granfana
变量有 10k 的个数限制。导致我们显示 topic
名称不全。
效果如下:全选后只有 10k 个变量。
解决
一番百度后,发现 granfana
没有修改这个限制的计划,并且开发者认为 超过数千个选定值的模板变量可能会导致服务崩溃。
推荐方案
并且开发者推荐了,通过将多个模板变量连接在一起来解决此类问题。
类似于:
具体实现
那我们也只能使用上面的方案,类似于前面加一个前缀过滤变量。通过前缀来过滤下级的 topic 名称。
-
新建一个
custom
类型的变量
-
传入自定义参数内容
-
效果如下
-
新建"下级"变量
新建一个名称叫 topic
的query
类型的变量
5. query 查询语句
我这里的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
- 最终实现:
扩展
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