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/

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!!!