Prometheus 的 job 标签是什么?
job 标签初始默认取 scrape_config 的 job_name,可被重标记或标签冲突处理改变,标识一组同类抓取目标(如所有 node exporter),与 instance 标签一起构成 Prometheus 最基本的两个维度。本文讲清 job 的作用、命名规范与常见用法。
job 标签初始默认取 scrape_config 里的 job_name,但可被重标记或冲突处理改变——它把同一类抓取目标归为一组(比如 job="node" 代表全部服务器节点),是 Prometheus 查询中最常用的分组维度。
job 与 instance 的分工
scrape_configs:
- job_name: 'node' # → job="node"
static_configs:
- targets: ['10.0.0.1:9100', '10.0.0.2:9100'] # → instance="10.0.0.1:9100" ...
job:这是什么类型的采集(节点、MySQL、应用 API);instance:具体是哪一个目标。
典型查询:up{job="node"} 看所有节点存活、sum by (job) (rate(http_requests_total{job="api"}[5m])) 比较已有该计数器的API请求速率;up只表示抓取成功,不是完整应用健康。
命名规范建议
- 小写、下划线分词:
mysql_prod、api_gateway; - 一类组件一个 job,别一个 job 混杂不同端口/用途的目标;
- 环境差异用额外标签(
env="prod")而非塞进 job 名——但实践上mysql-prod这种命名也很常见,团队统一即可。
注意
- job 标签可以被 relabel 改写;
- 目标自身指标若带 job 标签,默认 honor_labels=false 时目标原值改名为 exported_job,再使用采集侧 job;honor_labels=true 则保留目标样本标签,冲突的采集侧标签不附加。
常见问题(FAQ)
Q:job 能省掉吗? scrape_config 的 job_name 必填,但最终样本的 job 标签可被重标记或删除,两者不是同一个要求。
Q:一个 job 能抓不同端口吗? 可以,targets 里各自写端口;但语义混杂时建议拆 job。