Docker swarm monitoring

El plugin de Pandora FMS para la monitorización de Docker le permite escanear su swarm y recuperar la información en su consola de Pandora FMS como vistas de cluster

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

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

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