0-Intalación

Vamos a poner en marcha esta poderosa herramienta de monitoreo llamada zabbix
Zabbix es un software de monitoreo de código abierto de clase empresarial que se usa para supervisar el estado y la integridad de redes, servidores, máquinas virtuales, aplicaciones y servicios y mas. Es gratuito, tiene una interfaz web, y utiliza agentes para recopilar datos de los sistemas monitoreados. Zabbix genera alertas y visualizaciones para ayudar a los equipos de TI a reaccionar rápidamente a problemas y platificar la capacidad de su infraestructura
En este ejemplo vamos a utilizar docker-compose para desplegar todo lo que requiere para un correcto funcionamiento.
Configuramos el archivo docker-compose a nuestra medida..
services:
zabbix-server:
image: ${ZABBIX_SERVER_IMAGE:-zabbix/zabbix-server-pgsql:ubuntu-7.2.1}
container_name: server
restart: unless-stopped
ports:
- "10051:10051"
environment:
DB_SERVER_HOST: postgres
DB_SERVER_PORT: 5432
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
depends_on:
- postgres
networks:
- network-zabbix
zabbix-frontend:
image: ${ZABBIX_FRONTEND_IMAGE:-zabbix/zabbix-web-nginx-pgsql:ubuntu-7.2.1}
restart: unless-stopped
container_name: frontend
ports:
- "8080:8080"
- "8443:8443"
environment:
DB_SERVER_HOST: postgres
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
PHP_TZ: ${TZ}
ZBX_SERVER_HOST: zabbix-server
ZBX_SERVER_PORT: 10051
depends_on:
- zabbix-server
networks:
- network-zabbix
zabbix-agent:
image: ${ZABBIX_AGENT_IMAGE:-zabbix/zabbix-agent:ubuntu-7.2.1}
container_name: zabbix-agent
restart: unless-stopped
ports:
- "10050:10050"
environment:
ZBX_ACTIVE_ALLOW: "false"
TZ: ${TZ}
ZBX_SERVER_HOST: zabbix-server
ZBX_SERVER_PORT: 10051
ZBX_HOSTNAME: zabbix-agent
ZBX_HOSTNAMEITEM: system.hostname
depends_on:
- zabbix-server
networks:
- network-zabbix
postgres:
image: ${POSTGRES_IMAGE:-postgres:14}
# command: -c ssl=on -c ssl_cert_file=/run/secrets/server-cert.pem -c ssl_key_file=/run/secrets/server-key.pem -c ssl_ca_file=/run/secrets/root-ca.pem
container_name: postgres
restart: unless-stopped
ports:
- "5432:5432"
volumes:
- postgres:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
PG_DATA: /var/lib/postgresql/data/pgdata
networks:
- network-zabbix
grafana:
image: ${GRAFANA_IMAGE:-grafana/grafana:10.2.0}
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_USER: ${GRAFANA_USER:-admin}
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_SECRET:-pass}
GF_INSTALL_PLUGINS: alexanderzobnin-zabbix-app
TZ: ${TZ}
user: "472"
volumes:
- grafana:/var/lib/grafana
- ./grafana/grafana.ini:/etc/grafana/grafana.ini
- ./grafana/provisioning:/etc/grafana/provisioning
depends_on:
- zabbix-frontend
networks:
- network-zabbix
volumes:
postgres: {}
grafana: {}
networks:
network-zabbix:
driver: bridge
Este archivo docker-compose.yml despliega un stack completo de monitorización con zabbix, postgresql y grafana de manera automatizada.
-Postgres actúa como base de datos, almacenando toda la información de métricas y configuraciones.
-Zabbix server es el núcleo del sstema, encargado de recolectar y procesar los datos provenientes de los agentes.
-Zabbix agent se ejecuta en un contenedor separado para reportar métricas del propio sistema docker(útil como ejemplo de monitoreo)
-Grafana se integra con zabbix para ofrecer paneles avanzados, visualizaciones dinámicas y dashboards personalizables.
Toda la infraestructura se conecta en una red interna de docker(network-zabbix), con volúmenes persistentes para no perder datos entre reinicios. Además, se parametrizan credenciales y configuraciones clave a través de variables de entorno, lo que permite flexibilidad y facilidad de despliegue
y creamos un archivo .env con la definición de las variables que hemos declarado en el archivo, por temas de seguridad y no hardcodear todo en el mismo archivo
cat .env | cut -d "=" -f 1
# Images
ZABBIX_SERVER_IMAGE=""
ZABBIX_FRONTEND_IMAGE=""
ZABBIX_AGENT_IMAGE=""
POSTGRES_IMAGE=""
GRAFANA_IMAGE=""
# Settings
POSTGRES_USER=""
POSTGRES_PASSWORD=""
POSTGRES_DB=""
TZ=""
una vez hecho esto iniciamos el despliegue y esperamos a que se descargen las imagenes
usamos la herramienta docker-compose y le pasamos los parametro "up" para que inicie y el "-d" detached mode que sería para que se ejecute el servicio en segundo plano
╰─➤ docker-compose up -d 130 ↵
Creating network "zabbix-docker_network-zabbix" with driver "bridge"
Creating volume "zabbix-docker_postgres" with default driver
Creating volume "zabbix-docker_grafana" with default driver
Creating postgres ... done
Creating server ... done
Creating frontend ... done
Creating zabbix-agent ... done
Creating grafana ... done
╭─
╰─➤ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------------------
frontend docker-entrypoint.sh Up 0.0.0.0:7070->8080/tcp,:::7070->8080/tcp, 0.0.0.0:8443->8443/tcp,:::8443->8443/tcp
grafana /run.sh Up 0.0.0.0:3000->3000/tcp,:::3000->3000/tcp
postgres docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp,:::5432->5432/tcp
server /usr/bin/docker-entrypoint ... Up 0.0.0.0:10051->10051/tcp,:::10051->10051/tcp
zabbix-agent /usr/bin/docker-entrypoint ... Up 0.0.0.0:10050->10050/tcp,:::10050->10050/tcp
sin ningún error aparente, ingresamos al navegador y vemos que sucede:

ingresamos las credenciales que vienen por defecto y ya estamos en el dashboard

y grafana:

excelente, con esto ya tenemos todos los servicios arriba y funcionando.