使用基于文件的服务发现来发现抓取目标
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 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"
现在修改 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 抓取指标。