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
:
kern.racct.enable=1
Reiniciamos para aplicar los cambios:
Comprobamos que esté habilitado:
kern.racct.enable: 1
Comprobamos que podamos consultar los datos por Jail de forma manual, primero obtenemos el JID de una de las Jail:
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:
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:
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:
Compilamos:
Instalamos el exporter y el script de arranque RC:
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:
Hash: $2b$12$WU7g/xOAvULdOfeiJWcpwOQp9kBaKirWig1vH4IofR9F29Eat/qh.
basic_auth_users:
jail_exporter_user: '$2b$12$WU7g/xOAvULdOfeiJWcpwOQp9kBaKirWig1vH4IofR9F29Eat/qh.'
Habilitamos el servicio y lo configuramos según nuestras necesidades:
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:
Podemos ver el socket abierto en el puerto 9452:
root jail_expor 56107 6 tcp4 192.168.69.2:9452 *:* LISTEN
Arrancamos el exporter mediante el script RC:
TextCollector
Si optamos por utilizar el TextCollector de node_exporter primero debemos instalarlo:
Crontabeamos la ejecución de jail_exporter:
*/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:
...
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:
Para poder visualizar las métricas debemos importar la
dashboard de Grafana: