基于PushProx实现Prometheus的分布式监控

本文介绍了如何在存在网络隔离的环境中,利用PushProx工具让Prometheus收集分布在不同VPC中的ECS节点指标数据。首先,详细解释了PushProx的工作原理和适用场景,然后逐步展示了PushProx代理端和客户端的配置过程,包括编译PushProx可执行文件、设置DNS服务器、部署node_exporter、启动PushProx服务以及配置Prometheus。最后,验证了Prometheus是否能成功抓取到客户端数据,从而实现跨VPC的监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

​ 最近公司需要部署node_exporter到各ECS中收集节点级别的指标数据,并暴露给集中式的prometheus-server抓取。但由于不同项目的ECS处于不同的VPC中,存在网络隔离。因此,可使用PushProx这个项目来完成指标流量的代理。

PushProx是一个客户端工具和代理,它允许Prometheus穿越NAT和其他类似的网络拓扑,同时仍然遵循Prometheus中的pull模型。

项目地址: https://github.com/prometheus-community/PushProx

工作方式

在这里插入图片描述

它适用于以下网络环境:

  • Prometheus无法直接访问客户端ECS;
  • Prometheus可以访问客户端所在VPC中的ECS(下称为PushProx代理),可通过内网穿透或者暴露公网的方式使其可达PushProx代理;
  • 客户端ECS和PushProx代理处于同一VPC;

每个客户端由其fqdn标识,Prometheus通过PushProx抓取目标fqdn-x时,执行以下的操作过程:

  • 客户端轮询代理,以获取抓取请求,并将其fqdn包含在轮询中(1);客户端发送POST请求到代理端,此时代理未响应;
  • Prometheus尝试通过代理,抓取主机名为fqdn-x的目标(2)。Prometheus发送GET请求到代理端,代理根据fqdn-x路由到正确的客户端,此时代理未响应;
  • 抓取请求位于轮询中的,代理发送给客户端的响应报文中,以响应步骤1中的客户端POST请求(3);
  • 抓取请求由客户端执行(4);
  • 抓取到的数据包含指标的响应(5),并且发布到代理中(6);
  • 代理将其返回给Prometheus中(7),作为步骤2中Prometheus发送GET请求时的响应报文;

PushProx 透明地传递所有 HTTP 标头,压缩和接受编码等功能取决于抓取 Prometheus 服务器。

配置

编译

根据项目文档编译,需要自行部署go环境。编译完成后会生成两个可执行文件:

  • pushprox-client
  • pushprox-proxy

代理端配置

代理端和Prometheus通信

开放安全组或者防火墙,保证proxy和prometheus可相互通信。proxy默认监听8080端口,此处修改为17080端口。

代理端部署DNS服务器

由于PushProx的工作方式是基于fqdn去识别每个客户端,并且不依赖于本地的hosts文件,因此需要部署DNS服务器,并自定义fqdn的解析。

此处使用dnsmasq作为DNS服务器,并简要记载配置过程。

  1. 安装

    yum -y install dnsmasq
    
  2. 配置

    # vim /etc/dnsmasq.conf
    resolv-file=/etc/resolv.dnsmasq.conf  # 上游dns服务器,如114.114.114.114
    strict-order
    listen-address=172.16.50.253
    addn-hosts=/etc/dnsmasq.hosts # 自定义解析记录
    
    
  3. 定义解析记录

    # vim /etc/resolv.dnsmasq.conf
    nameserver 100.100.2.136
    nameserver 100.100.2.138
    
    # vim /etc/dnsmasq.hosts
    $IP $FQDN  # 此处为自定义的A记录
    
    
  4. 启动并且验证

     systemctl start dnsmasq
     systemctl enable dnsmasq
     
     vim /etc/resolv.conf # 设定DNS地址为本机地址
     nameserver 172.16.1.199
    
    dig -t A $FQDN
    

客户端部署node_exporter

过程略。

启动PushProx

./pushprox-proxy --web.listen-address=":17080"

启动Client

 ./pushprox-client --proxy-url=http://172.16.1.199:17080/

prometheus添加配置

  1. prometheus是基于fqdn解析客户端,因此添加hosts解析:

    vim /etc/hosts
    
  2. 添加prometheus.yml配置:

     - job_name: 'xx-测试环境'
       proxy_url: http://proxy:17080/
       static_configs:
        - targets: ['fqdn:9100']
    
    
  3. 重启prometheus

此时可观察PushProx-client和PushProx-proxy,如果无明显异常,并且可以在prometheus的UI界面上可看到抓取的client端数据,则说明配置成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值