请参与 Prometheus 用户调研(2026 年 3 月版) ,帮助社区确定未来开发工作的优先级!

使用基于文件的服务发现来发现抓取目标

Prometheus 提供了多种服务发现选项 来发现抓取目标,包括 KubernetesConsul 等。如果你需要使用目前尚未支持的服务发现系统,那么 Prometheus 的基于文件的服务发现机制可能是最适合你的,它允许你在 JSON 文件中列出抓取目标(以及关于这些目标的元数据)。

在本指南中,我们将:

  • 在本地安装并运行一个 Prometheus Node Exporter
  • 创建一个 targets.json 文件,指定 Node Exporter 的主机和端口信息
  • 安装并运行一个 Prometheus 实例,该实例配置为使用 targets.json 文件来发现 Node Exporter

安装并运行 Node Exporter

请参阅本指南的这一部分使用 Node Exporter 监控 Linux 主机指标。Node Exporter 运行在 9100 端口。要确保 Node Exporter 正在公开指标:

curl https://:9100/metrics

指标输出应如下所示:

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
...

安装、配置并运行 Prometheus

与 Node Exporter 一样,Prometheus 是一个可以通过 tarball 安装的单一静态二进制文件。下载适用于你平台的最新版本并解压。

wget https://github.com/prometheus/prometheus/releases/download/v*/prometheus-*.*-amd64.tar.gz
tar xvf prometheus-*.*-amd64.tar.gz
cd prometheus-*.*

解压后的目录包含一个 prometheus.yml 配置文件。将该文件的当前内容替换为以下内容:

scrape_configs:
- job_name: 'node'
  file_sd_configs:
  - files:
    - 'targets.json'

此配置指定有一个名为 node 的作业(用于 Node Exporter),它从 targets.json 文件中检索 Node Exporter 实例的主机和端口信息。

现在创建该 targets.json 文件,并向其中添加以下内容:

[
  {
    "labels": {
      "job": "node"
    },
    "targets": [
      "localhost:9100"
    ]
  }
]
注意为了简洁起见,在本指南中我们将手动处理 JSON 服务发现配置。但在一般情况下,我们建议你使用某种自动生成 JSON 的过程或工具。

此配置指定有一个 node 作业,其中包含一个目标:localhost:9100

现在你可以启动 Prometheus 了:

./prometheus

如果 Prometheus 已成功启动,你应该会在日志中看到类似这样的一行:

level=info ts=2018-08-13T20:39:24.905651509Z caller=main.go:500 msg="Server is ready to receive web requests."

探索被发现服务的指标

Prometheus 运行起来后,你可以使用 Prometheus 表达式浏览器来探索 node 服务公开的指标。例如,如果你探索 up{job="node"} 指标,你可以看到 Node Exporter 正在被正确地发现。

动态更改目标列表

当使用 Prometheus 基于文件的服务发现机制时,Prometheus 实例将监听文件的变化并自动更新抓取目标列表,无需重启实例。为了演示这一点,在 9200 端口启动第二个 Node Exporter 实例。首先,导航到包含 Node Exporter 二进制文件的目录,并在新的终端窗口中运行此命令:

./node_exporter --web.listen-address=":9200"

现在通过为新的 Node Exporter 添加一个条目来修改 targets.json 中的配置:

[
  {
    "targets": [
      "localhost:9100"
    ],
    "labels": {
      "job": "node"
    }
  },
  {
    "targets": [
      "localhost:9200"
    ],
    "labels": {
      "job": "node"
    }
  }
]

当你保存更改时,Prometheus 将自动收到新的目标列表通知。up{job="node"} 指标应显示两个实例,其 instance 标签分别为 localhost:9100localhost:9200

总结

在本指南中,你安装并运行了 Prometheus Node Exporter,并配置了 Prometheus 使用基于文件的服务发现来发现并从 Node Exporter 抓取指标。

本页内容