Skip to content

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:

  • 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