Hello. Does anyone here use Zabbix to monitor their self-hosted environment? If so, what architecture do you have, and what does your deployment look like?
I used to. It’s really complicated and not big in the self hosted space.
I’d recommend the standard Prometheus, alert manager, and grafana stack instead. That’s what I use now, and although yaml sure is something, at least there’s tons of people to copy.
Zabbix is more powerfull for complex alerting scenarios and has better agent-based monitoring, while Prom/Grafana excels at metrics visualzation and integrates better with containers - they’re actually complementary depending on what you’re monitoring.
But can Prometheus + Grafana e.g. monitor a website’s content and alert when there is a new firmware version available?
Zabbix can be configured completely via its GUI. It’s really easy once you get the hang of it.
Ehh. I wouldn’t say it’s ever easy. At least not the initial setup. No matter how many times I do it, that initial setup is always a pain in the butt.
But once you get it configured and go through the initial headaches, it’s a breeze to coast on it.
What is complicated in Zabbix?
I have this running on a Raspberry Pi 5:
services: db: image: postgres:16-alpine environment: - POSTGRES_USER=zabbix - POSTGRES_PASSWORD=zabbix - PGDATA=/var/lib/postgresql/data volumes: - /opt/docker/zabbix7/pgdata/16/data:/var/lib/postgresql/data networks: - zabbix7 restart: unless-stopped # fping needs setsuid # Connect to container as "root" and run: chmod +s /usr/sbin/fping server: image: zabbix/zabbix-server-pgsql:alpine-7.4-latest environment: - POSTGRES_USER=zabbix - POSTGRES_PASSWORD=zabbix - PHP_TZ=Europe/London - ZBX_SERVER_NAME=zabbix.domain.com - ZBX_NODEADDRESS=zabbix-server:10051 cap_add: - NET_RAW - NET_ADMIN volumes: - /opt/docker/zabbix7/zabbix-server/alertscripts:/usr/lib/zabbix/alertscripts - /opt/docker/zabbix7/zabbix-server/externalscripts:/usr/lib/zabbix/externalscripts - /opt/docker/zabbix7/zabbix-server/mibs:/usr/lib/zabbix/mibs - /opt/docker/zabbix7/zabbix-server/modules:/usr/lib/zabbix/modules - /opt/docker/zabbix7/zabbix-server/export:/var/lib/zabbix/export - /opt/docker/zabbix7/zabbix-server/snmptraps:/var/lib/zabbix/snmptraps ports: - 10051:10051 depends_on: - db links: - "db:postgres-server" networks: - zabbix7 - traefik-public restart: unless-stopped web: image: zabbix/zabbix-web-nginx-pgsql:alpine-7.4-latest restart: unless-stopped environment: - PHP_TZ=Europe/London - ZBX_SERVER_NAME=zabbix.domain.com - ZBX_SERVER_HOST=zabbix-server #ports: # - 10080:8080 # - 10081:443 depends_on: - server - db links: - "server:zabbix-server" - "db:postgres-server" networks: - zabbix7 - traefik-public labels: traefik.enable: "true" traefik.http.routers.zbx.rule: Host(`zabbix.domain.com`) traefik.http.routers.zbx.entrypoints: https traefik.http.routers.zbx.tls: "true" traefik.http.routers.zbx.tls.certresolver: le traefik.http.services.zbx.loadbalancer.server.port: "8080" networks: traefik-public: external: true zabbix7: attachable: true
I run mine on a separate server in containers (using Podman). For architecture, the server just connects directly to each agent, using my VPN network
It’s still on my to-do list.
I use it at home, as a test environment as I brought it to 2 workplaces. I have a mysql VM and a front end VM.