Docker compose 部署 Zabbix

Zabbix 支持多种部署方式,但由于 zabbix 组件众多配置繁琐,因此推荐直接使用 docker compose 一键部署所需环境。

使用 docker compose 部署 zabbix

6 从容器中安装

  1. 克隆 zabbix-docker 仓库
git clone https://github.com/zabbix/zabbix-docker.git
  1. 进入 zabbix-docker 仓库,可以看到多个 docker-compose-xxx.yaml 文件:

Image

不同的 yaml 文件区分了不同的运行环境和使用不同的数据库,可任选其一。

  1. 启动容器
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 declaredepends_on...的错误,可以升级 docker compose版本解决。按照 docker 官方文档 操作即可。 经测试以下版本可用:

  • Docker compose: 2.29.7
  1. 观察 zabbix-server 容器日志直到启动成功:
docker compose logs -f

观察到:

Image

  1. 访问 zabbix-server web 服务,默认 web 服务使用 80 端口(http://localhost),输入用户名 Admin 以及密码 zabbix 以作为 Zabbix 超级用户登录

Image

  1. 调整语言和时区

可在侧边栏 User settings > Profile 页面中调整使用中文和上海时区

Image

  1. 启动一个 zabbix agent

启动后 zabbix 默认配置了一个名为 Zabbix server 的主机,但由于没有启动 zabbix agent 因此处于不可用状态:

Image

我们可以启动一个 zabbix agent 让这个默认的主机处于可用状态。

修改 zabbix agent 配置文件 ./env_vars/.env_agent设置 ZBX_HOSTNAME=Zabbix server(可以使用 ,分隔多个主机名,主机名指的是 zabbix web 页面显示的主机名称)

详情见:FAQnP … Frequently asked questions and problems

# 设置环境变量 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 > 主机

Image

  • 设置 agent 地址为 DNS,DNS 名称为 zabbix-agent

Image

等待一段时间后可用性会变为绿色标记,表示可用:

Image

修改 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 上各镜像的环境变量描述:

Docker

比如对于 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 镜像中环境变量的描述是对应的:

Image

启动全新的 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