Zabbix Proxies
1. Overview
A Zabbix Proxy is a lightweight data collector deployed close to monitored devices (remote sites, VLANs, branches).
The proxy:
- Collects monitoring data (SNMP, agent, ICMP, etc.)
- Buffers data if the Zabbix Server is temporarily unreachable
- Sends collected data to the Zabbix Server
- Reduces direct connectivity requirements between server and remote devices
Typical use cases:
- Remote sites behind NAT or firewall
- Monitoring SNMP network devices locally
- Scaling large deployments by distributing load
2. Proxy Modes
Zabbix Proxy supports two modes:
Active Mode (Recommended)
- Proxy connects outbound to Zabbix Server
- Proxy downloads configuration
- Proxy sends collected data to server
- Only requires proxy → server connectivity (TCP 10051)
Note: We use Active mode in our deployment.
Passive Mode
- Zabbix Server connects inbound to Proxy
- Requires firewall opening from server → proxy
- Less suitable for NAT environments
3. Sizing Rule (Our Standard)
Site devices ≤ 20
Use:
- zabbix/zabbix-proxy-sqlite3:7.2.6-alpine
Reason:
- Simple setup
- No external database
- Suitable for small sites
Site devices > 20
Use:
-
Proxy image:
- zabbix/zabbix-proxy-mysql:7.2.15-alpine
-
Proxy DB:
- mariadb:11.4
Reason:
- Better performance for SNMP-heavy environments
- More stable under larger item counts
- Avoids SQLite bottlenecks
Note: Device count is only an estimate. Large switches with many interfaces may require MySQL proxy even if device count is small.
4. Deployment – Proxy (MariaDB) for Sites > 20 Devices
docker-compose.yml
version: "3.8"
services:
bkhn-proxy-db-01:
image: mariadb:11.4
container_name: bkhn-proxy-db-01
restart: always
environment:
MARIADB_DATABASE: zbx_proxy_bkhn_01
MARIADB_USER: zbxproxy
MARIADB_PASSWORD: CHANGE_ME_STRONG_PASSWORD
MARIADB_ROOT_PASSWORD: CHANGE_ME_STRONG_ROOT_PASSWORD
volumes:
- bkhn-proxy-db-data-01:/var/lib/mysql
networks:
- bkhn_proxy_net
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "127.0.0.1", "-u", "root", "-pCHANGE_ME_STRONG_ROOT_PASSWORD"]
interval: 10s
timeout: 5s
retries: 10
bkhn-proxy-01:
image: zabbix/zabbix-proxy-mysql:7.2.15-alpine
container_name: bkhn-proxy-01
restart: always
depends_on:
bkhn-proxy-db-01:
condition: service_healthy
environment:
ZBX_SERVER_HOST: 192.168.90.105
ZBX_HOSTNAME: bkhn-proxy-01
ZBX_PROXYMODE: "0"
ZBX_CONFIGFREQUENCY: "60"
ZBX_DATASENDERFREQUENCY: "5"
ZBX_STARTPOLLERS: "20"
ZBX_STARTSNMPPOLLERS: "20"
ZBX_STARTPREPROCESSORS: "5"
ZBX_CACHESIZE: "256M"
ZBX_TIMEOUT: "3"
DB_SERVER_HOST: bkhn-proxy-db-01
MYSQL_DATABASE: zbx_proxy_bkhn_01
MYSQL_USER: zbxproxy
MYSQL_PASSWORD: CHANGE_ME_STRONG_PASSWORD
networks:
- bkhn_proxy_net
volumes:
bkhn-proxy-db-data-01:
networks:
bkhn_proxy_net:
driver: bridge
Start Proxy
docker compose up -d
docker logs -f bkhn-proxy-01
5. Deployment – Proxy (SQLite) for Sites ≤ 20 Devices
docker-compose.yml
version: "3.8"
services:
bkhn-proxy-01:
image: zabbix/zabbix-proxy-sqlite3:7.2.6-alpine
container_name: bkhn-proxy-01
restart: always
environment:
ZBX_SERVER_HOST: 192.168.90.105
ZBX_HOSTNAME: bkhn-proxy-01
ZBX_PROXYMODE: "0"
ZBX_CONFIGFREQUENCY: "60"
ZBX_DATASENDERFREQUENCY: "5"
volumes:
- bkhn-proxy-sqlite-data-01:/var/lib/zabbix
networks:
- bkhn_proxy_net
volumes:
bkhn-proxy-sqlite-data-01:
networks:
bkhn_proxy_net:
driver: bridge
6. Tuning Recommendations
If monitoring network devices:
- Increase ZBX_STARTSNMPPOLLERS
- Increase ZBX_CACHESIZE
- Consider moving SQLite → MariaDB when site grows