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
 Atlas           192.168.69.19   Atlas                         /usr/local/bastille/jails/Atlas/root
 BaudBeauty      192.168.69.16   BaudBeauty                    /usr/local/bastille/jails/BaudBeauty/root
 HellStorm       192.168.69.17   HellStorm                     /usr/local/bastille/jails/HellStorm/root
 MetaCortex      192.168.69.20   MetaCortex                    /usr/local/bastille/jails/MetaCortex/root
 Paradox         192.168.69.18   Paradox                       /usr/local/bastille/jails/Paradox/root
 RECLog          192.168.69.21   RECLog                        /usr/local/bastille/jails/RECLog/root

Consultamos los recursos consumidos por la Jail ioc-Infinity:

rctl -hu jail:Atlas

cputime=1
datasize=740K
stacksize=0
coredumpsize=0
memoryuse=48M
memorylocked=0
maxproc=6
openfiles=1104
vmemoryuse=131M
pseudoterminals=0
swapuse=13M
nthr=7
msgqqueued=0
msgqsize=0
nmsgq=0
nsem=0
nsemop=0
nshm=0
shmsize=0
wallclock=705
pcpu=0
readbps=0
writebps=0
readiops=0
writeiops=0

Instalamos el exporter:

pkg install 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í