3、采集作业概念:什么是采集作业(scrape job)、静态配置与动态发现、作业的生命周期

3.1 什么是采集作业(Scrape Job)

采集作业(Scrape Job)是 Prometheus 获取监控指标数据的核心执行单元。它定义了一组具有相同采集策略的目标端点集合,以及如何从这些端点拉取(Pull)数据的规则。每个采集作业在 Prometheus 配置文件中通过 scrape_configs 字段定义,是连接 Prometheus 服务器与监控目标的桥梁。

核心要点: 一个 Scrape Job = 一组目标 + 一套采集参数(间隔、超时、标签、认证等)。
配置项 说明 示例值
job_name 作业名称,唯一标识 node_exporter
scrape_interval 采集频率 15s
scrape_timeout 单次采集超时 10s
metrics_path 指标路径 /metrics
scheme 协议 http / https
static_configs 静态目标列表 targets: ['localhost:9100']
# 一个完整的采集作业配置示例
scrape_configs:
  - job_name: 'node_exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: '/metrics'
    scheme: 'http'
    static_configs:
      - targets:
        - '192.168.1.10:9100'
        - '192.168.1.11:9100'
        labels:
          env: 'production'
          region: 'us-east-1'

3.2 静态配置与动态发现

Prometheus 支持两种目标管理方式:静态配置和动态发现。静态配置适用于基础设施稳定、目标数量固定的场景;动态发现则适用于云原生、容器化等目标频繁变动的环境。

选型建议: 生产环境中,建议将静态配置用于核心基础设施(如 Prometheus 自身、关键数据库),动态发现用于弹性伸缩的工作负载(如 Kubernetes Pods、ECS 实例)。

3.2.1 静态配置(Static Config)

在配置文件中直接列出所有目标地址和标签。配置简单直观,但每次目标变更都需要重启 Prometheus 或触发配置重载。

3.2.2 动态发现(Service Discovery)

Prometheus 通过集成各种服务发现机制,自动获取目标列表并实时更新。支持的发现方式包括:

  • Kubernetes SD:自动发现 Pod、Service、Node、Endpoint 等资源。
  • Consul SD:通过 Consul 注册中心发现服务。
  • EC2 SD:自动发现 AWS EC2 实例。
  • File SD:监听本地文件变化,动态加载目标列表。
  • DNS SD:通过 DNS SRV 记录发现目标。
# 基于文件发现的动态配置示例
scrape_configs:
  - job_name: 'file_sd_demo'
    file_sd_configs:
      - files:
        - 'targets/*.json'
        refresh_interval: 5m
注意: 动态发现虽然灵活,但会增加 Prometheus 的 CPU 和内存开销。对于大规模集群(数千个目标),需要合理配置 relabel_configs 来过滤和缩减目标数量。
静态配置 vs 动态发现对比 静态配置 prometheus.yml targets: [IP1, IP2, IP3] labels: env=prod 优点:简单、稳定、可预测 缺点:变更需重载、不适合弹性环境 动态发现 Kubernetes API Consul / EC2 / DNS 自动生成目标列表 实时更新 + 标签注入 优点:自动伸缩、零停机变更 缺点:复杂度高、资源开销大

3.3 采集作业的生命周期

一个采集作业从定义到停止,经历完整的生命周期阶段。理解每个阶段有助于排查采集问题、优化性能。

阶段 触发条件 关键行为 常见问题
1. 定义 配置文件加载 / 重载 解析 scrape_configs,校验语法 YAML 格式错误、job_name 重复
2. 初始化 作业首次生效 创建采集器、初始化目标列表、应用 relabel 服务发现超时、认证失败
3. 采集循环 每个 scrape_interval HTTP GET 请求 → 解析响应 → 存储样本 超时、目标不可达、指标格式错误
4. 目标更新 动态发现变更 / 文件更新 增删目标、更新标签、重新计算 hash 目标抖动、标签冲突
5. 停止/移除 配置删除 / Prometheus 关闭 清理采集器、释放内存、停止 goroutine 残留指标、内存泄漏(罕见)
采集作业生命周期流程图 1. 定义 解析配置 2. 初始化 创建采集器 3. 采集循环 HTTP GET → 存储 4. 目标更新 动态增删目标 持续循环 5. 停止 / 移除 清理资源 关键监控指标:scrape_duration_seconds、scrape_samples_scraped、up(目标健康状态) 通过 Prometheus 自身指标可追踪每个作业的生命周期状态

3.4 作业生命周期中的关键指标

Prometheus 为每个采集作业自动生成以下内置指标,用于监控作业自身的运行状态:

  • up{job="<job_name>"}:目标是否可达(1=正常,0=失败)。
  • scrape_duration_seconds:单次采集耗时。
  • scrape_samples_scraped:本次采集到的样本数。
  • scrape_samples_post_metric_relabeling:经过 relabel 后的样本数。
  • scrape_series_added:新增的时间序列数量。
运维最佳实践: 在 Prometheus 告警规则中,对 up == 0 设置告警,并监控 scrape_duration_seconds 是否接近 scrape_timeout,以提前发现采集瓶颈。