Node Exporter 设置

DockerBeginner
立即练习

介绍

本次实验将你的监控范围扩展到外部服务。你将设置 Node Exporter,这是一个用于硬件和操作系统指标的 Prometheus exporter。本次设置将沿用上一个实验中运行的 Prometheus 容器。你将运行一个 Node Exporter 容器,并将其添加为 prometheus.yml 中的一个新目标。完成本次实验后,你将能够在 Prometheus UI 中查询主机级别的系统指标。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 95%。获得了学习者 100% 的好评率。

拉取 Node Exporter Docker 镜像

在此步骤中,你将下载 Node Exporter 的官方 Docker 镜像。Node Exporter 是一个 Prometheus exporter,它暴露了来自宿主机的各种硬件和内核相关的指标。

要开始,请从 Docker Hub 拉取 prom/node-exporter 镜像。打开终端并运行以下命令:

docker pull prom/node-exporter

此命令会联系 Docker Hub 注册中心,并将 Node Exporter 镜像的最新版本下载到你的本地机器。你将看到显示镜像每个层下载进度的输出。

预期输出:

Using default tag: latest
latest: Pulling from prom/node-exporter
Digest: sha256:a5579e72377a6053359058893b80f4f47c55d761457d685343b8e797859a159b
Status: Image is up to date for prom/node-exporter
docker.io/prom/node-exporter

在端口 9100 上运行 Node Exporter 容器

现在你已经有了镜像,让我们将 Node Exporter 作为一个容器运行。我们将把它的指标暴露在端口 9100 上,这是 Node Exporter 的默认端口。

执行以下命令来启动容器,并将其放置在与 Prometheus 相同的 Docker 网络中:

docker run -d -p 9100:9100 --name node-exporter --network monitoring prom/node-exporter

让我们分解一下这个命令:

  • -d: 以分离模式(detached mode)运行容器,意味着它在后台运行。
  • -p 9100:9100: 将主机的端口 9100 映射到容器的端口 9100
  • --name node-exporter: 为容器分配一个易于记忆的名称,方便引用。
  • prom/node-exporter: 用于创建容器的镜像。

你可以使用 docker ps 命令来验证容器是否正在运行:

docker ps

你应该在运行的容器列表中看到 node-exporter。你也可以选择性地确认网络连接:

docker inspect node-exporter --format '{{.HostConfig.NetworkMode}}'

输出应该是 monitoring

预期输出:

CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                       NAMES
...            prom/node-exporter     "/bin/node_exporter"     A few seconds ago   Up a few seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter
...            prom/prometheus        "/bin/prometheus --c…"   About a minute ago   Up about a minute   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus

更新 prometheus.yml 以添加 Node Exporter 目标

在此步骤中,你将配置 Prometheus 以从新运行的 Node Exporter 容器抓取指标。这通过编辑 prometheus.yml 配置文件来添加一个新的抓取作业(scrape job)来完成。

首先,使用 nano 编辑器打开位于你的项目目录中的 prometheus.yml 文件:

nano ~/project/prometheus.yml

现在,在 scrape_configs 部分下为 Node Exporter 添加一个新的作业配置。你的最终文件应该看起来像这样。请确保缩进正确,因为 YAML 对此很敏感。

global:
  scrape_interval: 15s

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

  - job_name: "node_exporter"
    static_configs:
      - targets: ["node-exporter:9100"]

新的配置块的作用如下:

  • job_name: 'node_exporter': 为此抓取作业命名,该名称将用于标记收集到的指标。
  • targets: ['node-exporter:9100']: 告诉 Prometheus 在哪里找到 Node Exporter。我们使用容器名称,因为 Docker 在同一网络中的容器之间提供了内部 DNS 解析。localhost 主机名仅限于每个容器内部,因此不能用于访问其他容器。

编辑完成后,按 Ctrl+X,然后按 Y,最后按 Enter 来保存文件并退出 nano

使用更新后的配置重启 Prometheus 容器

为了让 Prometheus 加载新配置,你需要重启它的容器。我们之前配置的卷挂载(volume mount)确保了容器在重启后能够读取更新的 prometheus.yml 文件。

运行以下命令来重启 Prometheus 容器:

docker restart prometheus

此命令会优雅地停止然后启动名为 prometheus 的容器。几秒钟后,Prometheus 将会以新配置运行。

现在,让我们在 Prometheus UI 中验证这个更改。

  1. 在 LabEx 界面中,点击 + (New Tab) 按钮,选择 Web Service,然后为端口输入 9090
  2. 当新标签页打开时,你应该会看到 Prometheus Expression Browser 的登陆页面。
  3. 点击顶部导航栏中的 "Status" 菜单,然后选择 "Targets"。
Prometheus targets page showing UP status

你现在应该看到两个目标被列出:prometheusnode_exporter。两者都应该处于 "UP" 状态,这表明 Prometheus 正在成功地从自身和 Node Exporter 抓取指标。

在 UI 中查询 node_cpu_seconds_total 指标

最后一步是通过运行查询来确认 Prometheus 是否成功地从 Node Exporter 摄取了指标。

通过点击导航栏中的 "Graph" 链接,导航回 Prometheus UI 中的主 "Graph" 页面。在 "Expression" 输入字段中,输入以下指标名称:

node_cpu_seconds_total

此指标代表 CPU 在各种模式(例如,空闲、用户、系统)下花费的总时间(以秒为单位)。

Prometheus UI showing node_cpu_seconds_total query results

点击 "Execute" 按钮。如果连接成功,你将在图表下方看到一个结果表。每个结果对应一个不同的 CPU 核心和模式。看到这些结果,就确认了你的整个监控管道都正常工作,从 Node Exporter 的数据收集到 Prometheus 的摄取和存储。

你可以在 "Table" 和 "Graph" 视图之间切换以可视化数据。

总结

恭喜你!你已成功地通过添加一个外部服务来扩展你的监控设置。在这个实验中,你学会了如何在 Docker 容器中运行官方的 Prometheus Node Exporter,配置 Prometheus 实例以抓取来自这个新目标的指标,并通过查询主机级别的指标来验证数据收集。这是构建全面可观测性堆栈(observability stack)的一项基本技能,它能让你深入了解系统的性能和健康状况。