# Docker swarm monitoring

# Introduccion

Docker nos permite desplegar aplicaciones de manera ágil, dinámica, precisa y simple. Con Docker Swarm estas aplicaciones correrán como servicios, pudiendo balancear la carga de manera dinámica.

El plugin de monitorización de servicios en Docker permite visualizar en Pandora el estado de estos servicios, así como las estadísticas de uso de recursos por parte de los contenedores desplegados en el docker local.

El plugin docker\_services escaneará el swarm, recuperando la lista de servicios, tareas y nodos a través de los métodos proporcionados por los comandos de docker.

Con los datos recolectados, se enviarán XML a Pandora FMS, para representar como agentes los nodos del swarm.

Una vez creados los agentes de nodos, se creará vía API tantas vistas de cluster como servicios se hayan encontrado.  
  
Utilizando la API, se enlazarán los recursos, crearán los agentes pertinentes, y agregarán los módulos de monitorización de los servicios.

# Matriz de compatibilidad

Este plugin se ha desarrollado utilizando Docker versión 18.03.1-ce, build 9ee9f40

# Pre requisitos

Se requiere:

● Requiere lanzarse desde el nodo MANAGER (o REACHABLE ) del docker swarm.  
● Puede lanzarlo desde máquinas remotas utilizando docker\_machine .

Se requiere conectividad con la API de Pandora FMS.  
  
[https://wiki.pandorafms.com/index.php?title=Pandora:Documentation\_es:Anexo\_API\_external](https://wiki.pandorafms.com/index.php?title=Pandora:Documentation_es:Anexo_API_external)  
  
Se requiere conexión con el servicio Tentacle asociado a su servidor de Pandora FMS (para ejecuciones locales del plugin) bajo las siguientes condiciones:  
  
● Si tiene as\_server\_plugin habilitado.  
  
El despliegue de este plugin por binarios no requiere ningún requisito especial.  
  
El script requiere la librería PandoraFMS::PluginTools.pm  
  
Esta librería está disponible con la instalación del paquete Pandora FMS OpenSource.  
  
Puede descargar la última versión de:  
  
[https://github.com/pandorafms/pandorafms/blob/develop/pandora\_server/lib/PandoraFMS/PluginTools.pm](https://github.com/pandorafms/pandorafms/blob/develop/pandora_server/lib/PandoraFMS/PluginTools.pm)

# Configuracion

```
# Launch a pre-command before invoke docker commands
pre_command = eval $(docker-machine env ml1)
docker = docker
# Log file
log_file = /tmp/pandora_docker.log
# Show all modules instead only those with values
all_modules = 1
```

**pre\_command**  
Configura un comando de precarga de entorno previa ejecución de los comandos para extraer información. Defina el siguiente contenido si utiliza docker\_machine : pre\_command = eval $(docker-machine env nombre\_de\_nodo)  
**docker**  
Ubicación del binario docker completa, si existe en el PATH de sistema puede dejar el valor por defecto ‘docker ’  
**log\_file**  
Ubicación y nombre del fichero de log que utilizará el plugin  
**all\_modules**  
Se generarán tantos módulos como estados posibles existan para las tareas con su respectivo valor si este parámetro está activo (1). En caso de estar desactivado (0) sólo se mostrarán los módulos de tareas cuyo estado se haya alcanzado. Por ejemplo, si tenemos el parámetro desactivado y el número de tareas en estado pending fuera 0, no se mostraría este módulo.

**Configuración general**

```
# Agent configuration
agent_interval = 300
agent_group = Unknow
agent_group_id = 10
# Module interval
module_interval = 1
#module_tags = docker,services
module_group = Docker
# Pandora API configuration
api_url = http://nova.lab.artica.lan/pandora_console/include/api.php
api_user = admin
api_user_pass = pandora
api_pass = pandora
# Pandora FMS API flow process timeout (seconds)
api_timeout = 10
api_retries = 3
```

**agent\_interval**  
Establece el valor del intervalo del agente.  
**agent\_group**  
Establece el grupo de los agentes y las vistas de clúster que se crearán en Pandora FMS Console.  
**agent\_group\_id** Establece manualmente una id al grupo.  
module\_interval**  
Es un factor multiplicativo del valor del intervalo del agente. Define el intervalo de ejecución de los módulos. Evitará que los módulos se vayan a desconocido si tenemos que el intervalo de ejecución del plugin es mayor que el del agente.  
**module\_tags**  
Define la lista de etiquetas que se aplicarán a los módulos generados por el plugin. Deben estar previamente definidos en Pandora FMS.  
**module\_group**  
Define el grupo de módulos en el que se clasificarán los módulos generados por el plugin. Debe estar previamente definido en Pandora FMS.  
**api\_url**  
Define la url donde acceder a la API de la consola de Pandora FMS.  
**api\_user**  
Define el usuario con acceso a la API.  
**api\_user\_pass**  
Contraseña del usuario con acceso a la API.  
**api\_pass**  
Contraseña de la API de la consola de Pandora FMS.  
**api\_timeout**  
Establece el tiempo máximo que se dedicará el plugin a intentar recuperar información de la API de Pandora FMS.  
**api\_retries**  
Establece el número máximo de reintentos en llamadas a la API de Pandora FMS.

**Modos de ejecución y transferencia de datos**

```
# Pandora Server configuration
mode = tentacle
tentacle_ip = nova.lab.artica.lan
tentacle_port = 41121
tentacle_opts =
tentacle_client = tentacle_client
local_folder = /var/spool/pandora/data_in
temp = /tmp
```

**mode**  
Modo de transferencia de ficheros XML, puede ser:  
● local: copia los ficheros a local\_folder  
● tentacle: transfiere los ficheros a tentacle\_ip por tentacle\_port  
**tentacle\_ip**  
Dirección IP o FQDN donde Pandora FMS está trabajando.  
**tentacle\_port**  
Puerto donde el servicio Tentacle asociado a su servidor Pandora FMS está escuchando.  
**tentacle\_opts**  
Opciones extra para el cliente Tentacle.  
**tentacle\_client**  
Path donde encontrar el binario del cliente tentacle.  
**local\_folder**  
Ubicación donde mover los archivos en el modo local.  
**temp**  
Ubicación temporal donde almacenar los archivos antes de enviarlos.

# Ejecución manual

Para ejecutar el plugin configure el archivo de configuración según las instrucciones precedentes.  
  
Ejecución del plugin:  
  
Versión binaria:

```
./docker_services.64 docker_services.conf
```

Versión código sin librerías desplegadas:

```
perl -I lib pandora_mysql.pl pandora_mysql.conf
```

Donde, lib es un directorio que contiene la carpeta PandoraFMS que contiene la librería PluginTools.pm  
**Nota** : Puede personalizar las opciones indicadas por el fichero de configuración agregando ‘-campo valor’ tras la llamada:

```
./docker_services.64 docker_services.conf -agent_interval 200
```

# Ejecución programada

Se ejecuta como plugin de servidor, como module\_exec en un agente, o desde el cron del sistema.  
Resultados posibles:  
● si devuelve 1 el resultado es correcto  
● distinto de 1, ha habido un error y deberá consultar el log del programa

# Modulos generados por el plugin

La ejecución estándar de este plugin devolverá los siguientes módulos por defecto (con todos los bloques opcionales habilitados):  
  
Se crearán los siguientes agentes:  
  
● Un agente por nodo del docker swarm con los siguientes módulos:  
  
○ \[nombre del servicio\] estado  
○ \[nombre del servicio\] running  
○ Node availability  
○ Node status  
○ Node TLS status