Zabbix: Primeros pasos

Buenas a todos, en este post vamos a ver como monitorizar nuestra infraestructura mediante la herramienta Zabbix. Y como no podría ser de otro modo, montaremos nuestro servidor zabbix en docker con la ayuda de docker-compose.

El despliegue de Zabbix es muy sencillo, solo hace falta crear un docker-compose.yml configurando los parámetros necesarios. En este caso lo vamos a levantar detrás de Traefik, un proxy web del que ya hemos hablado anteriormente. En caso de que no se quiera levantar con traefik, habría que mapear los puertos.

Despliegue de Zabbix

Bueno vamos al lio, como hemos dicho, hay que crear el docker-compose.yml

vim docker-compose.yml

Y ahora solo queda pegar lo siguiente, cambiando lo que se necesite. Lo que va a levantar es: un servidor de zabbix, un servidor web, un servidor de base de datos y un agente.

version: '3'

services:
  zabbix-server:
    image: zabbix/zabbix-server-mysql:alpine-latest
    restart: unless-stopped
    environment:
      - DB_SERVER_HOST=zabbix-db
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=wqefW34
      - MYSQL_ROOT_PASSWORD=wqefW34
      - MYSQL_DATABASE=zabbix
      - ZBX_STARTJAVAPOLLERS=5
      - TZ=Europe/Madrid
    volumes:
      - zabbix_externalscripts:/usr/lib/zabbix/externalscripts:ro
      - zabbix_alertscripts:/usr/lib/zabbix/alertscripts:ro
      - zabbix_modules:/var/lib/zabbix/modules:ro
      - zabbix_enc:/var/lib/zabbix/enc:ro
      - zabbix_ssh_keys:/var/lib/zabbix/ssh_keys:ro
      - zabbix_mibs:/var/lib/zabbix/mibs:ro
      - zabbix_snmptraps:/var/lib/zabbix/snmptraps:ro
    networks:
      - zabbix_backend
    ports:
      - "10051:10051"
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000
      mem_limit: 512m
    user: root
    depends_on:
      - zabbix-db
    labels:
      - "traefik.enable=false"
      - "com.zabbix.os: 'alpine'"
      - "com.zabbix.dbtype: 'mysql'"
      - "com.zabbix.component: 'zabbix-server'"
  zabbix-snmptraps:
    image: zabbix/zabbix-snmptraps:ubuntu-latest
    ports:
      - "162:162/udp"
    volumes:
      - zabbix_snmptraps:/var/lib/zabbix/snmptraps:rw
    user: root
    networks:
      - zabbix_backend
    labels:
      - "traefik.enable=false"
      - "com.zabbix.component: 'snmptraps'"
      - "com.zabbix.os: 'ubuntu'"
  zabbix-web:
    image: zabbix/zabbix-web-apache-mysql:alpine-latest
    restart: unless-stopped
    environment:
      - DB_SERVER_HOST=zabbix-db
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=wqefW34
      - MYSQL_ROOT_PASSWORD=wqefW34
      - MYSQL_DATABASE=zabbix
      - ZBX_SERVER_NAME=monitor.example.com
      - PHP_TZ=Europe/Madrid
      - TZ=Europe/Madrid
    ulimits:
    mem_limit: 512m 
    networks:
      - zabbix_backend
      - traefik
    labels:
      - "traefik.backend=zabbix"
      - "traefik.frontend.rule=Host:monitor.example.com"
      - "traefik.docker.network=traefik"
      - "com.zabbix.os: 'alpine'"
      - "com.zabbix.dbtype: 'mysql'"
      - "com.zabbix.component: 'zabbix-we
    depends_on:
      - zabbix-server
      - zabbix-db

  zabbix-agent:
    image: digiapulssi/docker-zabbix-agent
    restart: unless-stopped
    environment:
      - TZ=Europe/Madrid
      - ZABBIX_SERVER=zabbix-server
      - HOST=monitor.example.com
    volumes:
      - zabbix_agent_etc:/etc/zabbix/zabbix_agentd.d
      - zabbix_agent_var:/var/lib/zabbix
    privileged: true
    pid: "host
    networks:
      - zabbix_backend
    labels:
      - "traefik.enable=false"
      - "com.zabbix.os: 'alpine'"
      - "com.zabbix.component: 'zabbix-agent'"
  zabbix-db:
    image: mariadb
    restart: unless-stopped
    volumes:
      - zabbix_db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=wqefW34
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=wqefW34
      - TZ=Europe/Madrid
    networks:
      - zabbix_backend
    labels:
      - "traefik.enable=false"
      - "com.zabbix.dbtype: 'mysql'"
      - "com.zabbix.component: 'zabbix-db'"

networks:
  zabbix_backend:
  traefik:
    external:
      name: traefik

volumes:
  zabbix_agent_etc:
  zabbix_agent_var:
  zabbix_externalscripts:
  zabbix_alertscripts:
  zabbix_modules:
  zabbix_enc:
  zabbix_ssh_keys:
  zabbix_mibs:
  zabbix_snmptraps:
  zabbix_db:

Una vez creado el fichero, solo queda iniciarlo

docker-compose up -d

Una vez que se descargue las imágenes, se levantará todo el stack. Y para acceder a el, hay que hacerlo mediante el navegador. En el caso de que traefik esté configurado para levantar certificados de lets-encrpyt, se podrá acceder mediante https y si no, mediante http
El usuario por defecto es: Admin/zabbix

https://monitor.example.com

Crear un Host

Por último, queda añadir el servidor mediante el agente que hemos desplegado. Para esto, hay que ir a:

Configuration --> Hosts --> Create Host

Y crear el host

Una vez creado, solo queda añadir las plantillas que se van a querer aplicar

Con esto ya tendríamos el primer host monitorizado. En los siguientes post, seguiré avanzando con esta herramienta explicando nuevas funcionalidades como monitorizar webs, contenedores de docker, crear mapas…

Si se quiere buscar plugins o checks, se pueden buscar en: https://share.zabbix.com/

 

 

One comment

  1. Estimado, muchisimas gracias por estos tutoriales, son muy practicos y utiles. ¿Sabes si se puede configurar las alertas de zabbix por mail con estos contenedores? He configurado una instancia pero no he tenido suerte en esa parte. Saludos y muchas gracias!!!

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *