Zabbix in een Docker-container op je MacBook

Ingediend door Dirk Hornstra op 04-may-2021 22:33

Eerst even de korte uitleg: met Zabbix kun je websites monitoren. Met Docker kun je software draaien zonder dit op je computer te installeren. Het is vergelijkbaar met een VM (virtuele machine), alleen is het minder zwaar/geheugen-intensief. En als er "iets fout gaat", dan kun je het image-bestand/container verwijderen en opnieuw installeren. Dus je zit niet met een brakke Windows-installatie/vastlopende Mac of Linux omdat software je register kapot gemaakt heeft of iets dergelijks. Een perfecte manier om bijvoorbeeld je eigen Wordpress-website op je eigen pc te testen met een nieuwe PHP versie e.d.

Ik wilde Zabbix op mijn VPS installeren, omdat daar Docker op beschikbaar is, wilde ik het meteen op die manier doen. Maar daar liep ik tegen problemen aan. De standaard mySQL (database) die daarop draait is MariaDB en daar kun je volgens mij niet "remote" mee verbinden. Of je moet hacks doorvoeren, maar dat gaan we niet doen bij een soort "productie-omgeving". En ook niet bij een development-omgeving, want zodra er iets extra's open staat, komt er altijd iemand voorbij die daar misbruik van gaat maken.

Vervolgens de mysql docker-image geïnstalleerd en gestart. Daar verbinding mee maken wilde ook niet goed lukken, maar dat was wel logisch, poort 3306 wordt al door de standaard mySQL-instantie op mijn VPS gebruikt, dus de input 3306 moet je expliciet naar een andere poort naar buiten sturen 71337 bijvoorbeeld. Maar dan moet je die poort dus ook in je firewall-rules toevoegen, anders blokkeert die weer het verkeer. Ik had toen eindelijk vanaf mijn eigen pc verbinding met die database (mySQL workbench van Oracle gebruikt: link). Stap 1 is klaar.

Vervolgens de Zabbix Server docker-image installeren en via de configuratie-waardes naar de mysql docker-image verbinding laten maken met de database. Na de eerste foutmelding dat er iets met een key en lengte was, bleek dat je de database aan moest maken met utf-8 en utf8-bin. Nadat ik dat gedaan had liep het script wat verder door, maar kwam de foutmelding dat de user-tabel leeg was en dat de "roles"-tabel al bestond. En nu dan?

Moraal van het verhaal, ga geen dingen zelf bedenken, maar volg alle stappen zoals die in de documentatie beschreven zijn. Dus op mijn MacBook had ik al Docker Desktop geïnstalleerd: link en ben daar eerst maar eens Zabbix mee gaan installeren. Eerst op mijn "normale" laptop, zonder firewalls e.d. En hoewel Zabbix al een nieuwere versie heeft, ga ik nu exact eerst de oudere versie-stappen volgen: link.

Ik begin met example 1. Op mijn MacBook ga ik eerst naar de Terminal (Programma's - Hulpprogramma's - Terminal) en voer daar in:

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

Duurt even, daarna krijg je een lange tekst met cijfers en letters te zien. Het zal wel goed zijn.

Volgende statement:

-- DIT WERKT NIET, KIJK VERDEROP IN DIT BLOG HOE IK HET OPGELOST HEB

docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      -d mysql:8.0 \
      --restart unless-stopped \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

Ik had lokaal nog geen mysql:8, dus die wordt automatisch gedownload. Installatie-stappen worden uitgevoerd en uiteindelijk weer een tekstregel met cijfers en letters. Ook dit lijkt goed te gaan.

Volgende stap is Zabbix-server opstarten:

docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10051:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-5.2-latest

Gelijksoortige output als mysql, dus ook dit lijkt goed te gaan. Dan de laatste stap, het installeren en opstarten van het frond-end deel, zodat je in de browser de Zabbix-interface door kunt lopen:

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="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      -p 80:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-5.2-latest

Ook deze installatie gaat goed. Maar het werkt niet. In Docker Desktop kun je zien wat wel en niet draait: mijn mysql-server draait niet. Je kunt daar ook de logs bekijken. De uiteindelijke ERROR komt door mysql.component die niet bestaat. Ik heb een DELETE gedaan (in Docker Desktop).


docker run --name mysql-server -t \
-p 3306:3306 \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-d mysql:8.0 \
--character-set-server=utf8 \
--collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password

Vervolgens mij bovenstaande statements uitgevoerd. Expliciet de poort (3306). Maar ik zie ook in de logs dat --restart niet begrepen wordt. Dit statement wordt hier niet ondersteund? Dus maar verwijderd. En na het starten blijft de mysql-container actief. Dat geeft hoop. Vervolgens op het linkje bij "zabbix-web-nginx-mysql" geklikt (open in browser) en YES: ik zie het inlogscherm! En daar kun je met de standaard Admin/zabbix inloggen (en meteen even via menu-item User settings je wachtwoord aanpassen natuurlijk). En ik zie dat er 1 probleem is: er is geen zabbix-agent die wat doet. Die zie ik ook niet terug in onze statements. 

Die heb ik eerst maar op "opgelost" gezet. Want die agent checkt je schijven e.d., maar ik wil eerst alleen maar bepaalde websites monitoren, daarvoor heb ik deze niet nodig.

Dit was een kwestie van kopiëren - plakken en gaan met die banaan. Op een VPS zit je echter met wat andere beperkingen, maar daar kom ik in een ander blog op terug.

Nu ik de boel opnieuw opstart ben ik verrast: het gewijzigde wachtwoord van de Admin-user is nog steeds correct. Ik had verwacht dat na een reboot dat weer ingesteld zou zijn op het originele wachtwoord. De log-data is namelijk wel weg. In ieder geval, een mooie manier om software uit te proberen zonder je systeem te vervuilen!