Deploying Zabbix via Docker

zabbix 官方repo

這份 zabbix-docker/Makefile 是一個自動化建置與管理工具,主要用於簡化 Zabbix Docker 映像檔的編譯(使用 docker buildx bake)與運行(使用 docker compose)。

它可以讓你透過簡單的指令,處理不同作業系統(OS)、資料庫(DB)與版本(Version)的複雜組合。

核心功能講解

  1. 參數化配置 (自定義變數) 你可以透過命令列修改以下變數來改變建置目標:
  • OS: 支援 alpine (預設), centos, ol (Oracle Linux), ubuntu, rhel。
  • DB: 支援 mysql (預設), pgsql, sqlite3。
  • ZBX_VERSION: Zabbix 版本(預設 7.4)。
  • PLATFORMS: 可指定多架構編譯,例如 linux/amd64,linux/arm64。
  1. 主要工作流程 這份 Makefile 將映像檔建置分為三個階段:
  2. Base: 建立基礎作業系統層。
  3. Builders: 編譯 Zabbix 源碼所需的環境。
  4. Runtime: 最終運行的輕量化映像檔(分為 minimal 基本版與 all 完整版)。

常用指令簡介

建置類 (Build)

  • make build: 自動依序執行 base -> builders -> runtime-minimal。這是最常用的本地開發編譯指令。 * make build-all: 建置所有組件,包含完整版的 runtime 映像檔。
  • make base / make builders: 僅執行特定階段的建置。

運行類 (Compose) * make up: 從官方倉庫(Docker Hub)抓取預編譯好的映像檔並啟動 Zabbix 環境。

  • make up-local: 先在本地編譯映像檔,然後使用本地生成的映像檔啟動環境(適合修改程式碼後測試)。
  • make down / make restart / make logs: 封裝了標準的 Docker Compose 指令。

輔助類

  • make help: 顯示所有可用的指令說明以及當前的配置參數(例如目前是針對哪個 OS 和 DB)。
  • make clean: 嘗試刪除本地產生的編譯階段映像檔,節省空間。

透過額外的 YAML 檔案組合

你可能有注意到專案目錄下有這些檔案:

  • compose_zabbix_components.yaml (核心組件)
  • compose_additional_components.yaml (額外組件:如 Agent, SNMP Traps, Java Gateway)

當你下 make upmake stop 時,它背後其實執行了這一串:

1
OS="alpine" DB="mysql" ZBX_IMAGE_TAG="alpine-7.4-latest" docker compose -f compose.yaml

┌─────────────────────────┬───────────────┬────────────────────────────────┐ │ 目的 │ Makefile 指令 │ 等同於 (簡化版) │ ├─────────────────────────┼───────────────┼────────────────────────────────┤ │ 啟動 (使用官方 Image) │ make up │ docker compose up -d │ │ 啟動 (使用你自己編譯的) │ make up-local │ make build + docker compose up │ │ 停止並移除 容器 │ make down │ docker compose down │ │ 暫停 容器 (不移除) │ make stop │ docker compose stop │ │ 重新啟動 │ make restart │ docker compose restart │ │ 查看狀態 │ make ps │ docker compose ps │ │ 查看日誌 │ make logs │ docker compose logs -f │ └─────────────────────────┴───────────────┴────────────────────────────────┘

## 最常用的指令

既然已經有這份 Makefile,除非你是要進行非常細微的除錯,否則養成使用 make 的習慣會省去很多檢查環境變數的時間。

最常用的三個指令記住即可:

  1. make up (啟動)
  2. make stop (暫停)
  3. make down (收工,全部移除)

預設路徑與自定義方式的詳細說明

  1. 預設存放位置 所有的資料預設都放在專案目錄下的一個隱藏或特定資料夾中。根據 .env 檔案的定義:
  • 變數名稱: DATA_DIRECTORY
  • 預設路徑: ./zbx_env (即在你執行 make 的資料夾下的 zbx_env/)

具體組件的資料存放路徑:

  • 資料庫 (MySQL/MariaDB): ./zbx_env/var/lib/mysql
  • 資料庫 (PostgreSQL): ./zbx_env/var/lib/postgresql/data
  • Zabbix Server 腳本:
    • 警報腳本: ./zbx_env/usr/lib/zabbix/alertscripts
    • 外部腳本: ./zbx_env/usr/lib/zabbix/externalscripts
  • Zabbix Web 憑證: ./zbx_env/etc/ssl/nginx (或 apache2)
  • Agent 配置: ./zbx_env/etc/zabbix/zabbix_agentd.d
  1. Named Volumes (具名卷) 有些組件使用 Docker 管理的具名卷(由 Docker 決定路徑,通常在 Linux 的 /var/lib/docker/volumes/ 下):
  • SNMP Traps: 卷名為 snmptraps。

如果你只想把所有資料移動到另一個資料夾(例如移動到外部硬碟 /mnt/data/zabbix),只需修改專案根目錄下的 .env 檔案:

1 # 找到這一行並修改 2 DATA_DIRECTORY=/mnt/data/zabbix 修改後,執行 make restart,Docker 就會把掛載點指向新位置。

Built with Hugo
Theme Stack designed by Jimmy