入门

本指南是一个“Hello World”风格的教程,展示了如何安装、配置和使用一个简单的 Prometheus 实例。您将下载并在本地运行 Prometheus,将其配置为抓取自身和一个示例应用程序,然后使用查询、规则和图表来使用收集到的时间序列数据。

下载并运行 Prometheus

下载适用于您平台的 Prometheus 最新版本,然后解压并运行它

tar xvfz prometheus-*.tar.gz
cd prometheus-*

在启动 Prometheus 之前,我们先进行配置。

配置 Prometheus 监控自身

Prometheus 通过抓取 HTTP 指标端点从 目标 收集指标。由于 Prometheus 以相同的方式暴露自身数据,因此它也可以抓取并监控自己的健康状况。

虽然一个只收集自身数据的 Prometheus 服务器用处不大,但它是一个很好的入门示例。将以下基本 Prometheus 配置保存为名为 prometheus.yml 的文件

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

有关配置选项的完整规范,请参阅配置文档

启动 Prometheus

要使用您新创建的配置文件启动 Prometheus,请切换到包含 Prometheus 二进制文件的目录并运行

# Start Prometheus.
# By default, Prometheus stores its database in ./data (flag --storage.tsdb.path).
./prometheus --config.file=prometheus.yml

Prometheus 应该会启动。您也应该能够浏览到 localhost:9090 上关于自身的状况页面。给它几秒钟时间,从其自身的 HTTP 指标端点收集数据。

您还可以通过导航到其指标端点来验证 Prometheus 是否正在提供自身指标:localhost:9090/metrics

使用表达式浏览器

让我们探索 Prometheus 收集到的关于自身的数据。要使用 Prometheus 的内置表达式浏览器,请导航到 https://:9090/graph 并在“Graph”选项卡中选择“Table”视图。

正如您可以从 localhost:9090/metrics 中收集到的,Prometheus 导出的一个关于自身的指标名为 prometheus_target_interval_length_seconds(目标抓取之间的实际时间量)。将以下内容输入到表达式控制台,然后点击“Execute”

prometheus_target_interval_length_seconds

这应该会返回许多不同的时间序列(以及每个序列记录的最新值),每个序列都带有指标名称 prometheus_target_interval_length_seconds,但带有不同的标签。这些标签表示不同的延迟百分位和目标组间隔。

如果我们只对第 99 百分位延迟感兴趣,可以使用此查询

prometheus_target_interval_length_seconds{quantile="0.99"}

要计算返回的时间序列数量,您可以这样写

count(prometheus_target_interval_length_seconds)

有关表达式语言的更多信息,请参阅表达式语言文档

使用图形界面

要绘制表达式图,请导航到 https://:9090/graph 并使用“Graph”选项卡。

例如,输入以下表达式来绘制自抓取 Prometheus 中每秒创建的数据块速率的图表

rate(prometheus_tsdb_head_chunks_created_total[1m])

尝试调整图表范围参数和其他设置。

启动一些示例目标

让我们为 Prometheus 添加更多抓取目标。

Node Exporter 用作示例目标,有关其使用详情,请参阅这些说明。

tar -xzvf node_exporter-*.*.tar.gz
cd node_exporter-*.*

# Start 3 example targets in separate terminals:
./node_exporter --web.listen-address 127.0.0.1:8080
./node_exporter --web.listen-address 127.0.0.1:8081
./node_exporter --web.listen-address 127.0.0.1:8082

您现在应该有示例目标正在监听 https://:8080/metricshttps://:8081/metricshttps://:8082/metrics

配置 Prometheus 监控示例目标

现在我们将配置 Prometheus 来抓取这些新目标。让我们将所有三个端点分组到一个名为 node 的作业中。我们假设前两个端点是生产目标,而第三个则代表一个金丝雀实例。为了在 Prometheus 中实现这一点,我们可以向单个作业添加多个端点组,并为每个目标组添加额外的标签。在此示例中,我们将 group="production" 标签添加到第一组目标,同时将 group="canary" 添加到第二组。

为此,请将以下作业定义添加到您的 prometheus.yml 文件中的 scrape_configs 部分,然后重新启动您的 Prometheus 实例

scrape_configs:
  - job_name:       'node'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8080', 'localhost:8081']
        labels:
          group: 'production'

      - targets: ['localhost:8082']
        labels:
          group: 'canary'

前往表达式浏览器,验证 Prometheus 现在是否拥有这些示例端点暴露的时间序列信息,例如 node_cpu_seconds_total

配置规则以将抓取的数据聚合为新的时间序列

虽然在我们的示例中这不是问题,但对数千个时间序列进行聚合的查询在即时计算时可能会变慢。为了提高效率,Prometheus 可以通过配置的 记录规则 将表达式预先记录到新的持久化时间序列中。假设我们有兴趣记录每秒 CPU 时间(node_cpu_seconds_total)的速率,按实例平均所有 CPU(但保留 jobinstancemode 维度),并在 5 分钟的时间窗口内进行测量。我们可以这样写

avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))

尝试绘制此表达式的图表。

要将此表达式产生的时间序列记录到一个名为 job_instance_mode:node_cpu_seconds:avg_rate5m 的新指标中,请创建一个包含以下记录规则的文件,并将其保存为 prometheus.rules.yml

groups:
- name: cpu-node
  rules:
  - record: job_instance_mode:node_cpu_seconds:avg_rate5m
    expr: avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))

要让 Prometheus 识别此新规则,请在您的 prometheus.yml 中添加 rule_files 语句。配置现在应该如下所示

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
  evaluation_interval: 15s # Evaluate rules every 15 seconds.

  # Attach these extra labels to all timeseries collected by this Prometheus instance.
  external_labels:
    monitor: 'codelab-monitor'

rule_files:
  - 'prometheus.rules.yml'

scrape_configs:
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

  - job_name:       'node'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8080', 'localhost:8081']
        labels:
          group: 'production'

      - targets: ['localhost:8082']
        labels:
          group: 'canary'

使用新配置重新启动 Prometheus,并通过表达式浏览器或绘图来查询,验证现在是否有一个名为 job_instance_mode:node_cpu_seconds:avg_rate5m 的新时间序列可用。

重新加载配置

配置文档所述,Prometheus 实例可以通过使用 SIGHUP 信号重新加载其配置而无需重新启动进程。如果您在 Linux 上运行,可以通过使用 kill -s SIGHUP <PID> 来执行此操作,其中 <PID> 替换为您的 Prometheus 进程 ID。

优雅地关闭实例。

尽管 Prometheus 在发生突然进程失败的情况下确实有恢复机制,但建议使用信号或中断来干净地关闭 Prometheus 实例。在 Linux 上,这可以通过向 Prometheus 进程发送 SIGTERMSIGINT 信号来完成。例如,您可以使用 kill -s <SIGNAL> <PID>,其中 <SIGNAL> 替换为信号名称,<PID> 替换为 Prometheus 进程 ID。或者,您可以在控制终端按下中断字符,默认情况下是 ^C (Control-C)。

本页内容