external_labels 是什么
external_labels 在 Prometheus 配置的 global 段声明,会附加到所有对外传输与本地查询的数据上,用来标注集群、区域或环境身份。它不需要逐条目标配置,是多集群分层部署(各机房汇聚到中心)时区分数据来源的常用手段,也方便在告警侧按集群做抑制与路由。
配置示例
配置示例
global:
external_labels:
cluster: dc1
region: east
env: prod
# 远程写、联邦与告警传输时这些标签随数据携带
# 本地查询结果中同样可见,可用于区分同名指标生效位置
| 场景 | 行为 | 注意点 |
|---|---|---|
| remote_write | 随每条序列写入远端 | 远端存储按集群区分数据 |
| federation | 抓取到下级数据时携带 | 上下级同名标签会互相覆盖 |
| 告警 | 随告警标签进入 Alertmanager | 可据此做集群维度的抑制与路由 |
| 本地查询 | 结果中可见 | 改动会改变序列身份,历史不自动合并 |
典型使用场景
- 多机房或多云部署,中心 Prometheus 统一汇聚数据
- 按集群维度抑制告警,避免同一故障重复通知
- 区分预发与生产数据来源,防止查询时相互污染
- 联邦架构里保留下级的真实来源标识
external_labels 与目标自带标签冲突时的保留规则和抓取场景不同,跨集群数据对不上时先检查这里,再怀疑查询写法。
修改或新增 external_labels 会改变序列身份,历史数据与新数据不会自动合并,图表上会出现断点,变更前要评估影响范围。
使用注意
- 标签值保持稳定,不要用会变化的实例名或版本号作为集群标识
- 数量控制在少数字段,external_labels 会附加到每条序列上,字段越多开销越大
- 变更走发布流程并在文档里记录生效时间,便于解释图表断点
- 中心端与边缘端的命名约定要统一,避免出现 dc1、DC-1 这类混写
- 变更前在测试环境验证一遍:确认告警路由、抑制规则与看板变量都不依赖旧的标签值