Esta pagina se ve mejor con JavaScript habilitado

Monitorización de recursos por Jail en FreeBSD mediante Prometheus

 ·  🎃 kr0m

En este manual veremos como monitorizar los recursos consumidos por Jail en FreeBSD mediante Prometheus, si no hemos realizado la instalación base de Prometheus primero seguiremos la guía básica de instalación de Prometheus y Grafana.

Para poder hacer el seguimiento de los recursos consumidos por Jail debemos habilitar el soporte para RACCT :

vi /boot/loader.conf

kern.racct.enable=1

Reiniciamos para aplicar los cambios:

shutdown -r now

Comprobamos que esté habilitado:

sysctl kern.racct.enable

kern.racct.enable: 1

Comprobamos que podamos consultar los datos por Jail de forma manual, primero obtenemos el JID de una de las Jail:

jls -N

 JID             IP Address      Hostname                      Path
 ioc-DrWho       192.168.69.6    DrWho.alfaexploit.com         /zroot/iocage/jails/DrWho/root
 ioc-HAProxy     192.168.69.11   HAProxy.alfaexploit.com       /zroot/iocage/jails/HAProxy/root
 ioc-Infinity    192.168.69.12   Infinity.alfaexploit.com      /zroot/iocage/jails/Infinity/root
 ioc-Potras      192.168.69.5    Potras.alfaexploit.com        /zroot/iocage/jails/Potras/root
 ioc-Prometheus  192.168.69.13   Prometheus.alfaexploit.com    /zroot/iocage/jails/Prometheus/root
 ioc-rxWod       192.168.69.10   rxWod.alfaexploit.com         /zroot/iocage/jails/rxWod/root
 ioc-test_postfix 192.168.69.69   test_postfix.alfaexploit.com  /zroot/iocage/jails/test_postfix/root

Consultamos los recursos consumidos por la Jail ioc-Infinity:

rctl -hu jail:ioc-Infinity

cputime=38K
datasize=1224K
stacksize=101M
coredumpsize=0
memoryuse=59M
memorylocked=0
maxproc=10
openfiles=1912
vmemoryuse=361M
pseudoterminals=0
swapuse=0
nthr=12
msgqqueued=0
msgqsize=0
nmsgq=0
nsem=0
nsemop=0
nshm=0
shmsize=0
wallclock=463K
pcpu=0
readbps=0
writebps=98
readiops=0
writeiops=1

En los repositorios de FreeBSD tenemos el exporter jail_exporter ya compilado:

jail_exporter-0.13.0_8         Prometheus exporter for FreeBSD jail metrics

Pero a fecha de 12/10/2021 no funciona bien, cuando se ejecuta el exporter muestra el error:

jail_exporter

Error: RctlUnavailable("Support not present in kernel; see rctl(8) for details")

Vamos a compilar la última versión(v0.15.1) desde las fuentes, instalamos el compilador de Rust:

pkg install rust

Compilamos:

cargo install jail_exporter

Instalamos el exporter y el script de arranque RC:

mv ~/.cargo/bin/jail_exporter /usr/local/sbin/
chown root:wheel /usr/local/sbin/jail_exporter
jail_exporter –rc-script | tee /usr/local/etc/rc.d/jail_exporter
chmod 755 /usr/local/etc/rc.d/jail_exporter

El exporter puede correr de dos formas distintas:

  • Como servicio RC
  • Utilizando el TextCollector de node_exporter

Servicio RC

Para habilitar la autenticación del exporter debemos generar un fichero htpass, para ello utilizaremos el propio exporter:

jail_exporter bcrypt PASSWORD

Hash: $2b$12$WU7g/xOAvULdOfeiJWcpwOQp9kBaKirWig1vH4IofR9F29Eat/qh.
mkdir /usr/local/jail_exporter
vi /usr/local/jail_exporter/auth.yml
basic_auth_users:
    jail_exporter_user: '$2b$12$WU7g/xOAvULdOfeiJWcpwOQp9kBaKirWig1vH4IofR9F29Eat/qh.'

Habilitamos el servicio y lo configuramos según nuestras necesidades:

sysrc jail_exporter_enable=YES
sysrc jail_exporter_listen_address=192.168.69.2:9452
sysrc jail_exporter_args=–web.auth-config=/usr/local/jail_exporter/auth.yml

Arrancamos manualmente el exporter para asegurarnos de que no dá ningún problema:

jail_exporter –web.listen-address 192.168.69.2:9452 –web.auth-config /usr/local/jail_exporter/auth.yml

Podemos ver el socket abierto en el puerto 9452:

sockstat -46 -l -s|grep 9452

root     jail_expor 56107 6  tcp4   192.168.69.2:9452    *:*                                LISTEN

Arrancamos el exporter mediante el script RC:

service jail_exporter start


TextCollector

Si optamos por utilizar el TextCollector de node_exporter primero debemos instalarlo:

pkg install moreutils node_exporter

Crontabeamos la ejecución de jail_exporter:

crontab -e

*/1 *  *  *  *  root    jail_exporter --output.file-path /var/tmp/node_exporter/jail_exporter.prom

node_exporter expone por defecto todas las métricas de los ficheros del directorio: /var/tmp/node_exporter/*.prom, de este modo conseguiremos el mismo resultado que com el servicio pero hemos tenido que instalar un software adicional.


Si hemos optado por RC debemos añadir un scrape a la configuración de Prometheus, si hemos utilizado el TextCollector podemos omitir esta parte:

vi /usr/local/etc/prometheus.yml

...
scrape_configs:
...
  - job_name: 'prometheus_jail_exporter'
    scrape_interval: 30s
    static_configs:
      - targets: ['mightymax:9452']
    basic_auth:
      username: jail_exporter_user
      password: PASSWORD
...

Reiniciamos el servicio:

service prometheus restart


Para poder visualizar las métricas debemos importar la dashboard de Grafana:

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