Created by: Holger Kuehn aka Lintuxer
Why Use ZimaOS as Your Monitoring Platform?
ZimaOS devices (ZimaBoard, ZimaCube) are ideal candidates for running Zabbix monitoring:
| Advantage | Description |
|---|---|
| Always-on | Low power consumption, designed for 24/7 operation |
| Compact | Small form factor, fits anywhere in your network |
| Docker-native | Perfect for containerized services like Zabbix |
| Cost-effective | No need for dedicated server hardware |
| Silent | Fanless or quiet operation |
Instead of dedicating an expensive server to monitoring, your ZimaOS device can serve as a central monitoring hub that watches over:
- Windows Servers – Domain controllers, file servers, application servers
- Linux Servers – Web servers, databases, Docker hosts
- Network Devices – Switches, routers, access points (via SNMP)
- IoT & Smart Home – Any device with network connectivity
- The ZimaOS device itself – Full self-monitoring included
Overview
This guide covers:
- Deploying Zabbix Server on ZimaOS as your central monitoring platform
- Network configuration for Docker container communication
- Monitoring the ZimaOS host itself
- Adding Windows Servers to monitoring (including VLAN-isolated environments)
- Adding Linux servers and other network devices
- Backup, restore, and keeping Zabbix updated
Version Information
- Zabbix Version: 7.0 LTS
- Guide Version: 1.8
- Last Updated: January 2026
- Tested On: ZimaOS (Buildroot-based)
Use Case Example
┌─────────────────────────────┐ |
Active Mode for VLAN-isolated networks: Agents connect outbound to Zabbix – no inbound firewall rules needed in your secured VLANs.
Prerequisites
- ZimaOS installed and running
- SSH access to your ZimaOS device
- Basic understanding of Docker concepts
- Network access between monitoring targets and Zabbix server
Why Docker Installation for ZimaOS?
There are two main ways to install Zabbix:
| Method | Description | Best For |
|---|---|---|
| Traditional | Install packages via apt/yum directly on OS | Debian, Ubuntu, RHEL servers |
| Docker | Run services as containers | ZimaOS, container-first environments |
For ZimaOS, Docker is the only practical option because:
- No package manager – ZimaOS uses Buildroot, which doesn’t include apt, yum, or similar tools
- Immutable base system – ZimaOS is designed to remain unchanged; apps run as containers
- Easy updates – Pull new images instead of complex package upgrades
- Clean separation – Each service isolated, easy to backup/restore via volumes
- Native to ZimaOS – CasaOS/ZimaOS is built around Docker
Why the default “Zabbix server” host doesn’t work:
Traditional Zabbix installations run the server and agent on the same machine, so 127.0.0.1:10050 reaches the local agent. In Docker, each service runs in its own isolated container with its own network namespace. The server container’s 127.0.0.1 points to itself (where no agent runs), not to the agent container. That’s why we delete this default host and create a new one pointing to zabbix-agent via Docker DNS.
Architecture
┌─────────────────────────────────────────────────────┐ |
Part 1: Zabbix Server Installation
Step 1: Create Docker Network
ZimaOS uses the default Docker bridge network which does not support DNS resolution between containers. You must create a custom network.
sudo docker network create zabbix-net |
Step 2: Deploy PostgreSQL Database
sudo docker run -d \ |
Important: The --network-alias postgres is critical - other containers will use this hostname to connect.
Wait for PostgreSQL to initialize:
# Wait 15 seconds for database initialization |
You should see: database system is ready to accept connections
Step 3: Deploy Zabbix Server
sudo docker run -d \ |
Wait for Zabbix Server to initialize:
# Wait 10 seconds for server initialization |
Step 4: Deploy Zabbix Web Interface
sudo docker run -d \ |
Step 5: Verify Installation
Check all containers are running:
sudo docker ps | grep zabbix |
Check network connectivity:
sudo docker network inspect zabbix-net --format '{{range .Containers}}{{.Name}} {{end}}' |
Expected output: zabbix-postgres zabbix-server zabbix-web
Step 6: Access Web Interface
- Open browser:
http://<zimaos-ip>:8080 - Login with default credentials:
- Username: Admin
- Password: zabbix
- Change the password immediately!
Verification Checklist
In the Zabbix dashboard, verify:
- “Zabbix server is running” shows Yes
- Server version displays correctly
Part 2: Monitoring ZimaOS Host
Since ZimaOS is Buildroot-based (no apt/package manager), the Zabbix agent runs as a container. This section covers comprehensive host monitoring including system metrics and Docker container monitoring.
Why Containerized Agent?
ZimaOS uses Buildroot which provides a minimal Linux environment without traditional package managers like apt or yum. The containerized Zabbix Agent 2 provides:
- Full system monitoring via mounted host filesystem
- Docker container monitoring via socket access
- No modifications to the base ZimaOS system
- Easy updates by pulling new container images
Step 1: Deploy Zabbix Agent Container
sudo docker run -d \ |
Explanation of parameters:
| Parameter | Purpose |
|---|---|
--network zabbix-net |
Same network as Zabbix server for communication |
--network-alias zabbix-agent |
DNS name for the agent container |
--privileged |
Required for full system access |
--pid=host |
Access to host process information |
--user root |
Required for Docker socket access |
-v /:/rootfs:ro |
Mount entire host filesystem (read-only) |
-v /var/run/docker.sock |
Docker API access for container monitoring |
-v /proc:/host/proc:ro |
Host process information |
-v /sys:/host/sys:ro |
Host system information |
ZBX_HOSTNAME |
Must match exactly with host name in Zabbix UI |
ZBX_SERVER_HOST |
Zabbix server hostname (uses Docker DNS) |
⚠️ Note: The
--user rootflag and Docker socket without:roare required for Docker monitoring to work. Without these, you’ll get “permission denied” errors for Docker metrics.
Step 2: Verify Agent is Running
# Check container status |
Expected log output:
Starting Zabbix Agent 2 [ZimaOS]. Zabbix 7.0.x |
Step 3: Add ZimaOS Host in Zabbix UI
Navigate to: Data collection → Hosts → Create host
Host Tab:
- Host name:
ZimaOS(must match ZBX_HOSTNAME exactly!) - Visible name:
ZimaOS Server(optional, for display) - Host groups: Click Select → Choose “Linux servers” or create new
- Interfaces: Click Add → Agent
- Type: Agent
- IP address:
127.0.0.1(placeholder, required but not used) - DNS name:
zabbix-agent - Connect to: Click on DNS button (must be highlighted/active!)
- Port:
10050
⚠️ Important: The “DNS” button must be actively selected (highlighted). If “IP” is selected, the agent won’t be reachable!
- Host name:
Templates Tab:
Click Select and add these templates:Linux by Zabbix agent- System monitoringDocker by Zabbix agent 2- Container monitoring
Click Add
Step 4: Verify Data Collection
After adding the host, wait 1-2 minutes then verify:
Check host availability:
- Data collection → Hosts
- Look for green ZBX icon in Availability column
View collected data:
- Monitoring → Hosts → ZimaOS → Latest data
- You should see metrics populating
Step 5: Remove Default “Zabbix server” Host
Zabbix comes with a pre-configured “Zabbix server” host that tries to monitor itself on 127.0.0.1:10050. Since no agent runs inside the server container, this will always show as unavailable.
Recommendation: Delete this host to avoid confusion.
- Data collection → Hosts
- Check the box next to “Zabbix server”
- Click Delete at the bottom
- Confirm deletion
Note: This only removes the monitoring entry, not the actual Zabbix server! Your Zabbix installation will continue to work normally.
Available Metrics
System Metrics (Linux by Zabbix agent)
| Category | Metrics |
|---|---|
| CPU | Utilization, load average, context switches, interrupts |
| Memory | Total, available, used, cached, buffers, swap |
| Disk | Space used/free per mount, I/O operations, read/write rates |
| Network | Traffic in/out per interface, packets, errors |
| System | Uptime, boot time, number of processes, logged in users |
| File Systems | Inode usage, mount point status |
Docker Metrics (Docker by Zabbix agent 2)
| Category | Metrics |
|---|---|
| Containers | Running, stopped, total count |
| Per Container | CPU %, memory usage, network I/O, status |
| Images | Total images, size |
| Volumes | Volume count and usage |
Step 6: Customize Monitoring (Optional)
Add Custom Items
You can monitor ZimaOS-specific items. Example - monitor CasaOS app status:
- Data collection → Hosts → ZimaOS → Items → Create item
- Configure:
- Name:
CasaOS Service Status - Type: Zabbix agent
- Key:
system.run["docker ps --filter name=casaos --format '{{.Status}}'"] - Type of information: Text
- Name:
Create Custom Dashboard
- Dashboards → Create dashboard
- Add widgets:
- Graph - CPU/Memory usage over time
- Problems - Current alerts
- Host availability - ZimaOS status
- Data overview - Key metrics at a glance
Troubleshooting ZimaOS Agent
Problem: Agent container not starting
- Check logs:
sudo docker logs zabbix-agent |
Common causes:
Network
zabbix-netdoesn’t existPort conflict on 10050
Problem: No data in Zabbix UI
- Verify network connectivity:
# From agent container, test connection to server |
- Check if agent is in correct network:
sudo docker network inspect zabbix-net --format '{{range .Containers}}{{.Name}} {{end}}'
Should include: zabbix-agent
Problem: “Get value from agent failed: cannot connect”
- Solution: Ensure the agent has the network alias:
sudo docker network disconnect zabbix-net zabbix-agent |
Problem: Docker metrics not appearing
- Verify Docker socket access:
sudo docker exec zabbix-agent ls -la /var/run/docker.sock |
Test Docker discovery:
sudo docker exec zabbix-agent zabbix_agent2 -t docker.containers.discovery
Monitoring Multiple ZimaOS Devices
If you have multiple ZimaOS devices (e.g., ZimaBoard, ZimaCube), deploy an agent on each:
On second device:
sudo docker run -d \
--name zabbix-agent \
--privileged \
--pid=host \
--user root \
-e ZBX_HOSTNAME="ZimaCube" \
-e ZBX_SERVER_HOST="<zabbix-server-ip>" \
-e ZBX_ACTIVESERVERS="<zabbix-server-ip>:10051" \
-v /:/rootfs:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-p 10050:10050 \
--restart unless-stopped \
zabbix/zabbix-agent2:alpine-7.0-latestNote: For remote ZimaOS devices, use
ZBX_ACTIVESERVERSfor Active Mode if they’re in different VLANs (see Windows Server section for VLAN considerations).
Then add each device as a separate host in Zabbix UI with matching hostname.
Part 3: Monitoring Windows Servers
Scenario: VLAN-Isolated Windows Server
For environments with VLAN isolation where the Zabbix server cannot initiate connections to monitored hosts, use Active Mode. The Windows agent initiates the connection outbound.
Firewall Requirements
Allow the following traffic:
- From: Windows Server VLAN
- To: ZimaOS IP, Port 10051/TCP
- Direction: Outbound from Windows perspective
Windows Agent Installation
Download Zabbix Agent from: https://www.zabbix.com/download_agents
- Select: Windows → MSI package → amd64
Run installer with these settings:
- Host name:
WindowsServer01(use a descriptive name) - Zabbix server IP/DNS:
<zimaos-ip>(e.g., 192.168.0.225) - Agent listen port:
10050 - Server or Proxy for active checks:
<zimaos-ip>:10051
- Host name:
Verify service is running:
Get-Service *zabbix*
Test connectivity:
Test-NetConnection -ComputerName <zimaos-ip> -Port 10051
Expected:
TcpTestSucceeded: TrueCheck agent logs:
Get-Content "C:\Program Files\Zabbix Agent\zabbix_agentd.log" -Tail 20
Look for:
Active check configuration update from [<ip>:10051] is working again
Add Windows Host in Zabbix UI
- Navigate to: Data collection → Hosts → Create host
- Configure:
- Host name:
WindowsServer01(must match agent config EXACTLY - case sensitive!) - Host groups: Select or create “Windows servers”
- Templates:
Windows by Zabbix agent active - Interfaces: Leave empty (Active Mode doesn’t need interface definition)
- Host name:
- Click Add
Troubleshooting Windows Agent
Problem: host [HostName] not found in agent log
Solution: The hostname in the agent configuration must match EXACTLY (case-sensitive) with the host name configured in Zabbix UI.
Part 4: Troubleshooting
Container Communication Issues
Symptom: PostgreSQL server is not available. Waiting 5 seconds...
Cause: Containers are in the default bridge network which lacks DNS resolution.
Solution:
# Check current network |
Zabbix Server Not Running
Symptom: Dashboard shows “Zabbix server is running: No”
Solution: Add network alias for zabbix-server:
sudo docker network disconnect zabbix-net zabbix-server |
Agent Not Connecting
Checklist:
- Hostname matches exactly (case-sensitive)
- Network connectivity exists (Test-NetConnection)
- Firewall allows traffic on port 10051
- Agent service is running
- Correct template selected (active vs. passive)
Part 5: Post-Installation Tasks
Recommended Initial Configuration
Change admin password
- User settings → Password
Create host groups
- Data collection → Host groups → Create host group
- Examples: “Windows servers”, “Linux servers”, “Network devices”
Configure alerting
- Alerts → Media types (Email, Telegram, etc.)
- Alerts → Actions → Create action
Explore built-in templates
- Data collection → Templates
- Available for: Docker, VMware, SNMP devices, databases, etc.
Useful Navigation
| Task | Location |
|---|---|
| View all metrics | Monitoring → Latest data |
| See graphs | Monitoring → Hosts → [Host] → Graphs |
| Current problems | Monitoring → Problems |
| Configure alerts | Alerts → Actions |
| Add hosts | Data collection → Hosts |
| Manage templates | Data collection → Templates |
Part 6: Backup & Restore
What to Backup
| Component | Location | Contains |
|---|---|---|
| PostgreSQL Data | Docker volume zabbix-postgres-data |
All configuration, hosts, history, trends |
| Zabbix Config | Inside database | Templates, users, dashboards, alerts |
The PostgreSQL volume contains everything – hosts, templates, historical data, user accounts, dashboards. Back this up regularly!
Manual Backup
Option 1: Database Dump (Recommended)
# Create backup directory |
Option 2: Volume Backup
# Stop containers first (ensures data consistency) |
Automated Backup (Cron)
Create a backup script:
cat << 'EOF' > ~/zabbix-backup.sh |
Add to crontab (daily at 2 AM):
(crontab -l 2>/dev/null; echo "0 2 * * * ~/zabbix-backup.sh") | crontab - |
Restore from Backup
From SQL Dump:
# Stop server and web (keep postgres running) |
From Volume Backup:
# Stop all containers |
Part 7: Updating Zabbix
Update Strategy
Zabbix follows semantic versioning: Major.Minor.Patch (e.g., 7.0.22)
| Update Type | Risk | Downtime | Example |
|---|---|---|---|
| Patch (7.0.x → 7.0.y) | Low | ~1 min | Bug fixes, security |
| Minor (7.x → 7.y) | Medium | ~5 min | New features |
| Major (6.x → 7.x) | High | 10+ min | Breaking changes, DB migration |
⚠️ Always backup before updating!
Check Current Version
# In Zabbix UI: Bottom right shows version |
Check Available Updates
# Pull latest images (doesn't affect running containers) |
Perform Update
Step 1: Backup
sudo docker exec zabbix-postgres pg_dump -U zabbix zabbix > ~/zabbix-backups/zabbix_pre_update_$(date +%Y%m%d).sql |
Step 2: Stop and Remove Old Containers
sudo docker stop zabbix-web zabbix-server zabbix-agent |
Note: Don’t remove zabbix-postgres unless you’re updating PostgreSQL!
Step 3: Pull New Images
sudo docker pull zabbix/zabbix-server-pgsql:alpine-7.0-latest |
Step 4: Start New Containers
# Zabbix Server |
Step 5: Verify
sudo docker ps | grep zabbix |
Check Web UI – version should be updated.
Update PostgreSQL (Careful!)
PostgreSQL major version updates require data migration. Only update if necessary.
# Check current version |
⚠️ For major PostgreSQL version upgrades (e.g., 15 → 16), you need to dump/restore the database. This is beyond the scope of this guide.
Rollback if Update Fails
If something goes wrong:
# Stop broken containers |
Quick Reference: Docker Commands
# View all Zabbix containers |
Appendix: Complete Single-Script Installation
For a fresh installation, save this as install-zabbix.sh:
|
Run with:
chmod +x install-zabbix.sh |
After running the script: You still need to add the ZimaOS host in Zabbix UI (see Part 2, Step 3) to start collecting metrics.