03.3Prometheus配置基础

分类: Prometheus安装与配置

Prometheus 配置基础

本节将学习:Prometheus 配置文件的结构、scrape_configs 的配置、以及目标发现机制。这些是配置 Prometheus 的基础知识。

配置文件结构

配置文件在哪里? 配置文件的位置取决于你的安装方式:

  • Windows:C:\prometheus\prometheus.yml
  • macOS:/usr/local/etc/prometheus.yml
  • Linux:/etc/prometheus/prometheus.yml

配置文件的基本结构是什么样的?

这是一个基本的配置文件示例:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: []

rule_files: []

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

配置文件有几个主要部分:

第一个是 global。 全局配置。例如,scrape_interval 是抓取间隔,evaluation_interval 是评估间隔。

第二个是 alerting。 告警配置。这里配置告警管理器的地址,我们将在后续章节详细讲解。

第三个是 rule_files。 规则文件配置。这里配置告警规则和记录规则的文件路径,我们将在后续章节详细讲解。

第四个是 scrape_configs。 抓取任务配置。这是最重要的部分,我们等一下会详细讲解。

这就是配置文件的基本结构。我们等一下会详细讲解每个部分。

global 全局配置

global 配置是什么? global 配置是全局配置。它会影响所有抓取任务,除非在具体的抓取任务中覆盖。

global 配置有哪些配置项呢?

第一个是 scrape_interval。 Prometheus 抓取指标的间隔时间,默认值是 15s。可以设置为 10s、30s、1m 等等。单位可以是秒(s)、分钟(m)、小时(h)。

第二个是 scrape_timeout。 每次抓取的超时时间,默认值是 10s。建议设置为小于 scrape_interval。例如,如果 scrape_interval 是 15s,scrape_timeout 可以设置为 10s。

第三个是 evaluation_interval。 评估告警规则和记录规则的间隔,默认值是 15s。这个我们将在后续章节讲解告警规则的时候详细讲解。

第四个是 external_labels。 添加到所有时间序列的外部标签。例如,可以添加 cluster、environment 这些标签,用来区分不同的集群、环境。

举个例子:

global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
  external_labels:
    cluster: 'production'
    environment: 'prod'

这个配置设置了全局的抓取间隔、超时时间、评估间隔和外部标签。

这就是 global 全局配置。它会影响所有抓取任务。

scrape_configs 抓取任务配置

scrape_configs 是什么? scrape_configs 是最重要的配置部分,用于配置 Prometheus 需要抓取哪些目标的指标。

基本配置示例是什么样的? 这是一个基本的配置示例:

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 15s
    static_configs:
      - targets: ['localhost:9090']
    labels:
      instance: 'prometheus-server'
  - job_name: 'node-exporter'
    scrape_interval: 10s
    static_configs:
      - targets: ['localhost:9100']

配置项说明:

第一个是 job_name。 任务名称,用于标识抓取任务。例如,'prometheus'、'node-exporter'。这个名称会作为 label 添加到所有指标中。

第二个是 scrape_interval。 抓取间隔,可选,如果不设置,会继承 global 配置。可以为每个任务设置不同的抓取间隔。

第三个是 static_configs。 静态配置,手动指定目标。这是最简单的方式,我们等一下会讲其他的方式。

第四个是 targets。 目标列表,格式为 host:port。例如,['localhost:9090']、['localhost:9100']。

第五个是 labels。 标签,添加到该任务的所有指标中。例如,instance、environment 这些标签。

这个配置的作用是什么? 这个配置告诉 Prometheus:

  • 抓取 'prometheus' 任务,目标是 localhost:9090,每 15 秒抓取一次
  • 抓取 'node-exporter' 任务,目标是 localhost:9100,每 10 秒抓取一次

这就是 scrape_configs 的基本配置。我们等一下会讲更多的配置选项。

目标发现机制

Prometheus 支持哪些目标发现方式呢?

第一种是静态配置(static_configs)。 手动指定目标列表,适用于固定目标、少量目标。这是最简单的方式,我们刚才已经看过了。

第二种是服务发现(service discovery)。 自动发现目标,适用于动态环境、大量目标。例如,在 Kubernetes 环境中,服务可能会动态创建和销毁,这时候使用服务发现就非常方便。

Prometheus 支持哪些服务发现方式呢?

  • Kubernetes:kubernetes_sd_configs。用于 Kubernetes 环境。
  • Consul:consul_sd_configs。用于 Consul 环境。
  • Docker:docker_sd_configs。用于 Docker 环境。
  • 文件:file_sd_configs。从文件读取目标列表。

静态配置示例: 手动指定多个目标。

scrape_configs:
  - job_name: 'static-targets'
    static_configs:
      - targets:
          - 'target1:9090'
          - 'target2:9090'
          - 'target3:9090'
    labels:
      environment: 'production'

服务发现示例(Kubernetes): 自动发现 Kubernetes Pod。

scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true

这个配置会自动发现 Kubernetes Pod,并且只抓取有

prometheus.io/scrape=true
注解的 Pod。

这就是目标发现机制。静态配置简单,服务发现灵活。选择适合你的方式。

配置文件验证

验证配置文件有什么方法呢?

第一种方法:使用 promtool 验证。 Prometheus 提供了一个工具叫 promtool,可以用来验证配置文件。

  • 在 Linux/macOS 上:
    promtool check config prometheus.yml
  • 在 Windows 上:
    promtool.exe check config prometheus.yml

如果配置正确,它会显示:

SUCCESS: prometheus.yml is valid prometheus config file syntax

如果配置错误,它会显示错误信息,例如:

FAILED: parsing YAML file prometheus.yml: yaml: line 10: found unexpected end of stream

第二种方法:启动时验证。 Prometheus 启动时会自动验证配置文件。如果配置错误,启动会失败,并且显示错误信息。

第三种方法:测试重载配置。 如果想在不重启 Prometheus 的情况下重载配置,可以:

  • 在 Linux/macOS 上:发送 SIGHUP 信号,
    kill -HUP $(pgrep prometheus)
  • 或使用 API(所有平台):
    curl -X POST http://localhost:9090/-/reload

这就是验证配置文件的方法。修改配置后,记得验证一下,确保配置正确。

本节小结

在本节中,我们学习了 Prometheus 配置基础:

第一个是配置文件结构。 global、alerting、rule_files、scrape_configs。每个部分都有不同的作用。

第二个是 scrape_configs。 最重要的配置部分,配置抓取任务。这里配置 Prometheus 需要抓取哪些目标的指标。

第三个是目标发现。 静态配置和服务发现。静态配置简单,服务发现灵活,选择适合你的方式。

第四个是配置文件验证。 使用 promtool 验证,确保配置正确。

配置文件结构总结:prometheus.yml 包含 global、alerting、rule_files、scrape_configs 这几个部分。scrape_configs 是最重要的,可以配置静态配置或服务发现。

这就是 Prometheus 配置基础。理解这些基础知识,是掌握 Prometheus 的关键。

在下一节,我们将学习 Node Exporter:系统指标收集。学习如何安装和配置 Node Exporter,收集系统资源使用情况。