You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana柱状图中筛选Prometheus的Top10字符串指标

解决方案

1. 用PromQL直接返回Top10数据

这是最直接的处理方式,借助Prometheus的topk()函数,让查询只返回出现次数最高的前10个字符串对应的指标。

假设你的CounterVec指标名为string_occurrence_count,区分不同字符串的标签是target_string,在Grafana的查询面板里输入:

topk(10, string_occurrence_count)

这个查询会自动筛选出当前数值最高的前10条时间序列,Grafana的柱状图就只会展示这10个字符串的统计数据,直接解决图表拥挤问题。

2. 配置Grafana动态筛选变量(灵活切换展示内容)

如果需要更灵活的控制——比如让用户手动切换显示Top N,或者指定查看某些特定字符串——可以通过Grafana的变量功能实现:

方式一:动态切换TopN数量

  • 进入Grafana面板的「变量」配置页面,新建一个变量:
    • 类型选「自定义」
    • 变量名设为top_n
    • 选项输入10,20,30(可按需添加更多数值)
  • 回到面板查询,把PromQL修改为:
    topk($top_n, string_occurrence_count)
    
    这样用户就能通过面板顶部的下拉框,自由切换显示前10、20或更多的字符串。

方式二:手动选择特定字符串

  • 新建一个变量:
    • 类型选「查询」
    • 数据源选择你的Prometheus实例
    • 查询语句填label_values(string_occurrence_count, target_string)(自动拉取所有存在的字符串标签值)
    • 勾选「允许多选」和「包含全部选项」
  • 面板查询修改为:
    string_occurrence_count{target_string=~"$selected_strings"}
    
    用户可以通过下拉框选择要查看的字符串,默认可选「全部」,也能只挑几个重点的看;如果想默认显示Top10,可以结合topk()和变量:
    topk(10, string_occurrence_count{target_string=~"$selected_strings"})
    

额外提示

如果800个标签维度导致Prometheus存储压力过大,也可以在Go代码层面做预处理——比如定期统计Top10的字符串,只把这些的指标导出到CounterVec,从源头减少指标数量。不过这需要额外的定时任务逻辑,适合长期数据量很大的场景。

内容的提问来源于stack exchange,提问作者Julio Martínez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:00:56