Zabbix 6 en Docker

Posted by David Guillermo on Thursday, June 9, 2022

Para hoy traemos una receta despúes de algunos meses parados, de nada novedoso pero útil para correr Zabbix 6 en Docker para facilitarnos un poco algunas cosas, de gestión y administración de dispositivos…

En la propia web de zabbix tenemos como hacerlo y el enalce es, este. Además dejaré mis ejemplos. Para mi es un viejo conocido al igual que Nagios, pero está vez me volví a decantar por Zabbix no por nada especial si no que ta tenía los agents configurado de una instalación anterior, que deje de usar porqué la máquina murio no por otra cosa y desde entonces tenía pendiente volver añadir algo que me ayudará a gestionar y controlar los equipos.

Doy por sentado que todos conocemos Docker, para que vale y lo que es… No voy a explicar nada incluso tengo una red creada ya para esos casos especificos y poder trabajar directamente contra ellos.

Lo primero será crear unas carpetas para guardar la información y que sean los volumenes.

$ mkdir ~/zabbix-data
$ mkdir ~/zabbix-data/alertscripts
$ mkdir ~/zabbix-data/externalscripts
$ mkdir ~/zabbix-data/export
$ mkdir ~/zabbix-data/modules
$ mkdir ~/zabbix-data/enc
$ mkdir ~/zabbix-data/ssh_keys
$ mkdir ~/zabbix-data/mibs
$ mkdir ~/zabbix-data/snmptraps
$ mkdir -p ~/zabbix-nginx/nginx
$ mkdir ~/zabbix-nginx/modules
$ mkdir ~/zabbix-mysql

Ahora será momento, de ejecutar en la consola cada una de las instancias que crearemos, de la siguiente manera.

$ docker run --name mysql-server -t
      -e MYSQL_DATABASE="zabbix"
      -e MYSQL_USER="zabbix"
      -e MYSQL_PASSWORD="mY_Passw0rD8-]"
      -e MYSQL_ROOT_PASSWORD="|mY_sUp3r-Passw0r-8-]"
      --network=mynetwork
      -d mysql:8.0
      --character-set-server=utf8 --collation-server=utf8_bin
      --default-authentication-plugin=mysql_native_password

$ docker run --name zabbix-java-gateway -t
      --network=mynetwork
      --restart unless-stopped
      -d ~/zabbix-data/zabbix-java-gateway:alpine-6.0-latest

$ docker run --name zabbix-server-mysql -t
      -e DB_SERVER_HOST="mysql-server"
      -e MYSQL_DATABASE="zabbix"
      -e MYSQL_USER="zabbix"
      -e MYSQL_PASSWORD="mY_Passw0rD8-]"
      -e MYSQL_ROOT_PASSWORD="|mY_sUp3r-Passw0r-8-]"
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway"
      --network=mynetwork
      -p 10051:10051
      --restart unless-stopped
      -d ~/zabbix-mysql/zabbix-server-mysql:alpine-6.0-latest

$ docker run --name zabbix-web-nginx-mysql -t
      -e ZBX_SERVER_HOST="zabbix-server-mysql"
      -e DB_SERVER_HOST="mysql-server"
      -e MYSQL_DATABASE="zabbix"
      -e MYSQL_USER="zabbix"
      -e MYSQL_PASSWORD="mY_Passw0rD8-]"
      -e MYSQL_ROOT_PASSWORD="|mY_sUp3r-Passw0r-8-]"
      --network=mynetwork
      -p 80:8080
      --restart unless-stopped
      -d ~/zabbix-data/zabbix-web-nginx-mysql:alpine-6.0-latest

$ docker run --name zabbix-agent
      -e ZBX_HOSTNAME="zabbix-server-mysql"
      -e ZBX_SERVER_HOST="zabbix-server-mysql"
      --restart=always
      --network=grupo5
      -d zabbix/zabbix-agent:alpine-6.0-latest

Es probable que en la primera ejecución nos falle, con el siguiente mensaje: Unable to determine current Zabbix database version: the table “dbversion” was not found

Sï, nos da este error, lo que tendremos que hacer es, conectarnos al container zabbix-server-mysql de la siguiente manera

$ docker ps # Y ver el ID de zabbix-server-mysql 
$ docker exec -i -t idcontainer /bin/bash

$ zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz  | mysql -uzabbix -p zabbix

Una vez metamos la contraseña, podremos recargar la página web y acceder con los datos por defecto de Zabbix que son, usuario admin, contraseña zabbix.

Y ahora nos queda en los clientes remotos instalar el zabbix-agent y modificar en el /etc/zabbix/zabbix_agentd.conf modificar las siguientes opciones. ServerActive=IP y Hostname de aquí en adelante sólo nos quedará añadirlos al Servidor Zabbix para poder empezar a comprobar dichos equipos.