From fba27d185776766c51efe084e9097a5fcfda04da Mon Sep 17 00:00:00 2001 From: Jainil Prajapati <86187588+jaainil@users.noreply.github.com> Date: Wed, 15 Oct 2025 09:11:56 +0530 Subject: [PATCH] feat(zabbix): Add Zabbix monitoring blueprint with Docker Compose, template, and metadata (#450) Added a complete Zabbix 7.4 blueprint including Docker Compose setup for PostgreSQL, server, web interface, SNMP traps, and Java gateway; configuration template for environment variables; logo image; and metadata entry for easy deployment and monitoring capabilities. --- blueprints/zabbix/docker-compose.yml | 85 +++++++++++++++++++++++++++ blueprints/zabbix/image.png | Bin 0 -> 15004 bytes blueprints/zabbix/template.toml | 17 ++++++ meta.json | 18 ++++++ 4 files changed, 120 insertions(+) create mode 100644 blueprints/zabbix/docker-compose.yml create mode 100644 blueprints/zabbix/image.png create mode 100644 blueprints/zabbix/template.toml diff --git a/blueprints/zabbix/docker-compose.yml b/blueprints/zabbix/docker-compose.yml new file mode 100644 index 00000000..aea0a8df --- /dev/null +++ b/blueprints/zabbix/docker-compose.yml @@ -0,0 +1,85 @@ +version: "3.8" + +services: + postgres: + image: postgres:16-alpine + restart: unless-stopped + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + volumes: + - zabbix-postgres-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 5 + + zabbix-java-gateway: + image: zabbix/zabbix-java-gateway:alpine-7.4-latest + restart: unless-stopped + + zabbix-snmptraps: + image: zabbix/zabbix-snmptraps:alpine-7.4-latest + restart: unless-stopped + volumes: + - zabbix-snmptraps:/var/lib/zabbix/snmptraps + - zabbix-mibs:/var/lib/zabbix/mibs + + zabbix-server-pgsql: + image: zabbix/zabbix-server-pgsql:alpine-7.4-latest + restart: unless-stopped + environment: + DB_SERVER_HOST: postgres + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ZBX_ENABLE_SNMP_TRAPS: "true" + ZBX_JAVAGATEWAY: zabbix-java-gateway + depends_on: + postgres: + condition: service_healthy + zabbix-java-gateway: + condition: service_started + zabbix-snmptraps: + condition: service_started + volumes: + - zabbix-server-data:/var/lib/zabbix + - zabbix-snmptraps:/var/lib/zabbix/snmptraps + - zabbix-mibs:/var/lib/zabbix/mibs + expose: + - 10051 + healthcheck: + test: ["CMD", "pgrep", "zabbix_server"] + interval: 10s + timeout: 5s + retries: 5 + + zabbix-web-nginx-pgsql: + image: zabbix/zabbix-web-nginx-pgsql:alpine-7.4-latest + restart: unless-stopped + environment: + DB_SERVER_HOST: postgres + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ZBX_SERVER_HOST: zabbix-server-pgsql + PHP_TZ: ${PHP_TZ} + ZBX_SERVER_NAME: ${ZBX_SERVER_NAME} + depends_on: + zabbix-server-pgsql: + condition: service_healthy + expose: + - 8080 + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + zabbix-postgres-data: + zabbix-server-data: + zabbix-snmptraps: + zabbix-mibs: diff --git a/blueprints/zabbix/image.png b/blueprints/zabbix/image.png new file mode 100644 index 0000000000000000000000000000000000000000..74847ed0bac67cb6bbe25d2c033fd01c39eeeaa4 GIT binary patch literal 15004 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 QpnCucGRo3*k|x3b2g)(V!T