You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何按指标名称对Prometheus中应用的所有指标分组?

解决方案:按指标名称分组并获取Prometheus应用指标列表

当然可以实现你的需求!针对你遇到的问题,我整理了几个实用的方法:

1. 按指标名称分组查询应用的所有指标

Prometheus中,所有指标的名称都存储在__name__这个内置标签里,你可以通过count by (__name__)来按指标名称分组,同时统计每个指标下的时间序列数量:

count by (__name__) ({app="bar"})

这个查询会返回类似这样的结果:

{__name__="bar_requests_total"}  12
{__name__="bar_memory_usage"}    4
...

既完成了分组,也能直观看到该应用下的所有指标名称。

2. 直接获取所有可用指标名称列表

如果你只需要指标名称的列表,用label_values()函数更直接:

label_values({app="bar"}, __name__)

执行后会返回一个纯指标名称的数组,比如:

["bar_requests_total", "bar_memory_usage", "bar_db_connection_count", ...]

3. 关于指标名通配符的正确用法

你之前尝试用通配符报错,大概率是语法不对。Prometheus不支持直接在指标名位置写通配符(比如*{app="bar"}),正确的方式是通过__name__标签的正则匹配来实现:

  • 匹配所有包含某前缀的指标:
    {__name__=~"bar_.+", app="bar"}
    
  • 匹配包含特定关键词的指标:
    {__name__=~".*request.*", app="bar"}
    

这里的=~表示正则匹配,.+匹配任意字符(至少一个),.*匹配任意字符(包括零个)。

4. 处理Dropwizard生成的动态指标

Dropwizard生成的动态指标虽然名称看起来不固定,但它们依然会被Prometheus打上__name__标签,所以上面的所有方法都完全适用。这类指标通常还会附带其他业务标签(比如endpointstatus等),你可以在查询时额外过滤,比如:

count by (__name__) ({app="bar", endpoint="/api/v1/users"})

内容的提问来源于stack exchange,提问作者naimdjon

火山引擎 最新活动