Prometheus 教程

Prometheus 配置

Prometheus 通过命令行标志和配置文件进行配置。命令行标志配置不可更改的系统参数(如存储位置、磁盘和内存中的数据量等),而配置文件则定义与抓取任务及其实例相关的所有内容,以及要加载的规则文件。

要查看所有可用的命令行标志,请运行 ./prometheus -h 命令:

D:\prometheus-2.45.4.windows-amd64> prometheus.exe -h
usage: prometheus.exe [<flags>]

The Prometheus monitoring server


Flags:
  -h, --[no-]help                Show context-sensitive help (also try
                                 --help-long and --help-man).
      --[no-]version             Show application version.
      --config.file="prometheus.yml"
                                 Prometheus configuration file path.
      --web.listen-address="0.0.0.0:9090"
                                 Address to listen on for UI, API, and
                                 telemetry.
      --web.config.file=""       [EXPERIMENTAL] Path to configuration file that
.... more ....

Prometheus 可以在运行时重新加载配置。如果新配置格式不完善或存在语法问题,则不会应用新配置内容。向 Prometheus 进程发送 SIGHUP 或向 /-/reload 端点发送 HTTP POST 请求(启用 --web.enable-lifecycle 标记时),都会触发配置重载。这也会重新加载任何已配置的规则文件。

配置文件

Prometheus 启动时要指定加载哪个配置文件,请使用 --config.file 标志。例如:

./prometheus --config.file=prometheus.yml

Prometheus 的配置文件以 YAML 格式编写,由下面描述的方案定义。方括号表示参数是可选的。对于非列表参数,该值设置为指定的默认值。

通用占位符定义如下:

  • <boolean>:布尔值,取值为 true 或 false

  • <duration>:与正则表达式 ((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0) 匹配的持续时间,例如 1d、1h30m、5m、10s

  • <filename>:当前工作目录中的有效路径

  • <float>:浮点数

  • <host>:有效字符串,由主机名或 IP 和可选端口号组成

  • <int>:整数值

  • <labelname>:与正则表达式 [a-zA-Z_][a-zA-Z0-9_]* 匹配的字符串。源标签中任何其他不支持的字符都应转换为下划线。例如,标签 app.kubernetes.io/name 应写成 app_kubernetes_io_name。

  • <labelvalue>:由 unicode 字符组成的字符串

  • <path>:有效的 URL 路径

  • <scheme>:可以使用 http 或 https 值的字符串

  • <secret>:正则表达式字符串,是一个秘密,如密码

  • <string>:正则字符串

  • <size>:以字节为单位的大小,如 512MB。需要一个单位。支持的单位有 B、KB、MB、GB、TB、PB、EB。

  • <tmpl_string>:使用前经过模板扩展的字符串

其他占位符可单独指定,点击查看一个有效的示例配置文件

global 配置指定的参数在所有其他配置上下文中都有效,它们也是其他配置部分的默认值。下面是 global 配置的定义:

global:
  # 默认情况下抓取目标的频率
  [ scrape_interval: <duration> | default = 1m ]

  # 抓取请求超时时间
  [ scrape_timeout: <duration> | default = 10s ]

  # 抓取时与客户端协商的协议。支持的值(区分大小写): 
  # PrometheusProto、OpenMetricsText0.0.1、OpenMetricsText1.0.0、PrometheusText0.0.4。
  # 当设置了 native_histogram 功能标志时,默认值将变为 
  # [ PrometheusProto、OpenMetricsText1.0.0、OpenMetricsText0.0.1、PrometheusText0.0.4 ]。
  [ scrape_protocols: [<string>, ...] | default = [ OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText0.0.4 ] ]

  # 评估规则的频率
  [ evaluation_interval: <duration> | default = 1m ]

  # 与外部系统(联盟、远程存储、Alertmanager)通信时,可为任何时间序列或警报添加标签
  external_labels:
    [ <labelname>: <labelvalue> ... ]

  # 记录 PromQL 查询的文件,重新加载配置将重新打开该文件。
  [ query_log_file: <string> ]

  # 未压缩的响应体如果大于此字节数,将导致扫描失败,0 表示无限制。例如:100MB。
  # 这是一项试验性功能,将来可能会更改或删除此行为。
  [ body_size_limit: <size> | default = 0 ]

  # 每次抓取接受的抓取样本数量限制。
  # 如果指标重新标记后的样本数超过此数,整个扫描将被视为失败,0 表示没有限制。
  [ sample_limit: <int> | default = 0 ]

  # 每次抓取样本可接受的标签数量限制。如果指标重贴标签后出现的标签数超过此数,
  # 则整个扫描将被视为失败,0 表示没有限制。
  [ label_limit: <int> | default = 0 ]

  # 每次扫描对样本标签名称长度的限制。
  # 如果指标重贴标签后的标签名称长度超过此值,则整个扫描将被视为失败。
  # 0 表示没有限制。
  [ label_name_length_limit: <int> | default = 0 ]

  # 每次抓取样本可接受的标签值长度限制。
  # 如果指标重标记后的标签值长度超过此值,则整个扫描将被视为失败。0 表示没有限制。
  [ label_value_length_limit: <int> | default = 0 ]

  # 每次抓取配置限制将接受的唯一目标的数量。
  # 如果在重新标记目标后出现的目标数量超过这个数量,Prometheus 将把目标标记为失败,而不会清除它们。
  # 0表示没有限制。这是一个实验性的功能,这种行为在未来可能会改变。
  [ target_limit: <int> | default = 0 ]

  # 每个 scrape 配置对内存中保留的因重新标记而丢弃的目标数量的限制。0 表示无限制。
  [ keep_dropped_targets: <int> | default = 0 ]

# 规则文件指定一个 globs 列表。规则和报警将从所有匹配文件中读取。
rule_files:
  [ - <filepath_glob> ... ]

# Scrape 配置文件指定了一个 globs 列表。
# 会从所有匹配文件中读取 Scrape 配置,并追加到 Scrape 配置列表中。
scrape_config_files:
  [ - <filepath_glob> ... ]

# scrape 配置列表。
scrape_configs:
  [ - <scrape_config> ... ]

# 指定告警与Alertmanager相关的设置
alerting:
  alert_relabel_configs:
    [ - <relabel_config> ... ]
  alertmanagers:
    [ - <alertmanager_config> ... ]

# 与远程写入功能相关的设置
remote_write:
  [ - <remote_write> ... ]

# 与远程读取功能相关的设置。
remote_read:
  [ - <remote_read> ... ]

# 可在运行时重载的存储相关设置。
storage:
  [ tsdb: <tsdb> ]
  [ exemplars: <exemplars> ]

# 配置输出轨迹
tracing:
  [ <tracing_config> ]

点击查看 Prometheus 完整配置

Prometheus 常用配置

下面列举了 Prometheus 的一些常用配置:

global 全局配置

用于设置 Prometheus 的基本参数,例如工作目录、日志级别等。常用参数:

  • log_level:日志级别,可选值为 debug、info、warn、error。

  • metrics_path:Prometheus 服务器上用于访问指标的路径。

  • scrape_interval:抓取间隔时间,单位为秒。

  • scrape_timeout:抓取超时时间,单位为秒。

scrape_configs 数据采集配置

用于定义如何从目标中抓取数据。每个数据采集配置包含一个 job 名称、目标地址、抓取间隔、超时时间等参数。常用参数:

  • job_name:作业名称,用于标识数据采集任务。

  • targets:目标地址列表,用于指定抓取数据的地址。

  • metrics_path:目标上用于访问指标的路径。

  • params:请求参数列表,用于向目标发送参数。

  • scrape_interval:抓取间隔时间,单位为秒。

  • scrape_timeout:抓取超时时间,单位为秒。

rules 规则配置

用于定义基于时间序列数据的报警或记录规则。常用参数:

  • rule_files:规则文件列表,用于指定规则文件的路径。

  • alert_relabel_configs:报警标签重写配置列表,用于在报警时修改标签。

  • alertmanager_config:告警管理器配置列表,用于指定告警管理器地址等参数。

  • duration:规则匹配的持续时间。

点击查看 Prometheus 完整配置

prometheus.yml 配置文件

Prometheus 的配置是 YAML 文件格式。

注意,Prometheus 安装包中默认附带了一个名为 prometheus.yml 的配置示例文件,是入门的好帮手。内容如下:

# 我的全局配置
global:
  # 设置全局的抓取间隔为15秒,默认为1分钟
  scrape_interval: 15s
  # 设置规则评估的间隔为15秒,默认为1分钟
  evaluation_interval: 15s
  # scrape_timeout 用来设置全局的抓取超时时间,默认为10秒

# Alertmanager 配置
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# 加载规则一次,并根据全局 "evaluation_interval" 配置定期评估规则
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 抓取配置,其中包含一个要抓取的端点:
# 在这里,它就是 Prometheus 本身
scrape_configs:
  # 定义了一个名为 "prometheus" 的 job,它将在 Prometheus 服务发现中可用。
  # 作业名称作为标签 'job=<job_name>' 添加到从该配置中抓取的任何时间序列中。
  - job_name: "prometheus"

    # 指定了要抓取的目标,这里是 Prometheus 服务器自身,也可以指定 Exporter
    # metrics_path 默认为"/metrics",scheme 默认为 "http"
    static_configs:
      - targets: ["localhost:9090"]

我们去掉了示例文件中的大部分注释,使其更加简洁(注释是以 # 为前缀的行):

global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

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

示例配置文件中有三个配置块:global、rule_files 和 scrape_configs。

global 配置块控制 Prometheus 服务器的全局配置。我们有两个选项。第一个选项是 scrape_interval,用于控制 Prometheus 扫描目标的频率。您可以针对单个目标覆盖该选项。在本例中,全局设置为每 15 秒扫描一次。evaluation_interval 选项控制 Prometheus 评估规则的频率,Prometheus 使用规则创建新的时间序列并生成警报。

rule_files 配置块指定了我们希望 Prometheus 服务器加载的任何规则的位置,目前我们还没有配置任何规则。

最后一个配置块 scrape_configs,用于控制 Prometheus 监控哪些资源。由于 Prometheus 也会以 HTTP 端点的形式公开自身的数据,因此它可以采集和监控自身的健康状况。在默认配置中,有一个名为 prometheus 的作业,用于抓取 Prometheus 服务器公开的时间序列数据。该任务在 static_configs 配置的 targets 中只包含一个主机为 localhost 端口为 9090 的端点,即 Prometheus 自身。Prometheus 希望在 /metrics 路径下提供目标资源的指标数据。因此,该默认任务是通过如下 URL:

http://localhost:9090/metrics

获取默认目标(Prometheus)指标数据,这些返回的时间序列数据将详细说明 Prometheus 服务器的状态和性能。

配置加载过程

Prometheus 的配置加载过程如下:

(1)Prometheus 启动时加载配置文件,并根据配置文件中的参数初始化内部结构。

(2)Prometheus 启动后按照配置文件中的 scrape_configs 参数定时抓取目标数据,并将抓取到的数据存储在本地存储中。

(3)Prometheus 启动后按照配置文件中的 rules 参数匹配时间序列数据,并根据匹配结果触发报警或记录规则。

(4)Prometheus 提供 Web API,用户可以通过该 API 查看当前运行状态、查询时间序列数据、获取报警信息等。

(5)Prometheus 支持动态加载配置文件,可以在运行时重新加载配置文件而不停止服务。重新加载配置文件后,Prometheus 会根据新配置文件中的参数更新内部结构并调整数据采集或规则匹配等行为。


在编写 Prometheus 配置文件时,需要注意以下几点:

  • YAML 格式要求严格,行尾需要加上空格才能正确解析。

  • 参数值中不能包含特殊字符或空格,否则会导致解析错误。

  • scrape_configs 中可以配置多个 target,每个 target 指定一个目标地址和端口号。Prometheus 会依次向这些 target 发送请求并抓取数据。

  • rules 中可以配置多个 rule file 或 inline rules,每个规则文件中可以定义多个规则,每个规则包含匹配条件和操作。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号