Hi, posting this in case it helps anyone else running Zabbix on small ARM64 SBCs.
Hardware / OS
A few things that tripped me up and might save you time:
Hardware / OS
- Board: Arduino UNO Q, 4GB RAM variant https://www.arduino.cc/product-uno-q/
- OS: Debian (arm64), the Linux side of the board
- Root filesystem: ~9.7 GB
- Zabbix 7.4 (stable), deployed via the official zabbix-docker compose stack
- Components: zabbix-server-mysql, zabbix-web-nginx-mysql, MySQL 8.4, zabbix-agent
- DB and history/trends live in Docker volumes under /var/lib/docker
A few things that tripped me up and might save you time:
- Disk fills faster than you'd expect on a ~10 GB root.
The Docker data directory (/var/lib/docker) is where everything accumulates. Images, old layers, and the growing MySQL volume. After about a week of collecting metrics, I hit "FS space critically low (>90%)". Because the template discovers bind-mounted files (/etc/hosts, /etc/hostname, /etc/resolv.conf, /etc/localtime) separately, a single full root shows up as four separate alerts. It's one problem reported four times.- docker image prune -a + docker container prune + docker builder prune reclaimed a couple of GB of unused images/layers (in my case mostly unrelated leftover tooling, not Zabbix).
- Do NOT run docker system prune -a --volumes blindly; that can wipe your Zabbix DB volume if a container is stopped. Confirm your DB container is up in docker ps first.
- Tighten Housekeeping early.
On a small disk, the MySQL volume is what slowly refills root. Administration → Housekeeping, shorten History (7d) and Trends (30–90d), and tick the "Override item history/trend period" boxes; without the override, per-item template settings win and your global values do nothing. - Two bundled containers crash-loop if you don't need them.
The default compose ships zabbix-java-gateway and zabbix-snmptraps. On my hardened setup both exited (1) on a loop with "Read-only file system" (they try to write config/trap files at startup). Unless you actually do JMX monitoring or receive SNMP traps, just docker compose stop zabbix-java-gateway zabbix-snmptraps or remove the service blocks from the compose file for a permanent fix. - Agent "not available" from a hostname mismatch.
The bundled agent announced itself with its container ID instead of the frontend host name, so the server logged host [<id>] not found and the "Zabbix server: agent not available" alert never cleared. Fix: set ZBX_HOSTNAME on the zabbix-agent service to exactly match the frontend host name (default is “Zabbix server”, capital Z, one space), then docker compose up -d zabbix-agent. - CPU/SoC temperature alerts are probably noise.
The board is passively cooled and touches ~60°C under brief load, then drops back on its own. The generic Linux template’s trigger assumes server-grade cooling. Either accept it as is or raise the trigger threshold to ~75–80°C.