一、Pushprox 方案简介
Pushprox 是由 Prometheus 社区维护的一个反向代理工具,解决如下问题:
- 设备(如云主机、IoT 设备等)没有公网 IP,Prometheus 服务器无法直接拉取其 metrics。
- 但这些设备可以主动访问 Prometheus 服务器。
工作原理
- Pushprox Proxy:部署在 Prometheus 服务器侧,Prometheus 配置为抓取 Proxy。
- Pushprox Client:部署在每台被监控设备上,与本地 exporter(如 node-exporter)配合运行,主动连接 Proxy 并建立长连接,等待 Prometheus 的抓取请求。
- 拉模式变通:Prometheus 通过 Proxy 间接拉取设备上的 exporter 指标,设备无需公网 IP。
二、部署步骤
1. 下载 Pushprox
GitHub 地址:https://github.com/prometheus-community/PushProx
可以直接下载二进制或用 Docker 部署。
2. 在 Prometheus 服务器上部署 Proxy
docker run -d --name pushprox-proxy -p 8080:8080 prom/pushprox-proxy
- 8080 是 Proxy 的监听端口。
3. 在每台被监控设备上部署 Client
假设 node-exporter 已经在本地 9100 端口运行。
下载 pushprox-client 二进制(或用 Docker):
docker run -d --name pushprox-client \ --network=host \ prom/pushprox-client \ --proxy-url="http://<prometheus服务器IP>:8080" \ --listen-address=":9100" \ --targets="localhost:9100"
参数说明:
--proxy-url
:指向 Proxy 的地址(Prometheus 服务器 IP 和端口)。--targets
:本地 node-exporter 的地址。
4. Prometheus 配置抓取 Proxy
在 prometheus.yml
增加 job:
scrape_configs: - job_name: 'pushprox' proxy_url: "http://pushprox-proxy:8080/proxy" static_configs: - targets: ['<client-identifier>']
<client-identifier>
是每个 client 连接 Proxy 时注册的名字,通常可自定义。
5. 访问流程
- Prometheus 访问 Proxy。
- Proxy 通过与 Client 的长连接,将请求转发到设备上的 node-exporter。
- Client 获取本地 metrics,返回给 Proxy,再返回给 Prometheus。
三、优缺点
- 优点:无需公网 IP,支持大规模设备,安全性高。
- 缺点:部署稍复杂,需维护 Proxy 和 Client 的连接。