Cómo monitorear Docker usando Zabbix en Ubuntu 20.04

El autor seleccionó la Iniciativa de Código Abierto para recibir una donación como parte del programa Write for DOnations .
Docker es una aplicación popular que simplifica la gestión de procesos de aplicaciones en contenedores. Los contenedores son similares a las máquinas virtuales, pero dado que dependen más del sistema operativo anfitrión, son más portátiles y consumen menos recursos.
Al utilizar contenedores en un entorno de producción, conviene saber si todos están en funcionamiento y qué recursos están consumiendo. Zabbix es un sistema de monitorización que puede supervisar el estado de casi cualquier elemento de su infraestructura de TI, como redes, servidores, máquinas virtuales y aplicaciones.
Zabbix ha presentado recientemente un nuevo agente ( Zabbix Agent 2 ) con funciones avanzadas. Una de las principales ventajas del nuevo agente es la capacidad de ampliar la funcionalidad mediante complementos. En este momento, hay varios complementos disponibles, incluido uno para supervisar Docker.
En este tutorial, configurará la monitorización de Docker en Zabbix mediante el agente Zabbix 2 en Ubuntu 20.04. Explorará las métricas y simulará un fallo para generar una notificación. Al final, tendrá un sistema de monitorización implementado para su aplicación Docker, que le notificará sobre cualquier problema con los contenedores.
Prerrequisitos
Para seguir este tutorial, necesitarás:
-
Dos servidores Ubuntu 20.04 configurados siguiendo la Guía de configuración inicial del servidor para Ubuntu 20.04 , incluido un usuario no root con
sudo
privilegios y un firewall configurado conufw
. -
El primer servidor en el que instalarás Zabbix será el servidor Zabbix . Instala los siguientes componentes:
- Nginx, MySQL y PHP, instalados siguiendo los pasos 1 a 3 del tutorial Guía de la pila LEMP de Ubuntu 20.04 .
- Zabbix, instalado siguiendo los pasos 1 a 5 del tutorial Cómo instalar y configurar Zabbix para monitorear de forma segura servidores remotos en Ubuntu 20.04 .
- Para recibir notificaciones por correo (en lugar de la interfaz web), recomendamos completar el Paso 8 de Cómo instalar y configurar Zabbix para monitorear servidores remotos de forma segura en Ubuntu 20.04 .
-
El segundo servidor, donde instalarás Docker (y el agente Zabbix), será el servidor Docker . Instala Docker siguiendo el Paso 1 del tutorial Cómo instalar y usar Docker en Ubuntu 20.04 .
-
Un nombre de dominio completamente registrado. Este tutorial lo utilizará
your_domain
como ejemplo. Puede comprar un nombre de dominio en Namecheap , obtener uno gratis en Freenom o utilizar el registrador de dominios que prefiera. -
Un registro A que
your_domain
apunta a la dirección IP pública de su servidor Zabbix. Puede consultar esta introducción a DigitalOcean DNS para obtener detalles sobre cómo agregarlo.
Paso 1: Instalación y configuración del agente Zabbix 2
Un agente Zabbix es una aplicación muy pequeña que debe instalarse en cada servidor o máquina virtual que desee monitorear. Enviará datos de monitoreo al servidor Zabbix. Zabbix sugiere usar uno de dos agentes: Zabbix agent o Zabbix agent 2. (Puede obtener más información sobre sus diferencias en la documentación ). Para este tutorial, usaremos Zabbix agent 2, ya que puede funcionar con Docker. En este paso, aprenderá a instalarlo y configurarlo.
Comience instalando el software del agente. Inicie sesión en el servidor Docker :
- ssh sammy@docker_server_ip_address
Ejecute los siguientes comandos para instalar el paquete de configuración del repositorio:
- wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
- sudo dpkg -i zabbix-release_5.0-1+focal_all.deb
A continuación, actualice el índice del paquete:
- sudo apt update
Luego instale el agente Zabbix:
- sudo apt install zabbix-agent2
A continuación, deberá editar el archivo de configuración del agente, que contiene todos los ajustes del agente. Estos ajustes especifican la dirección a la que se transferirán los datos, el puerto que se utilizará para las conexiones hacia y desde el servidor, si se utilizará una conexión segura y mucho más. En la mayoría de los casos, los ajustes predeterminados serán suficientes. Todos los ajustes dentro de este archivo están documentados mediante comentarios informativos a lo largo del archivo.
Para este tutorial, deberá editar la configuración del agente Zabbix para configurar su conexión con el servidor Zabbix . Abra el archivo de configuración del agente en su editor de texto:
- sudo nano /etc/zabbix/zabbix_agent2.conf
De forma predeterminada, el agente está configurado para enviar datos a un servidor en el mismo host que el agente, por lo que deberá agregar la dirección IP del servidor Zabbix . Busque la siguiente sección:
/etc/zabbix/zabbix_agent2.conf
...### Option: Server# List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.# Incoming connections will be accepted only from the hosts listed here.# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally# and '::/0' will allow any IPv4 or IPv6 address.# '0.0.0.0/0' can be used to allow any IPv4 address.# Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com## Mandatory: yes, if StartAgents is not explicitly set to 0# Default:# Server=Server=127.0.0.1...
Cambie el valor predeterminado a la IP de su servidor Zabbix :
/etc/zabbix/zabbix_agent2.conf
...Server=zabbix_server_ip_address...
De forma predeterminada, el servidor Zabbix se conecta al agente. Sin embargo, para algunas comprobaciones (por ejemplo, la supervisión de los registros), se requiere una conexión inversa. Para un funcionamiento correcto, es necesario especificar la dirección del servidor Zabbix y un nombre de host único.
Busque la sección que configura los chequeos activos y cambie los valores predeterminados como se muestra a continuación:
/etc/zabbix/zabbix_agent2.conf
...##### Active checks related### Option: ServerActive# List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.# If port is not specified, default port is used.# IPv6 addresses must be enclosed in square brackets if port for that host is specified.# If port is not specified, square brackets for IPv6 addresses are optional.# If this parameter is not specified, active checks are disabled.# Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]## Mandatory: no# Default:# ServerActive=ServerActive=zabbix_server_ip_address### Option: Hostname# Unique, case sensitive hostname.# Required for active checks and must match hostname as configured on the server.# Value is acquired from HostnameItem if undefined.## Mandatory: no# Default:# Hostname=Hostname=Docker server...
Guarde y cierre el archivo.
Para que el agente Zabbix monitoree Docker, necesitará agregar el zabbix
usuario al docker
grupo:
- sudo usermod -aG docker zabbix
Ahora puedes reiniciar el agente Zabbix y configurarlo para que se inicie en el momento del arranque:
- sudo systemctl restart zabbix-agent2
- sudo systemctl enable zabbix-agent2
Por si acaso, verifique que el agente Zabbix esté ejecutándose correctamente:
- sudo systemctl status zabbix-agent2
La salida será similar a esta, indicando que el agente se está ejecutando:
Output● zabbix-agent2.service - Zabbix Agent 2 Loaded: loaded (/lib/systemd/system/zabbix-agent2.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-09-03 07:05:05 UTC; 1min 23s ago ...
El agente escuchará en el puerto 10050
las conexiones del servidor. Configure UFW para permitir conexiones a este puerto:
- sudo ufw allow 10050/tcp
Puede obtener más información sobre UFW en Cómo configurar un firewall con UFW en Ubuntu 20.04 .
En este paso, instaló el agente Zabbix 2, lo configuró para permitir conexiones desde su servidor Zabbix y se preparó para monitorear Docker.
Tu agente ya está listo para enviar datos al servidor Zabbix . Pero para poder usarlo, debes vincularlo desde la consola web del servidor y habilitar la plantilla Docker. En el siguiente paso, completarás la configuración.
Paso 2: Agregar el nuevo host al servidor Zabbix
Instalar un agente en el servidor que desea monitorear es solo la mitad del proceso. Cada host que desea monitorear debe estar registrado en el servidor Zabbix , lo que puede hacer a través de la interfaz web. También debe conectarle la plantilla adecuada. Con las plantillas, puede aplicar los mismos elementos de monitoreo, activadores, gráficos y reglas de descubrimiento de bajo nivel a varios hosts. Cuando una plantilla está vinculada a un host, todas las entidades (elementos, activadores, gráficos, etc.) de la plantilla se agregan al host.
Inicie sesión en la interfaz web del servidor Zabbix navegando a la dirección http://zabbix_server_name
o https://zabbix_server_name
. (Como se menciona en el tutorial vinculado en los requisitos previos, Cómo instalar y configurar Zabbix para monitorear de forma segura servidores remotos en Ubuntu 20.04 , el usuario predeterminado es Admin y la contraseña es zabbix ).
Cuando haya iniciado sesión, haga clic en Configuración y luego en Hosts en la barra de navegación izquierda. Luego, haga clic en el botón Crear host en la esquina superior derecha de la pantalla. Esto abrirá la página de configuración del host.
Ajuste el nombre del host y la dirección IP para reflejar el nombre del host y la dirección IP de su servidor Docker y, a continuación, agregue el host a un grupo. Puede seleccionar un grupo existente, como servidores Linux , o crear su propio grupo, como servidores Docker . Cada host debe estar en un grupo y también puede estar en varios grupos. Para ello, introduzca el nombre de un grupo existente o nuevo en el campo Grupos y seleccione el valor deseado de la lista propuesta.
Después de agregar el grupo, haga clic en la pestaña Plantillas .
Para habilitar las comprobaciones necesarias, es necesario agregar una plantilla. La plantilla incluye todas las comprobaciones, activadores y gráficos necesarios. El host puede tener varias plantillas. Para ello, introduzca el nombre de la plantilla en el campo de búsqueda y selecciónela de la lista propuesta.
Para este tutorial, escriba Template App Docker y luego selecciónela de la lista para agregar esta plantilla al host. Esto adjuntará al host todos los elementos, activadores y gráficos necesarios para la supervisión de Docker que se configuraron previamente en la plantilla.
Por último, haga clic en el botón Agregar en la parte inferior del formulario para crear el host.
Verá su nuevo host en la lista. Espere un minuto y vuelva a cargar la página para ver las etiquetas verdes que indican que todo está funcionando correctamente.
En este paso, agregó un nuevo host al servidor y utilizó plantillas listas para usar para agregar las comprobaciones necesarias.
El servidor Zabbix ahora está monitoreando su servidor Docker . En el siguiente paso, iniciará un contenedor de prueba y explorará qué métricas puede recopilar Zabbix.
Paso 3: Acceso a las métricas de Docker
Si está ejecutando este tutorial en un nuevo entorno, no tiene ningún contenedor en ejecución y nada que monitorear todavía. En este paso, iniciará un contenedor de prueba y verá qué métricas están disponibles. En este tutorial, ejecutará un contenedor de prueba basado en ubuntu
.
Ejecute el siguiente comando en el servidor Docker :
- sudo docker run --name test_container -it ubuntu bash
Esto lanzará un contenedor de prueba llamadocontenedor de pruebausando la ubuntu:latest
imagen. La -it
bandera le indica a Docker que asigne un pseudo-TTY conectado a la entrada estándar del contenedor , creando un bash
shell interactivo en el contenedor.
El resultado será similar a esto:
OutputUnable to find image 'ubuntu:latest' locallylatest: Pulling from library/ubuntu35807b77a593: Pull completeDigest: sha256:9d6a8699fb5c9c39cf08a0871bd6219f0400981c570894cd8cbea30d3424a31fStatus: Downloaded newer image for ubuntu:latest
Nota: No dejes el shell, ya que lo necesitarás en el siguiente paso.
Un par de minutos después de iniciar el contenedor, Zabbix encontrará automáticamente un nuevo contenedor y agregará las métricas adecuadas.
Para ver una lista de todas las métricas, haga clic en Monitoreo y luego en Hosts en la barra de navegación izquierda. Luego, haga clic en Datos más recientes en la línea correspondiente.
Verá una tabla con todas las métricas que el agente Zabbix recopila para un host determinado. Para cada elemento, puede ver el nombre, el período de almacenamiento del historial, la hora de la última verificación y el último valor.
Puede desplazarse por la lista y ver las métricas asociadas con elcontenedor de pruebaTambién puede ingresar el nombre del contenedor en el campo Nombre y hacer clic en Aplicar para encontrar todas las métricas relevantes.
Para ver el historial de cambios de una métrica específica, haga clic en Gráfico (para valores numéricos) o Historial (para valores de texto).
También puede seleccionar una o más métricas en la lista y hacer clic en el botón Mostrar gráfico en la parte inferior de la lista para ver varios gráficos juntos.
En este paso, ha lanzado un contenedor de prueba y ha visto sus métricas en la interfaz web de Zabbix. A continuación, activará una notificación.
Paso 4: Generar una alerta de prueba
En este paso, verá cómo funciona la monitorización simulando un apagado inesperado del contenedor, que activa una notificación de Zabbix.
Empiece por simular un fallo del contenedor. Ejecute el siguiente comando en el shell del contenedor:
- exit 1
Con este comando, finalizaste el contenedor con el código de error 1
. Este código de salida se transmite al autor de la llamada docker run
y se registra en los metadatos del contenedor de prueba.
Para ver la alerta, haga clic en Monitoreo y luego en Panel de control en la barra de navegación izquierda de la interfaz web de Zabbix. En un minuto o menos, verá la notificación “El contenedor se ha detenido con un código de error”:
Si has configurado previamente el correo electrónico u otras notificaciones, también recibirás un mensaje similar a este:
Problem started at 11:17:31 on 2021.09.03Problem name: Container /test_container: Container has been stopped with error codeHost: Docker ServerSeverity: AverageOperational data: 1Original problem ID: 103
Después de verificar las notificaciones, puedes reiniciar el contenedor y el problema desaparecerá automáticamente.
Para reiniciar el contenedor, ejecute el siguiente comando en el servidor Docker .
- sudo docker start test_container
Puedes comprobar que el contenedor se está ejecutando con este comando:
- sudo docker ps
El resultado será similar a esto:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc9b8a264c2e1 ubuntu "bash" 23 minutes ago Up 7 seconds test_container
Para ver el historial de todas las alertas en la interfaz de Zabbix, haga clic en Monitoreo y luego en Problemas en la barra de navegación izquierda. Puede usar opciones y filtros para ver eventos de un período de tiempo específico, para hosts específicos, etc. Para ver el historial, seleccione la opción Mostrar: Historial
En este paso, simuló una falla del contenedor y recibió una notificación en Zabbix.
Conclusión
En este tutorial, aprendiste a configurar una solución de monitoreo simple que te ayudará a rastrear el estado de tus contenedores Docker. Ahora puede alertarte sobre problemas y puedes analizar los procesos que se llevan a cabo en tu aplicación Docker.
Con Zabbix, puedes monitorear no solo contenedores, sino también servidores, bases de datos, aplicaciones web y mucho más utilizando plantillas oficiales de Zabbix listas para usar .
Para obtener más información sobre la infraestructura de monitoreo, consulte nuestra página de temas de Monitoreo .
Deja una respuesta