Prometheus 配置

DockerBeginner
立即练习

介绍

Prometheus 是一个强大的开源监控和告警工具集。它的行为由一个配置文件控制,通常命名为 prometheus.yml。这个文件定义了从抓取指标的频率、要抓取的 targets,到如何处理告警规则的所有内容。

本实验是“Prometheus 安装”实验的延续,在该实验中,你学习了如何使用 Docker 安装和运行 Prometheus。既然你已经知道如何启动和运行 Prometheus,本实验将教你 Prometheus 配置的基础知识。你将首先检查一个使用默认配置运行的 Prometheus 容器。然后,你将创建自己的自定义 prometheus.yml 文件,使用该文件启动一个新容器,并学习如何在不重启服务的情况下重新加载配置。

检查 Prometheus 容器是否正在运行

在此步骤中,我们将验证由设置脚本启动的初始 Prometheus 容器是否正在运行。此容器使用默认的内置配置。

让我们列出所有正在运行的 Docker 容器,以查看我们的 prometheus-default 容器。

docker ps

你应该会看到类似以下的输出,表明一个名为 prometheus-default 的容器已启动并正在运行。PORTS 列显示主机上的端口 9090 已映射到容器内的端口 9090

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a1b2c3d4e5f6   prom/prometheus     "/bin/prometheus --c…"   15 seconds ago   Up 14 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus-default

这证实了我们的初始 Prometheus 实例是活动的。在下一步中,你将访问 Prometheus Web UI,查看默认配置的运行情况。

访问 localhost:9090 上的 Prometheus Web UI

在此步骤中,你将访问 Prometheus Web 界面,它现在正在运行并暴露在端口 9090 上。LabEx 环境提供了一种便捷的方式来访问虚拟机内部运行的 Web 服务。

点击实验室界面顶部的 + (新标签页) 按钮。

选择 Web Service 选项,然后输入 9090 作为端口。

这将打开一个连接到你的实验环境中运行的服务的新浏览器标签页。

由于我们映射了端口 9090,Prometheus UI 将可用。你应该会看到 Prometheus Expression Browser,这是主登录页面。此界面允许你编写和执行 PromQL 查询来探索指标。

Prometheus Expression Browser landing page

此页面的出现证实了你的 Prometheus 容器正在正确运行且可访问。

创建包含基本抓取配置的 prometheus.yml 文件

在此步骤中,你将创建一个名为 prometheus.yml 的自定义 Prometheus 配置文件。此文件将指示 Prometheus 需要监控什么。

既然你已经访问了 Prometheus Web UI 并确认其正常工作,现在让我们创建一个自定义配置文件,你可以根据自己的需求来配置 Prometheus。

我们将使用 nano 文本编辑器在 ~/project 目录中创建该文件。

nano prometheus.yml

现在,将以下 YAML 配置复制并粘贴到 nano 编辑器中。此配置告诉 Prometheus 每 5 秒抓取一次自身的指标。

global:
  scrape_interval: 5s

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

让我们来解析一下这个配置:

  • global: 此部分定义了对所有其他配置部分都有效的参数。
  • scrape_interval: 这将默认抓取间隔设置为 5 秒。
  • scrape_configs: 此部分定义了抓取的目标集和参数。
  • job_name: 这是分配给作业的名称,它将作为标签附加到从此目标抓取的任何时间序列上。
  • static_configs: 这指定了一个要监控的目标列表。
  • targets: 这列出了要抓取的端点。在这种情况下,它是 Prometheus 服务器本身。

粘贴内容后,按 Ctrl+X,然后按 Y,最后按 Enter 来保存文件并退出 nano

运行挂载配置的 Prometheus 容器

既然我们有了自定义的 prometheus.yml 文件,我们需要运行一个使用它的新 Prometheus 容器。首先,让我们停止并移除旧容器。

docker stop prometheus-default
docker rm prometheus-default

接下来,我们将启动一个名为 prometheus-custom 的新容器。我们将使用 -v 标志将本地的 prometheus.yml 文件挂载到容器内的预期位置 /etc/prometheus/prometheus.yml。我们还添加了 --web.enable-lifecycle 标志来启用热重载 API,这将在下一步中使用。

docker run -d \
  --name prometheus-custom \
  -p 9090:9090 \
  -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --web.enable-lifecycle

让我们回顾一下新的标志:

  • -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml: 这是卷挂载。它将你的主机机器 ~/project 目录中的 prometheus.yml 文件映射到容器内的 /etc/prometheus/prometheus.yml 路径。Prometheus 将在启动时读取此文件。
  • --web.enable-lifecycle: 这个命令行标志启用了用于重新加载配置的 HTTP API,可以通过 /-/reload 端点访问。

你可以验证新容器是否正在运行:

docker ps

你应该会在列表中看到 prometheus-custom 容器。

通过 API 重载 Prometheus 配置

Prometheus 的一个强大功能是能够在不完全重启的情况下重载其配置,这可以防止指标收集出现任何中断。这是因为我们使用 --web.enable-lifecycle 标志启用了生命周期 API。

首先,让我们修改配置文件。我们将 scrape_interval5s 更改为 15s

使用 nano 打开文件:

nano prometheus.yml

scrape_interval 行更改为 15s

global:
  scrape_interval: 15s ## Changed from 5s

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

保存文件并退出 nano (Ctrl+X, Y, Enter)。

现在,我们不重启容器,而是使用 curl/-/reload 端点发送一个 POST 请求。这会告诉正在运行的 Prometheus 实例从挂载的文件中重载其配置。

curl -X POST http://localhost:9090/-/reload

如果重载成功,你将不会看到任何输出。这种静默成功意味着 Prometheus 已应用了新配置。

在 Targets 页面检查抓取指标

在最后一步,我们将通过检查 Prometheus Web UI 来验证我们的自定义配置是否生效。

LabEx 环境提供了一个“Web Terminal”选项卡或类似的机制来访问虚拟机内部运行的 Web 服务。在实验界面提供的浏览器中导航到 http://localhost:9090 来打开 Prometheus UI。

UI 加载后,点击顶部导航栏中的 Status 菜单,然后选择 Targets

在 Targets 页面,你将看到 prometheus.yml 文件中定义的抓取目标。你应该会在 prometheus 作业下看到一个目标。

  • Endpoint: http://localhost:9090/metrics
  • State: 状态应该是 UP,背景为绿色。
  • Last Scrape / Scrape Duration: 这些列显示了上次抓取发生的时间以及花费的时间。你可以观察到,抓取之间的间隔现在大约是 15 秒,这反映了我们在上一步重载的更改。
Prometheus Targets Page

这证实了 Prometheus 已成功加载了我们的自定义配置文件,正在抓取指定的目标,并应用了配置重载。

总结

恭喜你!你已成功完成了关于 Prometheus 配置的本次实验。

在本次实验中,你学习了如何:

  • 创建自定义的 prometheus.yml 配置文件。
  • 使用 Docker volume mounts (-v) 为 Prometheus 容器提供自定义配置。
  • 启用 Prometheus 生命周期 API 以实现热重载。
  • 使用简单的 curl 命令即时重载 Prometheus 配置。
  • 通过检查 Prometheus Web UI 中的 Targets 页面来验证活动配置。

这些是在任何环境中管理和操作 Prometheus 的基本技能。