Zabbix 7.4 Alpine 版 Docker Compose 部署
compose.yaml
services:
# ---------------------------------------------------------------------------
# 1. 数据库服务 (MariaDB)
# ---------------------------------------------------------------------------
zabbix-db:
image: mariadb:11.8
container_name: zabbix-db
restart: always
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --default-authentication-plugin=mysql_native_password
- --innodb-buffer-pool-size=1G
- --innodb-log-file-size=256M
- --max-connections=500
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix}
MYSQL_USER: ${MYSQL_USER:-zabbix}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password}
volumes:
- db-data:/var/lib/mysql
networks:
- zabbix-net
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
# ---------------------------------------------------------------------------
# 2. Zabbix Server 服务 (MySQL/MariaDB 后端)
# ---------------------------------------------------------------------------
zabbix-server:
image: zabbix/zabbix-server-mysql:alpine-7.4-latest
container_name: zabbix-server
restart: always
ports:
- "10051:10051"
environment:
DB_SERVER_HOST: zabbix-db
MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix}
MYSQL_USER: ${MYSQL_USER:-zabbix}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password}
ZBX_JAVAGATEWAY_ENABLE: "false"
ZBX_CACHESIZE: "128M"
ZBX_HISTORYCACHESIZE: "128M"
ZBX_HISTORYINDEXCACHESIZE: "64M"
ZBX_TRENDCACHESIZE: "64M"
ZBX_VALUECACHE_SIZE: "256M"
TZ: "Asia/Shanghai"
volumes:
- /etc/localtime:/etc/localtime:ro
- zabbix-alertscripts:/usr/lib/zabbix/alertscripts
- zabbix-externalscripts:/usr/lib/zabbix/externalscripts
networks:
- zabbix-net
depends_on:
zabbix-db:
condition: service_healthy
# ---------------------------------------------------------------------------
# 3. Zabbix Web 前端 (Nginx + PHP-FPM)
# ---------------------------------------------------------------------------
zabbix-web-nginx:
image: zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest
container_name: zabbix-web-nginx
restart: always
ports:
- "8080:8080"
- "8443:8443"
environment:
DB_SERVER_HOST: zabbix-db
MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix}
MYSQL_USER: ${MYSQL_USER:-zabbix}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password}
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: "Asia/Shanghai"
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
- zabbix-net
depends_on:
zabbix-db:
condition: service_healthy
zabbix-server:
condition: service_started
# ---------------------------------------------------------------------------
# 4. Zabbix Agent 2 (监控宿主机自身)
# ---------------------------------------------------------------------------
zabbix-agent2:
image: zabbix/zabbix-agent2:alpine-7.4-latest
container_name: zabbix-agent2
restart: always
ports:
- "10050:10050"
privileged: true
pid: "host"
environment:
ZBX_SERVER_HOST: "zabbix-server,127.0.0.1"
ZBX_HOSTNAME: "Zabbix server"
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /:/host:ro
networks:
- zabbix-net
depends_on:
- zabbix-server
# -----------------------------------------------------------------------------
# 持久化 Data Volume
# -----------------------------------------------------------------------------
volumes:
db-data:
driver: local
zabbix-alertscripts:
driver: local
zabbix-externalscripts:
driver: local
# -----------------------------------------------------------------------------
# 网络配置
# -----------------------------------------------------------------------------
networks:
zabbix-net:
driver: bridge
生产部署要点说明
-
环境凭据安全: 强烈建议在
compose.yaml同级目录下新建一个.env文件,将密码替换为自定义安全字符串:代码段MYSQL_DATABASE=zabbix MYSQL_USER=zabbix MYSQL_PASSWORD=YourStrongDBPassword123! MYSQL_ROOT_PASSWORD=YourStrongRootPassword123! -
性能与缓存优化: 在
zabbix-db中添加了参数--innodb-buffer-pool-size=1G,在zabbix-server中放大了ZBX_VALUECACHE_SIZE等缓存配置,避免中大型监控场景下的缓存瓶颈。 -
健康检查依赖(Healthcheck): 使用
depends_on: condition: service_healthy,确保 MariaDB 完全初始化并准备好接收连接后,Zabbix Server 才会启动建表,避免首次启动时 Server 因数据库未就绪而频繁崩溃重启。 -
宿主机监控: Agent 2 挂载了
/var/run/docker.sock和根目录/host:ro,并开启pid: "host",可直接通过官方模板采集宿主机的 CPU、内存、磁盘以及 Docker 容器状态。
前端 Web 页面配置
-
登录 Zabbix Web 界面(默认端口
8080,初始账号密码Admin/zabbix)。 -
点击左侧菜单 Data collection -> Hosts。
-
找到默认生成的
Zabbix server主机(如果禁用状态则启用它)。 -
点击进入配置:
-
Host name:必须与
compose.yaml中环境变量ZBX_HOSTNAME: "Zabbix server"完全一致(区分大小写)。 -
Interfaces(接口配置):选择 Agent 类型。
-
DNS name:填
zabbix-agent2(Docker 服务名/容器名)。 -
Connect to:选择 DNS。
-
Port:
10050。
-
-
-
保存后等待 1~2 分钟,页面上该主机的 BX 标识变为绿色,即代表连接成功。
监控外部物理机 / 其他服务器上的 Agent 2
如果你是在其他独立服务器上安装了 Zabbix Agent 2,需要将其连接回 Docker 运行的 Zabbix Server。
1. 外部服务器的 zabbix_agent2.conf 配置
修改 Agent 2 的配置文件(通常位于 /etc/zabbix/zabbix_agent2.conf):
# 被动模式:允许来自 Zabbix Server 宿主机公网/内网 IP 的轮询请求
Server=192.168.1.100
# 主动模式:Agent 2 主动向 Zabbix Server 汇报数据
ServerActive=192.168.1.100:10051
# 本机标识:必须与 Web 界面添加 Host 时的 Host name 完全一致
Hostname=Web-Server-01
(注意:将 192.168.1.100 替换为你运行 Zabbix Docker 的宿主机实际 IP)
修改后重启外部 Agent 2 服务:
systemctl restart zabbix-agent2
2. 前端 Web 页面添加该主机
-
路径:Data collection -> Hosts -> 点击右上角 Create host。
-
Host name:填写
Web-Server-01(对应 Agent 配置文件中的Hostname)。 -
Templates:添加官方模板
Linux by Zabbix agent ZBX或System Performance by Zabbix agent。 -
Interfaces -> Add Agent:
-
IP address:填写外部服务器的实际 IP。
-
Connect to:选择 IP。
-
Port:
10050。
-
-
点击 Add 添加。
本文来自博客园,作者:木子欢儿,转载请注明原文链接:https://www.cnblogs.com/HGNET/p/23209690

浙公网安备 33010602011771号