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:
cd socks-relay-srelay
./configure
make
cp srelay /usr/local/bin/
Lo arrancamos:
Comprobamos que esté funcionando y que esté a la escucha:
nobody 20373 0.0 0.0 527204 1756 ? Ssl 11:32 0:00 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 -s PMM_SERVER_IP -p tcp --dport 1080 -j ACCEPT
Guardamos las reglas y le indicamos que las cargue en el arranque:
rc-update add iptables default
Demonizamos el proceso:
/usr/local/bin/srelay
Asignamos los permisos necesarios:
La configuración de Prometheus para monitorizar un php-fpm a través de un proxy Socks quedaría así.
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:
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: