CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Prometheus/使用基于文件的服务发现来发现抓取目标
文档目录
Prometheus 入门Prometheus 入门使用基于文件的服务发现来发现抓取目标使用 Node Exporter 监控 Linux 主机指标理解指标类型对用 Go 编写的 HTTP 服务器进行插桩使用 Grafana 可视化指标基于指标的告警

Prometheus

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

Prometheus 提供了多种[服务发现选项](https://github.com/prometheus/prometheus/tree/main/discovery)来发现抓取目标,包括 [Kubernetes](/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config)、[Consul](/docs/

Prometheus 提供了多种服务发现选项来发现抓取目标,包括 Kubernetes、Consul 等。如果你需要使用目前尚不支持的服务发现系统,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 http://localhost: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 的 job(用于 Node Exporter),它从 targets.json 文件中获取 Node Exporter 实例的主机和端口信息。

现在创建 targets.json 文件并添加以下内容:

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

NOTE: 在本指南中,为了简洁起见,我们将手动处理 JSON 服务发现配置。但通常,我们建议你使用某种 JSON 生成过程或工具。

此配置指定了一个 node job,目标为: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"

现在修改 targets.json 中的配置,添加新 Node Exporter 的条目:

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

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

总结

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

文章大纲