En este artículo, cubriré el monitoreo de contenedores en Docker con Zabbix. Utilizaremos el template oficial Docker by Zabbix agent2 para hacer que las cosas queden lo más sencillas posibles. El enlace para descargar el template y los pasos para configurarlo pueden ser encontrados en la página de Integraciones de Zabbix.

Si necesitas una guía visual, te invito a ver mi video sobre este asunto.

Importando el template oficial para Docker

Importando el template oficial para Docker

Ya que usaremos el template oficial Docker by Zabbix agent2, primero necesitamos asegurarnos de que el template está disponible en nuestra instancia Zabbix. El template está disponible para Zabbix en las versiones 5.0, 5.4 y 6.0. Si no consigues encontrar este template en Configuraciones – Templates, puede sr que no lo hayas importado en tu ambiente después de actualizar Zabbix a una de las versiones previamente citadas.

Acuérdate de que Zabbix no modifica ni importa cualquier template durante el proceso de upgrade, por lo que tendremos que importarlo manualmente. Si es este el caso, simplemente descárgalo en la página del git oficial de Zabbix (o a través del enlace en la introducción) e impórtalo a tu instancia Zabbix utilizando el botón “Importar” en la sección Configuraciones – Templates.

Instalando y configurando Zabbix agent2

Antes de configurar nuestro host, tenemos que instalar Zabbix agent2 y configurarlo de acuerdo con las directrices del template. Sigue los pasos en la sección de descargas en la página web de Zabbix e instala el paquete de zabbix-agent2.

Siéntete a gusto para usar cualquier otro método de deployment que quieras (como compilar agent a partir de source files).

Instalar Zabbix agent2 a partir de los paquetes es bien sencillo. Sigue estos pasos:

Instala el repositorio de paquetes Zabbix:

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm

Instala el paquete Zabbix agent2:

dnf install zabbix-agent2

Configura el parámetro Server completándolo con la dirección de tu Zabbix server/proxy:

vi /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=192.168.50.49

Configuración específica para Plugin de Zabbix agent2

Zabbix agent2 establece parámetros de configuración específicos para plugins. En su mayoría son parámetros opcionales relacionados con un plugin específico. Puedes encontrar la lista completa de los parámetros de configuración específicos para plugins en los documentos de Zabbix.

En las nuevas versiones de Zabbix agent2, los parámetros específicos de plugin son definidos en un archivo de configuración de plugins separado, localizado en /etc/zabbix/zabbix_agent2.d/plugins.d/, mientras que en versiones más antiguas son definidos directamente en el archivo de configuración zabbix_agent2.conf.

Para el plugin Docker de Zabbix agent 2, es necesario informar la localización del unix-socket del daemon Docker. Puedes hacerlo especificando el siguiente parámetro de plugin:

### Option: Plugins.Docker.Endpoint
# Docker API endpoint.
#
# Mandatory: no
# Default: unix:///var/run/docker.sock
# Plugins.Docker.Endpoint=unix:///var/run/docker.sock

La ubicación estándar del socket será la correcta para tu ambiente Docker. En este caso, puedes dejar la configuración tal como está.

Cuando los cambios necesarios se hayan realizado en los archivos de configuración del Zabbix agent2, inicia y habilita el agent:

systemctl enable zabbix-agent2 --now

Verifique si Zabbix agent2 está ejecutándose:

tail -f /var/log/zabbix/zabbix_agent2.log

Antes de pasar al frontend de Zabbix, quisiera llamar tu atención para el permiso del archivo socket del Docker. El usuario Zabbix necesita tener acceso al archivo socket del Docker. El usuario Zabbix debe ser incluido en el grupo Docker para resolver el siguiente mensaje de error:

[Docker] cannot fetch data: Get http://1.28/info: dial unix /var/run/docker.sock: connect: permission denied
ZBX_NOTSUPPORTED: Cannot fetch data.

Puedes incluir el usuario Zabbix en el grupo Docker ejecutando el siguiente mando:

usermod -aG docker zabbix

Configurando el host Docker

Configurando el host que representa nuestro ambiente Docker

Después de importar el template, tenemos que crear el host que representará a nuestra instancia Docker. Debes darle al host un nombre e incluirlo en un Grupo de host. Yo lo incluiré en el grupo Linux servers.

Define el template Docker by Zabbix agent 2 para el host. Ya que el template utiliza Zabbix agent 2 para recopilar las métricas, también necesitamos incluir una interfaz del tipo Agent en este host.

La dirección de la interfaz debe señalar la máquina donde se están ejecutando tus contenedores Docker. Termina la configuración del host haciendo clic en el botón “Añadir”.

Docker by Zabbix agent2 template

Ítems estándar del template Docker

El template contiene un conjunto de ítems estándar para métricas generales de la instancia Docker, como el número de imágenes disponibles, información sobre la arquitectura del Docker, número total de contenedores, y más.

Reglas de descubrimiento del template Docker

Además, el template también recopila informaciones específicas de contenedores e imágenes utilizando reglas de descubrimiento de bajo nivel (low-level discovery rules).

Una vez que Zabbix descubre tus contenedores e imágenes, estas reglas de descubrimientos serán utilizadas para crear ítems, triggers, y gráficos a partir de prototipos para cada uno de tus contenedores e imágenes.

De esta forma, podemos monitorear métricas específicas, como la memoria de un contenedor, informaciones de red, estado de un contenedor, y más.

Prototipos de templates Docker para descubrimiento de bajo nivel

Verificando configuraciones del host y template

Para verificar que el agent y el host estén correctamente configurados, podemos utilizar la herramienta de línea de comando zabbix-get para buscar informaciones sobre nuestro agent. Si no tienes zabbix-get instalado, utiliza el siguiente comando en tu Zabbix server o Zabbix proxy:

dnf install zabbix-get

Ahora podemos utilizar zabbix-get para verificar si nuestro agent puede obtener las métricas relativas al Docker. Ejecuta el siguiente mando:

zabbix_get -s docker-host -k docker.info

Utiliza el parámetro -s para especificar el hostname de tu host con el agent, o la dirección IP. El parámetro -k especifica la clave (ítem key) de la métrica que queremos obtener de nuestro agent con zabbix-get.

zabbix_get -s 192.168.50.141 -k docker.info

{"Id":"SJYT:SATE:7XZE:7GEC:XFUD:KZO5:NYFI:L7M5:4RGO:P2KX:QJFD:TAVY","Containers":2,"ContainersRunning":2,"ContainersPaused":0,"ContainersStopped":0,"Images":2,"Driver":"overlay2","MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"KernelMemoryTCP":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":true,"IPv4Forwarding":true,"BridgeNfIptables":true,"BridgeNfIP6tables":true,"Debug":false,"NFd":39,"OomKillDisable":true,"NGoroutines":43,"LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"5.4.17-2136.300.7.el8uek.x86_64","OperatingSystem":"Oracle Linux Server 8.5","OSVersion":"8.5","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","NCPU":1,"MemTotal":1776848896,"DockerRootDir":"/var/lib/docker","Name":"localhost.localdomain","ExperimentalBuild":false,"ServerVersion":"20.10.14","ClusterStore":"","ClusterAdvertise":"","DefaultRuntime":"runc","LiveRestoreEnabled":false,"InitBinary":"docker-init","SecurityOptions":["name=seccomp,profile=default"],"Warnings":null}

Además, también podemos utilizar claves de descubrimiento de bajo nivel – docker.containers.discovery[false] para verificar el resultado del descubrimiento.

zabbix_get -s 192.168.50.141 -k docker.containers.discovery[false]

[{"{#ID}":"a1ad32f5ee680937806bba62a1aa37909a8a6663d8d3268db01edb1ac66a49e2","{#NAME}":"/apache-server"},{"{#ID}":"120d59f3c8b416aaeeba50378dee7ae1eb89cb7ffc6cc75afdfedb9bc8cae12e","{#NAME}":"/mysql-server"}]

Podemos ver que Zabbix descubrirá y comenzará a monitorear dos contenedores – apache-server y mysql-server. Cualquier regla de descubrimiento de bajo nivel o ítem puede ser verificado con zabbix-get.

Template Docker en acción

Ítems descubiertos en nuestro host Docker

Ahora que nuestro host y agent están configurados, aplicamos el template Docker, y verificamos que todo esté funcionando correctamente, debemos ser capaces de visualizar las entidades descubiertas en el frontend.

Métricas de container Docker recopiladas

Además, nuestras métricas deben estar comenzando a llegar. Podemos verificar en la sección Latest data y verificar si realmente han sido recopiladas.

Macros heredadas por el template Docker

Por último, tenemos algunas opciones adicionales para futuras modificaciones del template y del resultado de nuestro descubrimiento de bajo nivel.

Si abres la sección Macros de tu host y seleccionas Macros heredadas y de host, podrás ver que tenemos 4 macros heredadas del template Docker. Estas macros son responsables por filtrar contenedores e imágenes descubiertas. Puedes modificar estos valores a gusto si deseas filtrar el descubrimiento de estas entidades de acuerdo con tus requisitos.

Nota que el ítem de descubrimiento de contenedor tiene un parámetro, que puede ser definido como false en el template:

  • docker.containers.discovery[false] – Descubre tan solo contenedores en ejecución.
  • docker.containers.discovery[true] – Descubre todos los contenedores, independientemente de su estado.

¡Eso es todo! Importamos el template, instalamos y configuramos Zabbix agent2, creamos un host, y aplicamos el template Docker con éxito.

¡Finalmente nuestra instancia Zabbix está monitoreando el ambiente Docker!

Si tienes preguntas o comentarios, siéntete a gusto para dejarnos un mensaje en la sección de comentarios de esta publicación.

 

Subscribe
Notify of
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x