Esta pagina se ve mejor con JavaScript habilitado

PMM2 Scrapear exporter mediante proxy Socks

 ·  🎃 kr0m

Prometheus permite scrapear exporters mediante un proxy Socks, esto puede resultar útil en diferentes escenarios, por ejemplo cuando se trata de un entorno muy restringido en el que no se permite el acceso directo desde el servidor PMM, otro caso podría ser cuando no nos interesa que que el servidor final conozca la ip de nuestro servidor PMM por alguna razón, el servidor Socks estaría enmascarando la ip de nuestro servidor PMM.

Existen multitud de proxys socks pero en esta ocasión utilizaremos Srelay ya que es muy fácil de instalar y no precisa de configuración alguna.

Compilamos e instalamos Srelay:

git clone https://git.code.sf.net/p/socks-relay/srelay socks-relay-srelay
cd socks-relay-srelay
./configure
make
cp srelay /usr/local/bin/

Lo arrancamos:

srelay

Comprobamos que esté funcionando y que esté a la escucha:

ps aux|grep srelay

nobody   20373  0.0  0.0 527204  1756 ?        Ssl  11:32   0:00 srelay  
netstat -nputa|grep LISTEN|grep srelay
tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN      12653/srelay          
tcp6       0      0 :::1080                 :::*                    LISTEN      12653/srelay        

Configuramos reglas de firewall para no dejar el servidor Socks abierto:

iptables -I INPUT 1 -p tcp --dport 1080 -j DROP
iptables -I INPUT 1 -s PMM_SERVER_IP -p tcp --dport 1080 -j ACCEPT

Guardamos las reglas y le indicamos que las cargue en el arranque:

/etc/init.d/iptables save
rc-update add iptables default

Demonizamos el proceso:

vi /etc/local.d/srelay.start

/usr/local/bin/srelay

Asignamos los permisos necesarios:

chmod 700 /etc/local.d/srelay.start

La configuración de Prometheus para monitorizar un php-fpm a través de un proxy Socks quedaría así.

vi prometheusConf/prometheus.base.yml

scrape_configs:
- job_name: fpm-status
  scrape_interval: 1m
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - SERVER:8080
  basic_auth:
    username: admin
    password: PASSWORD
  proxy_url: socks5://SRELAY_SERVER_IP:1080

Ahora los scrapes de PMM pasarán a través de nuestro servidor Socks para acceder a las métricas del exporter, podemos comprobar en el servidor php-fpm como las peticiones provienen del servidor Socks:

tcpdump -ni eth0 port 8080

06:48:17.337735 IP SRELAY_SERVER_IP.56866 > SERVER.8080: Flags [P.], seq 4290895866:4290896151, ack 2322227802, win 501, options [nop,nop,TS val 1415235347 ecr 4174654489], length 285: HTTP: GET /metrics HTTP/1.1  
06:48:17.337772 IP SERVER.8080 > SRELAY_SERVER_IP.56866: Flags [.], ack 285, win 505, options [nop,nop,TS val 4174714400 ecr 1415235347], length 0  
06:48:17.341789 IP SERVER.8080 > SRELAY_SERVER_IP.56866: Flags [P.], seq 1:696, ack 285, win 505, options [nop,nop,TS val 4174714404 ecr 1415235347], length 695: HTTP: HTTP/1.1 200 OK  
06:48:17.341870 IP SRELAY_SERVER_IP.56866 > SERVER.8080: Flags [.], ack 696, win 501, options [nop,nop,TS val 1415235351 ecr 4174714404], length 0

Una manera de acceder a las métricas manualmente mediante el proxy socks es utilizando Curl:

curl –user admin:PASSWORD http://SERVER:8080/metrics -x socks5h://SRELAY_SERVER_IP:1080

Si te ha gustado el artículo puedes invitarme a un RedBull aquí