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