/

Monitorizar servidores y servicios

Created 2020-02-02 Modifyed 2020-02-02
1120 Words

Esto también pasa si estamos administrando servidores, tener una forma para darnos cuenta rápidamente de algún problema es fundamental.

Existen varias herramientas para realizar esta monitorización, en este caso vamos a utilizar nagios.

Nagios es un sistema de monitorización de codigo abierto, con el que podemos vigilar tanto equipos (hardware) como servicios (software).

Para esta prueba de concepto, vamos a utilizar docker y docker-compose (i love docker :))

Lo primero vamos a crear un archivo con el nombre docker-compose.yml

version: '3'
services:
    nagios:
        container_name: nagios
        image: ethnchao/nagios
        ports:
            - "80:80"
            - 3000:3000
        volumes:
            - ./data/conf:/usr/local/nagios/etc/mount
            - ./data/plugin:/data/plugin
            - ./data/example:/data/example
        environment:
            - MYSQL_USER=nagios
            - MYSQL_PASSWORD=nagios
            - MYSQL_ADDRESS=mysql_nagios
            - MYSQL_DATABASE=nagios
        command: --enable-ndo --create-db
        restart: always

    mysql_nagios:
        image: mysql:5.7
        environment:
            - MYSQL_ROOT_PASSWORD=mysql
            - MYSQL_USER=nagios
            - MYSQL_PASSWORD=nagios
            - MYSQL_DATABASE=nagios
        volumes:
            - ./mysql:/var/lib/mysql
        restart: always

Declaramos dos servicios, uno es el nagios, que se encargará de monitorizar nuestros servidores y servicios, y tambien levantaremos una base de datos para que se almacenen todas nuestras metricas.

Una vez levantados nuestros contenedores con docker-compose up podremos ir en el navegador a localhost y tras meter el usuario y contraseña en el realm (nagiosadmin, nagios) podremos ver el dashboard del nagios.

monitorizar-servidores-y-servicios-1

Si vamos a la sección servicios, podremos ver como por defecto nagios nos monitoriza ciertas cosas.

monitorizar-servidores-y-servicios-2

Vemos que nos monitoriza la carga del servidor (Current Load), la cantidad de usuarios conectados (Current Users), servidor web (HTTP), ping al equipo (PING), el espacio usado en la partición root (Root Partition), uso de memoria swap (Swap Usage) y el número de procesos totales (Total Processes)

Como podemos ver, en el servicio HTTP nos da un warning. Esto es porque este “test”, comprueba que el servidor web de un código 200, y como podemos ver en la columna “status information”, nos da un código 401 ya que el acceso al nagios es a traves de un realm y como no lo hemos configurado para acceder con el usuario y contraseña correcto nos devuelve un ‘unauthorized’.

En este dashboard podremos “ver” todos los servidores y servicios que estamos monitorizando, pero no podremos añadirlos desde el panel. Para esto tendremos que ir a los archivos de configuración y meterlos a mano.

Para hacer una prueba, vamos a levantar un servidor web en un contenedor de prueba, y lo monitorizaremos desde el nagios. Para esto, ejecutaremos el siguiente comando:

docker run -d --network=monitorizarservidoresyservicios_default -p 9090:80 nginx

Aquí podemos ver, que nuestro contenedor nginx lo hemos metido en la red del nagios, para que se vean entre ellos. En un entorno normal, no haría falta hacer esto

Al hacer esto, podremos navegar a la siguiente direccion http://localhost:9090 y veremos la pantalla de bienvenida de nginx

monitorizar-servidores-y-servicios-3

En este momento, nos meteremos en el contenedor para crear un archivo con el que podremos monitorizar este servidor web nginx

monitorizar-servidores-y-servicios-4

Todo lo referente a nagios lo encontraremos en la ruta /usr/local/nagios.

Vamos a crear el archivo de configuracion para nuestro servicio en /usr/local/nagios/etc/okconfig y lo haremos con el siguiente comando:

touch `/usr/local/nagios/etc/okconfig/nombrequequeramos.cfg`

El contenido de este archivo será el siguiente:

#Definimos el host donde está nuestro servicio para poder tenerlos organizados
define host{
        use                     linux-server            ; Template que usamos para este servidor
        host_name               pruebas.com
        alias                   pruebas.com
        address                 127.0.0.1
}

define command{
    command_name    check_http_nginx
    command_line    $USER1$/check_http -H 172.19.0.4 -p 80 ;$USER1$ hace referencia al directorio libexec
}

define service{
        use                             generic-service         ; Tipo de servicio que estamos monitorizando
                                                                ; Hay ciertas plantillas, y tambien podremos definir otras
        host_name                       pruebas.com
        service_description             Nginx
        check_command                   check_http_nginx
}



Como podemos ver, hemos definido un comando, para poder pasar a check_http los parametros que necesitemos para hacer nuestro test

En este caso en concreto, hemos tenido que mirar la dirección ip que docker ha dado a nuestro contenedor nginx, esto lo hemos hecho con docker inspect (idContendorNginx)

Despues de crear el archivo de configuración, comprobaremos que lo hemos hecho bien de la siguiente forma:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

y si todo va bien veremos algo parecido a esto:

Running pre-flight check on configuration data...

Checking objects...
	Checked 8 services.
	Checked 2 hosts.
	Checked 1 host groups.
	Checked 0 service groups.
	Checked 1 contacts.
	Checked 1 contact groups.
	Checked 198 commands.
	Checked 5 time periods.
	Checked 0 host escalations.
	Checked 0 service escalations.
Checking for circular paths...
	Checked 2 hosts
	Checked 0 service dependencies
	Checked 0 host dependencies
	Checked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...

Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

En cambio, si algo ha ido mal, veremos lo siguiente:

Checked 1 contact groups.
Checked 198 commands.
Checked 5 time periods.
Checked 0 host escalations.
Checked 0 service escalations.
Checking for circular paths...
Checked 2 hosts
Checked 0 service dependencies
Checked 0 host dependencies
Checked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...

Total Warnings: 0
Total Errors:   1

***> One or more problems was encountered while running the pre-flight check...

   Check your configuration file(s) to ensure that they contain valid
   directives and data definitions.  If you are upgrading from a previous
   version of Nagios, you should be aware that some variables/definitions
   may have been removed or modified in this version.  Make sure to read
   the HTML documentation regarding the config files, as well as the
   'Whats New' section to find out what has changed.

Si nos ocurre esto, recomiendo ir comentando todo, añadir cada una de las directivas por separado, para localizar el problema y solucionarlo.

Dejando errores a un lado, si todo nos ha ido bien, ya podremos reiniciar el contenedor del nagios para recargar la configuración que acabamos de crear. Nos salimos del contenedor si es que estamos dentro y lo reiniciamos.

athos@athos-Z97P-D3:~/Documents$ docker restart nagios
nagios
athos@athos-Z97P-D3:~/Documents$

Si volvemos al dashboard de nagios, podremos ver que nuestro servicio ha aparecido, y tiene un status OK

monitorizar-servidores-y-servicios-5

Como último paso, vamos a tirar el contenedor que nos sirve el nginx, y vemos lo que pasa

athos@athos-Z97P-D3:~/Documents/athosnetwork.es/front$ docker ps
athos@athos-Z97P-D3:~/Documents/athosnetwork.es/front$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
a5c93e48ab44        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        0.0.0.0:9090->80/tcp                         musing_nash
eaf5e52dae0f        ethnchao/nagios     "/run.sh --enable-nd…"   44 minutes ago      Up 5 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:3000->3000/tcp   nagios
0aa362959d49        mysql:5.7           "docker-entrypoint.s…"   45 minutes ago      Up 45 minutes       3306/tcp, 33060/tcp                          monitorizarservidoresyservicios_mysql_nagios_1
athos@athos-Z97P-D3:~/Documents/athosnetwork.es/front$ docker kill a5c93e48ab44
a5c93e48ab44
athos@athos-Z97P-D3:~/Documents/athosnetwork.es/front$

monitorizar-servidores-y-servicios-6

Y así es como monitorizamos nuestros servidores y servicios.

Adicionalmente, se puede configurar un cliente de escritorio, como nagstamon para que nos salte una alerta cuando haya algun problema, o configurar un servidor smtp para que nos avise por correo electrónico