Docker compose 部署 Zabbix
Zabbix 支持多种部署方式,但由于 zabbix 组件众多配置繁琐,因此推荐直接使用 docker compose 一键部署所需环境。
使用 docker compose 部署 zabbix
- 克隆 zabbix-docker 仓库
git clone https://github.com/zabbix/zabbix-docker.git
- 进入 zabbix-docker 仓库,可以看到多个
docker-compose-xxx.yaml
文件:
不同的 yaml 文件区分了不同的运行环境和使用不同的数据库,可任选其一。
- 启动容器
docker compose up -d
# 默认情况下会启动最少的服务集,不包含 Zabbix Agent 等服务
# 如果要启动所有服务可使用配置文件选项: all
# docker compose --profile all up -d
compose.yaml
文件为docker compose up
默认使用的描述文件,其内容为docker-compose_v3_alpine_mysql_latest.yaml
。即默认使用compose_v3_alpine_mysql_latest.yaml
启动容器。如果想使用其他描述文件,有如下方式:
- 方式一:将
compose.yaml
文件内容修改为其他描述文件
# 替换 compose.yaml 里的内容为 'docker-compose_v3_alpine_pgsql_latest.yaml'
echo 'docker-compose_v3_alpine_pgsql_latest.yaml' > compose.yaml
# 启动容器
docker compose up -d
- 方式二:使用
-f
参数指定使用某个描述文件
# 注意 -f 和 -d 参数位置,-f 是 docker compose 命令的参数而不是 up 子命令的参数
# 如果使用 -f 参数指定某个描述文件,则后续所有 docker compose 命令都需要带上 -f xxx.yaml
docker compose -f docker-compose_v3_alpine_pgsql_latest.yaml up -d
注意,zabbix-server 的 compose 文件使用了较新的语法,因此如果在启动中出现语法错误的提示,诸如:
service "selenium-firefox" can't be used with
extendsas it declare
depends_on...
的错误,可以升级docker compose
版本解决。按照 docker 官方文档 操作即可。 经测试以下版本可用:
- Docker compose: 2.29.7
- 观察 zabbix-server 容器日志直到启动成功:
docker compose logs -f
观察到:
- 访问 zabbix-server web 服务,默认 web 服务使用 80 端口(http://localhost),输入用户名 Admin 以及密码 zabbix 以作为 Zabbix 超级用户登录
- 调整语言和时区
可在侧边栏 User settings > Profile 页面中调整使用中文和上海时区
- 启动一个 zabbix agent
启动后 zabbix 默认配置了一个名为 Zabbix server 的主机,但由于没有启动 zabbix agent 因此处于不可用状态:
我们可以启动一个 zabbix agent 让这个默认的主机处于可用状态。
修改 zabbix agent 配置文件 ./env_vars/.env_agent
设置 ZBX_HOSTNAME=Zabbix server
(可以使用 ,
分隔多个主机名,主机名指的是 zabbix web 页面显示的主机名称)
# 设置环境变量 ZBX_HOSTNAME=Zabbix server
sed -i 's/# ZBX_HOSTNAME=/ZBX_HOSTNAME=Zabbix server/' ./env_vars/.env_agent
启动 zabbix agent
如果启动容器时使用的是:
docker compose --profile all up -d
则 zabbix agent 已启动。可使用如下命令重启:
docker compose down zabbix-agent
docker compose up zabbix-agent -d
docker compose up zabbix-agent -d
在 zabbix web 页面设置 Zabbix server 主机的 agent 地址:
- 点击 检测 > 主机 > Zabbix server > 主机
- 设置 agent 地址为 DNS,DNS 名称为 zabbix-agent
等待一段时间后可用性会变为绿色标记,表示可用:
修改 Zabbix 配置
如果想调整默认的 zabbix 配置,可以编辑 zabbix-docker 目录下的 .env
文件 和 env_vars/*
目录下的文件。
比如将 .env
文件下的 ZABBIX_WEB_NGINX_HTTP_PORT=80
调整为 ZABBIX_WEB_NGINX_HTTP_PORT=8080
可修改默认的 web 服务端口为 8080。重新启动容器即可:
# 修改配置
...
# 重启容器 (zabbix 默认持久化了数据,down 并不会删除原本的数据)
docker compose down
docker compose up -d
各项配置说明
zabbix 配置一般来说是见名知意的。如果需要了解具体配置的含义可以查看 zabbix 在 docker hub 上各镜像的环境变量描述:
比如对于 mysql 配置 ./env_vars/.env_db_mysql
配置:
# DB_SERVER_HOST=mysql-server
# DB_SERVER_PORT=3306
# DB_SERVER_SOCKET=/var/run/mysqld/mysqld.sock
# MYSQL_USER=zabbix
MYSQL_USER_FILE=/run/secrets/MYSQL_USER
# MYSQL_PASSWORD=zabbix
MYSQL_PASSWORD_FILE=/run/secrets/MYSQL_PASSWORD
# MYSQL_ROOT_PASSWORD=
# MYSQL_ROOT_PASSWORD_FILE=/run/secrets/MYSQL_ROOT_PASSWORD
# MYSQL_ALLOW_EMPTY_PASSWORD=false
# MYSQL_DATABASE=zabbix
MYSQL_DATABASE=zabbix
与 zabbix/zabbix-server-mysql 镜像中环境变量的描述是对应的:
启动全新的 Zabbix
默认情况下 zabbix-server 通过使用命名卷和将数据挂载到了当前目录下的方式持久化数据:
命名卷:
zabbix-docker_snmptraps
挂载到当前目录下:
./zbx_env
./env_vars/.ZBX_DB_CA_FILE
./env_vars/.ZBX_DB_CERT_FILE
./env_vars/.ZBX_DB_KEY_FILE
因此删除这些持久化数据后重新 up 即可启动全新的 Zabbix:
# 删除容器以及命名卷
docker compose down -v
# 删除本地挂载目录
sudo rm -rf ./zbx_env ./env_vars/.ZBX_DB_*
# 启动全新的 zabbix-server 容器
docker compose up -d