
Prometheus PushProx 是一个客户端-代理工具,旨在解决 Prometheus 无法直接访问位于 NAT 或其他隔离网络拓扑中目标的问题,同时保持 Prometheus 原生的拉取(pull)模型。该工具由代理(Proxy)和客户端(Client)两部分组成,通过代理中转实现 Prometheus 对隔离网络中目标的指标采集。
/clients 端点,返回符合 file_sd_configs 格式的客户端列表,支持动态发现拉取官方 Docker 镜像:
bashdocker pull prometheuscommunity/pushprox
代理需部署在 Prometheus 和客户端均能访问的网络位置,默认监听 8080 端口。
Docker 运行命令:
bashdocker run -d \ --name pushprox-proxy \ -p 8080:8080 \ --restart unless-stopped \ prometheuscommunity/pushprox proxy \ --listen-address=:8080 # 可选,默认监听 :8080
客户端部署在目标主机上,需指向代理 URL,并可指定客户端标识、轮询间隔等参数。
基本 Docker 运行命令:
bashdocker run -d \ --name pushprox-client \ --restart unless-stopped \ prometheuscommunity/pushprox client \ --proxy-url=http://proxy:8080/ \ # 代理服务地址(必填) --fqdn=client-node-01.example.com \ # 可选,客户端标识(默认使用主机名) --poll-interval=10s \ # 可选,轮询代理间隔(默认 10s) --scrape-timeout=10s # 可选,目标采集超时时间(默认 10s)
在 Prometheus 配置中通过 proxy_url 指定 PushProx 代理,并配置目标节点。
示例配置(prometheus.yml):
yamlscrape_configs: - job_name: 'node-exporter-via-pushprox' proxy_url: 'http://proxy:8080/' # 代理服务地址 static_configs: - targets: ['client-node-01.example.com:9100'] # 客户端 FQDN 和目标端口(如 node-exporter 9100) # 若目标需通过 HTTPS 访问,添加以下参数(替代原生 scheme: https) params: _scheme: [https]
PushProx 代理提供 /clients 端点,返回所有已注册客户端的列表,格式符合 Prometheus file_sd_configs 要求,支持动态服务发现。
获取客户端列表:
bashcurl http://proxy:8080/clients > /etc/prometheus/pushprox-clients.json
配置 Prometheus 动态发现:
yamlscrape_configs: - job_name: 'pushprox-dynamic-clients' proxy_url: 'http://proxy:8080/' file_sd_configs: - files: ['/etc/prometheus/pushprox-clients.json'] # 客户端列表文件 relabel_configs: # 可选:添加 relabel 规则(如过滤、重命名标签等) - source_labels: [__meta_pushprox_fqdn] target_label: instance
定期更新客户端列表:通过 cron 任务或监控工具定期执行 curl 命令,确保服务发现实时性。
proxy_url 向目标客户端(如 client-fqdn:9100)发起采集请求。无内置认证授权:PushProx 代理和客户端均未内置身份验证或授权机制,建议在代理前部署反向代理(如 Nginx、Traefik),添加 TLS、Basic Auth 或 OAuth2 等安全层。
客户端权限风险:运行客户端的主机可被通过代理访问其所有网络服务,需严格限制客户端主机的网络访问权限,避免未授权访问内部服务。
传输安全:建议通过 TLS 加密代理与客户端、Prometheus 与代理之间的通信,防止数据泄露或篡改。
| 参数 | 描述 | 默认值 |
|---|---|---|
--listen-address | 代理监听地址和端口 | :8080 |
--timeout | 客户端请求超时时间 | 1m |
| 参数 | 描述 | 默认值 |
|---|---|---|
--proxy-url | 代理服务的 URL(必填) | - |
--fqdn | 客户端标识 FQDN,默认使用主机名 | 系统主机名 |
--poll-interval | 轮询代理的间隔 | 10s |
--scrape-timeout | 客户端执行采集的超时时间 | 10s |
--max-buffer-size | 最大响应缓冲区大小(字节) | 1048576(1MB) |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务