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í