Prometheus 标签(Label)是什么?
标签是 Prometheus 数据模型的核心:指标名 + 一组键值对标签唯一确定一条时间序列。本文讲清标签的作用、与指标名的关系、基数概念与使用规范。
标签(Label)是附加在指标上的键值对维度,例如 http_requests_total{method="GET", status="200"}——同一个指标名靠不同标签组合区分出多条时间序列,查询时按标签过滤与分组。
标签的作用
没有标签的监控系统需要为每个维度造一个指标名(requests_get_200、requests_post_500……),聚合通常更不方便。有了标签:
- 一个指标名承载所有维度:
http_requests_total即可; - 灵活切片:
sum by (method)按方法看、{status="500"}只看错误; - 动态发现:配置相应服务发现和抓取规则后,新目标可自动进入抓取;
instance标签本身不会发现目标,静态目标仍需更新配置。
关键概念:序列与基数
每条指标名 + 完整标签集 = 一条独立时序。标签取值越多,序列(基数)越多——这是 Prometheus 性能的核心变量,用户 ID 这类无限取值的字段绝不能做标签。
两类标签
| 类型 | 来源 | 例子 |
|---|---|---|
| 目标标签 | 抓取配置/服务发现附加 | job、instance、datacenter |
| 指标标签 | 应用埋点时定义 | method、status、endpoint |
常见问题(FAQ)
Q:标签和注解(Annotation)有什么区别? 指标标签参与时序标识与 PromQL 查询;告警注解用于说明和通知,不是指标标签,不能按它做普通时序标签查询,但可以通过告警相关 API 或界面读取。
Q:标签值能改吗? 序列的标签是身份,不可变——"改标签"实际是产生一条新序列。