0-Intalación

Pasted image 20250824021244.png

Vamos a poner en marcha esta poderosa herramienta de monitoreo llamada zabbix

Que es ?

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:
Pasted image 20250824020417.png
ingresamos las credenciales que vienen por defecto y ya estamos en el dashboard
Pasted image 20250824020825.png

y grafana:
Pasted image 20250824020925.png
excelente, con esto ya tenemos todos los servicios arriba y funcionando.