lunes, 13 de octubre de 2008

Nagios - Instalacióm rápida - Parte 1

Bueno, pues tal como dice el título del articulo, estoy rompiendo mano con Nagios por primera vez, y buscando información encontré informacion en castellano bastante completa ;)

En esta web existe un manual de instalación rápida de Nagios para distintas distribuciones, asi que siguiendo las indicaciones, lo instalé en Centos, que aunque no está si hay un manual para Fedora :)

Como he tenido que instalarlo en distintas máquinas de pruebas, me ha resultado interesante hacer un script con las ordenes necesarias para la instalación, incluida la descarga de los fuentes, compilación y creación de usuarios y grupos necesarios.

Simplemente existen 4 requisitos, tener instalados los siguientes paquetes:
http
gcc
glibc-common
gd-devel

Una vez instalados, (fácil usando yum), simplemente ponemos el script en tmp con permisos de ejecucion para root y ejecutamos.

Solo necesita nuestra intervencióndos veces, para introducir passwords, la primera para el usuario nagios en la instalación y la segunda para el usuario nagiosadmin de acceso web.
Generamos dos ficheros de logs, uno para la instalación de Nagios en /tmp y el otro para la instalación de los Plugins, también en /tmp .

El script es el siguiente:

# rpm -qa|grep http
# rpm -qa|grep gcc
# rpm -qa|grep glibc-common
# rpm -qa|grep gd-devel

echo "Creando el usuario nagios"
useradd -m nagios
echo "Password para el usuario nagios : "
passwd nagios
echo "Password cambiado correctamente"
echo "Creando el Grupo nagcmd"
groupadd nagcmd

echo "Insertando usuarios nagios y apache al grupo nagcmd"
usermod -G nagcmd nagios
usermod -G nagcmd apache

echo "Creando el el directorio temporal de descarga /tmp/down_nagios"
mkdir /tmp/down_nagios

echo "Entrando en el directorio temporal de descarga /tmp/down_nagios"
cd /tmp/down_nagios/

echo "Descargando nagios y plugins"
wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.3.tar.gz
wget http://downloads.sourceforge.net/nagiosplug/nagios-plugins-1.4.13.tar.gz?modtime=1222335829&big_mirror=0

echo "Desempaquetando nagios"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "tar de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
tar -xvf nagios-3.0.3.tar.gz>>/tmp/log_install_nagios.`date +%d%m%y`

echo "Entrando en el directorio de los fuentes de Nagios"
cd nagios-3.0.3

echo "Haciendo ./cofigure"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "configure de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
./configure --with-command-group=nagcmd>>/tmp/log_install_nagios.`date +%d%m%y`

echo "Haciendo make all"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "make all de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
make all>>/tmp/log_install_nagios.`date +%d%m%y`

echo "Haciendo make install"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "make install de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
make install>>/tmp/log_install_nagios.`date +%d%m%y`
echo "Haciendo make install-init"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "make install-init de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
make install-init>>/tmp/log_install_nagios.`date +%d%m%y`
echo "Haciendo make install-config"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "make install-config de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
make install-config>>/tmp/log_install_nagios.`date +%d%m%y`
echo "Haciendo make install-commandmode"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "make install-commandmode de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
make install-commandmode>>/tmp/log_install_nagios.`date +%d%m%y`

#vi /usr/local/nagios/etc/objects/contacts.cfg

echo "Haciendo make install-webconf"
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
echo "make install-webconf de Nagios">>/tmp/log_install_nagios.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios.`date +%d%m%y`
make install-webconf>>/tmp/log_install_nagios.`date +%d%m%y`

echo "Estableciendo password para nagiosadmin :"
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

echo "Reiniciando Apache"
/etc/init.d/httpd restart

cd ..

echo "Desenpaquetando plugins"
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "tar de Plugins">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
tar -xvf nagios-plugins-1.4.13.tar.gz>>/tmp/log_install_nagios_plugins.`date +%d%m%y`

echo "Entrando en directorio de Plugins"
cd nagios-plugins-1.4.13

echo "Haciendo configure de Plugins"
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "configure de Plugins">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
./configure --with-nagios-user=nagios --with-nagios-group=nagios>>/tmp/log_install_nagios_plugins.`date +%d%m%y`

echo "Haciendo make de Plugins"
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "make de Plugins">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
make>>/tmp/log_install_nagios_plugins.`date +%d%m%y`

echo "Haciendo make install de Plugins"
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "make install de Plugins">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
echo "####################################################">>/tmp/log_install_nagios_plugins.`date +%d%m%y`
make install>>/tmp/log_install_nagios_plugins.`date +%d%m%y`

echo "Configurando el servicio de Nagios"
chkconfig --add nagios
chkconfig nagios on

echo "Verificando Errores de Instalacion Nagios"
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

echo "Iniciando Nagios"
/etc/init.d/nagios start

echo "instalacion Finalizada
"

jueves, 2 de octubre de 2008

HowTo - Configuración Multipath

Instalación.
El paquete necesario para la instalación del multipath es el:
device-mapper-multipath.i386

Podemos instalarlo desde el repositorio, mediante el comando:
yum install device-mapper-multipath.i386

Este paquete tiene una serie de dependencias que podemos ver con el comando siguiente:
[root@nodo2 ~]# yum deplist device-mapper-multipath.i386|grep provider|sort -u
provider: bash.i386 3.2-21.el5
provider: chkconfig.i386 1.3.30.1-2
provider: device-mapper.i386 1.02.24-1.el5
provider: device-mapper-multipath.i386 0.4.7-17.el5
provider: glibc.i386 2.5-24
provider: glibc.i686 2.5-24
provider: kpartx.i386 0.4.7-17.el5
provider: libsysfs.i386 2.0.0-6
provider: ncurses.i386 5.5-24.20060715
provider: readline.i386 5.1-1.1


Con esto tenemos el multipath instalado, y listos para empezar.


Configuración inicial.

Para una configuración inicial hay que revisar esencialmente 3 partes del fichero de configuración.

1.- En primer lugar existe una parte que por defecto hace que se ignoren todos los dispositivos, habrá que comentarla
para que multipath pueda detectar los dispositivos existentes.

blacklist {
devnode "*"
}


por

#blacklist {
# devnode "*"
#}


2.- La siguiente sección, permite que multipath detecte por defecto todos los dispositivos, por lo que debe estar
sin comentar.

defaults {
udev_dir /dev
polling_interval 10
selector "round-robin 0"
path_grouping_policy multibus
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
prio_callout /bin/true
path_checker readsector0
rr_min_io 100
max_fds 8192
rr_weight priorities
failback immediate
no_path_retry fail
user_friendly_names no


NOTA:
path_grouping_policy multibus
Esto hace que también sean escaneados los dispositivos IDE y Floppy, si queremos ignorar dichos dispositivos,
esta entrada debería quedar como sigue:
path_grouping_policy failover

3.- En esta sección se definen los dispositivos que queremos que multipath ignore. Esto se detalla en otra sección.
Dejaremos esta parte según las necesidades de cada caso.
Por defecto:

#blacklist {
# wwid 26353900f02796769
# devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
# devnode "^hd[a-z]"
#}


Por último solo nos queda hacer que los datos tengan efecto.

modprobe dm-multipath
modprobe dm-round-robin
/etc/init.d/multipathd restart
multipath -v2


Ahora configuramos multipath para que arranque en el inicio.

chkconfig --level 35 multipathd on

Por último vaciamos la cache de multipath , reiniciamos el servicio y reescaneamos los dispositivos.

multipath -F
/etc/init.d/multipathd restart
multipath -v2


Ahora podemos ejecutar el comando:

multipath -ll

y obtendremos una salida de este tipo:

mpath1 (360060480000287971039523544343331)
[size=49 GB][features="0"][hwhandler="0"]
_ round-robin 0 [enabled]
_ 0:0:0:11 sdg 8:96 [active][ready]
_ 1:0:0:11 sdo 8:224 [active][ready]


Donde vemos información como:

mpath1 --> El nombre de pseudo-dispositivo que podemos montar desde /dev/mapper/mpath1
(36...................331) --> wwid del dispositivo.
size --> Tamaño del disco.
round-robin 0 [enabled] --> Tipo de balanceo
_ 0:0:0:11 sdg 8:96 [active][ready] --> Información del camino y el LUN SCSI
_ 1:0:0:11 sdo 8:224 [active][ready] --> Información del camino y el LUN SCSI

Configurando Blacklist. - Ignorando dispositivos

Algunas veces necesitaremos que multipath no tenga presente algunos dispositivos.
Esto se indica dentro del fichero de configuración global de multipath
/etc/multipath.conf

En el existe una seción comentada por defecto donde indicaremos que dispositivos queremos ignorar.
#blacklist {
# wwid 26353900f02796769
# devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
# devnode "^hd[a-z]"
#}


Para este fin podemos expresar los dispositivos mediante expresiones regulares, wwid o ambas, como
en el siguiente ejemplo, donde xxxxxx es un wwid valido y "^sd[ab]$" indica los dispositivos
sda y sdb como sdaa y sdba.
blacklist {
wwid xxxxxxxxxxxxxxx
devnode "^sd[ab]$"
}


Para aplicar estos cambios basta con ejecutar:
multipath -F

Esto vacía la cache del multipath.

luego reiniciamos el servicio.
/etc/init.d/multipathd restart

Podemos ver los resultados ejecutando y reescanear los discos, mediante.
multipath -v2
o
multipath -ll
Observaremos que los dispositivos ignorados no aparecen.


Visualización de dispositivos.

Los dispositivos detectados por multipath, son creados bajo
/dev/mapper/XXXXXXXXXXXXXXXXXXXXXXXXXXX
/dev/mapper/XXXXXXXXXXXXXXXXXXXXXXXXXXX
..............


Si por el contrario preferimos ver los dispositivos de un modo un poco más amigable (Yo no lo prefiero ;))
podemos activar en el fichero de configuración la opción:

user_friendly_names yes

De este modo los dispositivos serán creados de la siguiente manera.
/dev/mapper/mpath0
/dev/mapper/mpath1
.....


La relación entre el nombre que les da a los dispositivos y su wwid, está en:
grep mpath /var/lib/multipath/bindings
mpath0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mpath1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



Prevenir Errores.

En caso de que se produzca un fallo general en la comunicación y todos los caminos cayeran, podemos
configurar multipath para que use una "cola" de I/O, para que las aplicaciones no detecten la ciada de servicio. Esta cola se actualizará cuando alguna de las rutas este disponible.
Para configurar el uso de de esta cola, editamos el fichero de configuración general y actualizamos
el valor "features", en la sección del dispositivo.

devices {
device {
vendor "COMPAQ "
features "1 queue_if_no_path"
...............