Prometheus 标签(Label)有哪些限制?

Prometheus 标签的限制包括:标签名需匹配 [a-zA-Z_][a-zA-Z0-9_]*、值可为任意 UTF-8、双下划线前缀保留、组合基数决定性能上限。本文列出全部硬性限制与避免高基数事故的实践。

最佳实践
Prometheus 标签(Label)有哪些限制?封面

硬性限制只有两条:标签名必须匹配 [a-zA-Z_][a-zA-Z0-9_]*,双下划线前缀(__)保留给内部使用;真正的"软限制"是基数——标签组合总数决定 Prometheus 的内存与查询性能。

硬性规则

  1. 标签名:字母/下划线开头,只含字母、数字、下划线;中文、点号、横线都不行(点号要写成下划线);
  2. 保留前缀__ 开头的标签(如 __address__)是抓取期内部标签,最终会被丢弃;
  3. 指标名规则同标签名;
  4. 标签值:任意 UTF-8 字符串,无长度硬限——但值越长存储越大。

真正的瓶颈:基数

每条"指标名 + 全部标签组合"是一个独立时序。标签取值越多,序列数爆炸式增长:

100 实例 × 50 接口 × 10 状态码 = 50 万条序列(一个指标!)

经验红线:单实例活跃序列(prometheus_tsdb_head_series)控制在数百万级以内;单指标的标签组合最好控制在千级。

实践建议

  • 标签只放"会用来分组/过滤"的维度;
  • 用户 ID、请求 ID、时间戳、完整 URL 路径——永远不做标签(放日志或链路里);
  • 不确定时先上线观察序列增速,再放量。

观测云对照

观测云同样以标签组织指标数据,但底层存储对高基数的容忍度远高于 Prometheus 本地 TSDB;即便意外打爆了某个标签维度,也不会拖垮整个查询层。

常见问题(FAQ)

Q:标签名大小写敏感吗? 敏感。Methodmethod 是两个标签。

Q:标签数量有上限吗? 没有硬性上限,但每个标签都增加索引开销,实践上单序列 10 个以内。

Q:如何发现高基数指标?count by (__name__)({__name__=~".+"}) | sort_desc 取前几名审查。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台