Monitorización en OpenBSD (I)

Para nosotros el entorno monitorizado será una máquina corriendo OpenBSD y varios servicios de los cuales queremos procesar información. En esta primera entrega nos centraremos en pf, httpd, tráfico de red y estado de la máquina (cpu, mem...). Tenemos varias herramientas a nuestra disposición, desde RRDTool y MRTG hasta scripts particulares como rrdtool-helper de Juanjo. Siguiendo la filosofía de OpenBSD vemos que en la base del sistema no tenemos ninguna herramienta para tal efecto, con lo que buscamos en los packages encontrando varias alternativas. De todas ellas y para una monitorización básica como la que nos hemos marcado como objetivo, probablemente symon sea lo más sencillo de usar/instalar. Otro handicap importante es que su entorno web respeta totalmente el chroot del servidor, con lo que no le daremos más vueltas:
# pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/symon-2.71.tgz symon-2.71: complete ... --- symon-2.71 ------------------- An example configuration for symon has been installed in /usr/local/share/examples/symon. RRD files can be obtained by running /usr/local/share/symon/c_smrrds.sh #La información final es importante, tenemos un ejemplo de configuración en el directorio indicado y también dice como podemos crear los archivos RRD que contendrán la información. El proceso viene a ser el siguiente:
- Configuramos symon: Para ello nos servimos del ejemplo y editamos el mismo especificando las características propias del entorno:
# cp /usr/local/share/examples/symon/symux.conf /etc/ # cp /usr/local/share/examples/symon/symon.conf /etc/
# nano /etc/symux.conf ... mux 127.0.0.1 2100 source 127.0.0.1 { accept { cpu(0), mem, if(lo0), pf, # mbuf, # sensor(0), proc(httpd), if(rl0), if(ne3), if(wi0), # io(wd1), io(wd2), io(wd3), io(cd0) io(wd0) } datadir "/usr/local/share/symon/rrds/localhost" }
# nano /etc/symon.conf ... monitor { cpu(0), mem, if(lo0), pf, # mbuf, # sensor(0), proc(httpd), if(rl0), if(ne3), if(wi0), # io(wd1), io(wd2), io(wd3), io(cd0) io(wd0) } stream to 127.0.0.1 2100
Hemos configurado tanto symux como symon, que serán los dos daemons encargados de recoger datos de todo lo indicado en la configuración, en este caso nos centramos en cpu(0), mem, pf, proc(httpd), tarjetas de red y disco duro io(wd0). También debemos configurar la variable datadir apuntando hacia el directorio donde estos dos procesos guardarán los datos en ficheros RRD (ojo con esto, porque más adelante cambiaremos el valor de datadir). - Creamos los ficheros RRD: Una vez configurados los daemons nos situamos en el directorio donde guardarán los datos (variable datadir) y creamos los RRD que hemos indicado en el archivo de configuración, para ellos symon viene con un script llamado c_smrrds.sh, lo copiamos en datadir y creamos los archivos de datos:
# cp /usr/local/share/symon/c_smrrds.sh /usr/local/share/symon/rrds/localhost # cd /usr/local/share/symon/rrds/localhost # ./c_smrrds.sh cpu0 # ./c_smrrds.sh mem # ./c_smrrds.sh pf # ./c_smrrds.sh proc_httpd # ./c_smrrds.sh lo0 # ./c_smrrds.sh rl0 # ./c_smrrds.sh ne3 # ./c_smrrds.sh wi0 # ./c_smrrds.sh wd0 # ls -l *rrd -rw-r--r-- 1 root wheel 4379260 Jan 5 12:10 cpu0.rrd -rw-r--r-- 1 root wheel 8757060 Jan 5 12:10 if_lo0.rrd -rw-r--r-- 1 root wheel 8757060 Jan 5 12:10 if_ne3.rrd -rw-r--r-- 1 root wheel 8757060 Jan 5 12:10 if_rl0.rrd -rw-r--r-- 1 root wheel 8757060 Jan 5 12:10 if_wi0.rrd -rw-r--r-- 1 root wheel 4379260 Jan 5 12:10 io_wd0.rrd -rw-r--r-- 1 root wheel 4379260 Jan 5 12:10 mem.rrd -rw-r--r-- 1 root wheel 19263780 Jan 5 12:10 pf.rrd -rw-r--r-- 1 root wheel 7005940 Jan 5 12:10 proc_httpd.rrd
Ya hemos creado los archivos necesarios para que symon (y symux) guarden la información, teóricamente estamos preparados para arrancar los daemons y empezar la diversión. - Arrancando los daemons: Tenemos varias opciones, a las bravas o de una forma un tanto más ética, usando /etc/rc.local, que para eso está. Añadimos lo siguiente:
# Symux if [ -x /usr/local/libexec/symux ]; then echo -n ' symux'; /usr/local/libexec/symux fi # Symon if [ -x /usr/local/libexec/symon ]; then echo -n ' symon'; /usr/local/libexec/symon fi
Al reiniciar se inciarán los procesos, como todos los de /etc/rc.local, si queremos arrancarlos manualmente# /usr/local/libexec/symux # /usr/local/libexec/symon
Y si todo ha sido correcto ahora tendremos los dos procesos corriendo y el puerto 2100 abierto en 127.0.0.1 (leyendo los archivos de configuración seguro que ya os habíais dado cuenta).
- Phpsymon: Procesa la información de forma instantánea conectándose al puerto 2100 y mostrando los resultados de forma gráfica y sencilla de interpretar, no utiliza ficheros RRD para nada.
- Syweb: Utiliza los datos RRD para crear las típica gráficas rrdtool (dependencia) de forma que tendremos un histórico de toda la información procesada. Es obvio que debemos instalar rrdtool

Syweb tiene más miga, además de bajarlo y descomprimirlo adecuadamente debemos preparar el chroot para que sea capaz de ejecutar rrdtool, darle un directorio temporal de caché, decirle donde se encuentran los archivos RRD de datos y poco más. Pero vamos por partes. Una vez dentro del directorio syweb ejecutamos un script que viene con él encargado de acondicionar el chroot para poder tener acceso a rrdtool y todas sus librerías:
# wget http://www.xs4all.nl/~wpd/symon/philes/syweb-0.53.tar.gz # tar xfvvz syweb-0.53.tar.gz # cd syweb/ # ls CHANGELOG Makefile contrib install_rrdtool.sh INSTALL README htdocs symon # ./install_rrdtool.sh rrdtool and libs installed in apache root #Nos fiamos de que haya hecho lo correcto (haced un ls de bin/ dentro del chroot, jeje). Ahora solo nos quedamos con el interfaz web (lo que se encuentra en syweb/htdocs/), lo ubicamos y vamos a configurar las opciones generales, para ello editamos setup.inc:
... $symon['rrdtool_path']='/bin/rrdtool'; $symon['cache_dir']='cache'; $symon['host_tree']='rrds'; $symon['layout_dir']='/htdocs/tools/syweb'; ...Estas son las opciones más importantes. Para que funcione debemos tener los directorios cache/ y rrds/ creados (el primero de ellos con permisos de escritura para el usuario www) dentro de syweb/ Digamos que la estructura ha de ser la siguiente:
syweb/
| cache/
| rrd/
| localhost/*rrd
Y ahora surge un pequeño problema, los archivos RRD, como hemos visto anteriormente, dependen de la variable datadir que no se encuentra apuntando a este directorio. Ya advertí que llegados a este punto tendríamos que cambiar la ubicación de los RRD así que editamos de nuevo /etc/symux.conf:
datadir "/var/www/htdocs/syweb/rrds/localhost"Reiniciamos los servicios y, vía web, deberíamos ver algo similar a ésto:

Con todo esto tenemos lo más básico de la máquina monitorizado, si consigo reunir fuerzas y tiempo suficientes intentaré explicar otro tipo de monitorizaciones avanzadas (snmp, nagios...). Hasta entonces, suerte con las gráficas :).
Comentarios
Uy, ¿solo tienes arrancando esas dos cosas en tu rc.local? Si hago yo eso en una de mis máquinas se monta una buena :D
Aunque molaría poder ver los sshots, que sueles poner en los articulos, en grande :P
[code]
# for i in cpu0 mem lo0 pf mbuf sensor0 proc_httpd rl0 dc0 wi0 wd0
> do
> ./c_smrrds.sh $i
> done
cpu0.rrd created
mem.rrd created
if_lo0.rrd created
pf.rrd created
mbuf.rrd created
sensor0.rrd created
proc_httpd.rrd created
if_rl0.rrd created
if_dc0.rrd created
if_wi0.rrd created
io_wd0.rrd created
[/code]
Por lo demás todo igual (salvo que yo no tengo el apache chrooted, con lo que cambia un poco el montaje de syweb).
Gran doc/tip, gracias por darme el empujoncito que necesitaba para animarme a montarlo, ahora a por nagios... y ya montar snort tiene que ser una gozada (si, ya se que snort es para otra cosa...)