Zabbix为每个组件提供Docker镜像作为便携且自包含的容器,以加速部署和update流程。
Zabbix组件支持MySQL和PostgreSQL数据库,以及Apache2和nginx网页服务器。这些镜像被划分为不同的独立镜像。
自Zabbix 6.0起,安装过程中必须创建确定性触发器。若MySQL/mariadb启用了二进制日志功能,这需要超级用户权限或设置变量/配置参数log_bin_trust_function_creators = 1。具体设置方法请参阅mysql。
注意:若通过控制台执行,该变量仅为临时设置,Docker重启后将失效。
此时请保持SQL服务运行,仅通过执行'docker compose down zabbix-server'和'docker compose up -d zabbix-server'来重启zabbix-server服务。
或者,您可以在配置file中永久设置该变量。
Zabbix组件提供基于Ubuntu、Alpine Linux和CentOS的基础镜像:
所有镜像都配置为在基础镜像更新时自动重建最新镜像。
任何人都可以通过Zabbix official repository在github.com上追踪Docker file的变更。您可以fork该项目或基于官方Docker文件构建自己的镜像。
所有Zabbix组件均可在以下Docker仓库中获取:
Zabbix agent - zabbix/zabbix-agent
Zabbix server
Zabbix web-interface
Zabbix proxy
Zabbix Java Gateway -
此外还提供SNMP trap支持。该功能作为附加仓库 (zabbix/zabbix-snmptraps) 仅基于Ubuntu Trusty提供。可与Zabbix server和 Zabbix proxy进行关联。
每个Zabbix组件仓库包含以下标签:
latest
- 基于Alpine Linux镜像的Zabbix组件最新稳定versionalpine-latest
- 基于Alpine Linux镜像的Zabbix组件最新稳定versionubuntu-latest
- 基于Ubuntu镜像的Zabbix组件最新稳定versionalpine-6.0-latest
- 基于Alpine Linux镜像的Zabbix 6.0组件最新次要versionubuntu-6.0-latest
- 基于Ubuntu镜像的Zabbix 6.0组件最新次要versionalpine-6.0.*
- 基于Alpine Linux镜像的Zabbix 6.0组件不同次要版本,其中*
表示Zabbix组件的次要versionubuntu-6.0.*
- 基于Ubuntu镜像的Zabbix 6.0组件不同次要版本,其中*
表示Zabbix组件的次要version下载镜像后,通过执行docker run
命令启动容器,后接指定所需环境变量和/或挂载点的附加参数。下方提供了一些配置示例。
Zabbix不得在容器中作为PID1/初始化进程run运行。
所有Zabbix组件镜像都提供用于控制配置的环境变量。这些环境变量在每个组件仓库中均有列出。这些环境变量源自Zabbix配置文件选项,但采用不同的命名方式。例如,ZBX_LOGSLOWQUERIES
等同于LogSlowQueries
,后者来自Zabbix server和Zabbix proxy配置文件。
部分配置选项不允许修改。例如,PIDFile
和LogType
。
某些组件具有特定的环境变量,这些变量在官方Zabbix配置文件中不存在:
变量 | 组件 | 描述 |
---|---|---|
DB_SERVER_HOST |
Server Proxy Web界面 |
该变量为MySQL或PostgreSQL服务器的IP或DNS名称。 默认值为MySQL的 mysql-server 或PostgreSQL的postgres-server |
DB_SERVER_PORT |
Server Proxy Web界面 |
该变量为MySQL或PostgreSQL服务器的端口号。 默认值分别为'3306'或'5432'。 |
MYSQL_USER |
Server Proxy Web界面 |
MySQL数据库用户。 默认值为'zabbix'。 |
MYSQL_PASSWORD |
Server Proxy Web界面 |
MySQL数据库密码。 默认值为'zabbix'。 |
MYSQL_DATABASE |
Server Proxy Web界面 |
Zabbix数据库名称。 默认值对Zabbix server为'zabbix',对Zabbix proxy为'zabbix_proxy'。 |
POSTGRES_USER |
Server Web界面 |
PostgreSQL数据库用户。 默认值为'zabbix'。 |
POSTGRES_PASSWORD |
Server Web界面 |
PostgreSQL数据库密码。 默认值为'zabbix'。 |
POSTGRES_DB |
Server Web界面 |
Zabbix数据库名称。 默认值为'zabbix'。 |
PHP_TZ |
Web界面 | PHP格式的时区设置。支持的完整时区列表见php.net。 默认值为'Europe/Riga'。 |
ZBX_SERVER_NAME |
Web界面 | 在Web界面右上角Top显示的Zabbix安装名称。 默认值为'Zabbix Docker' |
ZBX_JAVAGATEWAY_ENABLE |
Server Proxy |
启用与Zabbix Java网关的通信以收集Java相关检查项。 默认值为"false" |
ZBX_ENABLE_SNMP_TRAPS |
Server Proxy |
启用SNMP trap功能。此功能需要zabbix-snmptraps实例以及共享卷/var/lib/zabbix/snmptraps挂载至Zabbix server或Zabbix proxy。 |
这些镜像允许使用某些挂载点。这些挂载点根据Zabbix组件类型不同而有所差异:
卷 | 描述 |
---|---|
Zabbix agent | |
/etc/zabbix/zabbix_agentd.d | 该卷允许包含*.conf文件,并通过UserParameter 功能扩展Zabbix agent |
/var/lib/zabbix/modules | 该卷允许加载额外模块,并通过LoadModule功能扩展Zabbix agent |
/var/lib/zabbix/enc | 该卷用于存储TLS相关文件。这些file名称通过ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 和ZBX_TLSPSKFILE 环境变量指定 |
Zabbix server | |
/usr/lib/zabbix/alertscripts | 该卷用于自定义告警脚本。对应zabbix_server.conf中的AlertScriptsPath 参数 |
/usr/lib/zabbix/externalscripts | 该卷被external checks使用。对应zabbix_server.conf中的ExternalScripts 参数 |
/var/lib/zabbix/modules | 该卷允许加载额外模块,并通过LoadModule功能扩展Zabbix server |
/var/lib/zabbix/enc | 该卷用于存储TLS相关文件。这些file名称通过ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 和ZBX_TLSPSKFILE 环境变量指定 |
/var/lib/zabbix/ssl/certs | 该卷用作SSL客户端证书文件的存储位置。对应zabbix_server.conf中的SSLCertLocation 参数 |
/var/lib/zabbix/ssl/keys | 该卷用作SSL私钥文件的存储位置。对应zabbix_server.conf中的SSLKeyLocation 参数 |
/var/lib/zabbix/ssl/ssl_ca | 该卷用作SSL服务器证书验证的CA文件存储位置。对应zabbix_server.conf中的SSLCALocation 参数 |
/var/lib/zabbix/snmptraps | 该卷用作snmptraps.logfile的存储位置。可与zabbix-snmptraps容器共享,并通过volumes_from Docker选项在创建新Zabbix server实例时继承。通过共享卷并将ZBX_ENABLE_SNMP_TRAPS 环境变量设为'true'可启用SNMP trap处理功能 |
/var/lib/zabbix/mibs | 该卷允许添加新MIB文件。不支持子目录,所有MIB必须放在/var/lib/zabbix/mibs 目录下 |
Zabbix proxy | |
/usr/lib/zabbix/externalscripts | 该卷被external checks使用。对应zabbix_proxy.conf中的ExternalScripts 参数 |
/var/lib/zabbix/db_data/ | 该卷允许将数据库文件存储在外置设备上。仅支持使用SQLite3的Zabbix proxy |
/var/lib/zabbix/modules | 该卷允许加载额外模块,并通过LoadModule功能扩展Zabbix server |
/var/lib/zabbix/enc | 该卷用于存储TLS相关文件。这些file名称通过ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 和ZBX_TLSPSKFILE 环境变量指定 |
/var/lib/zabbix/ssl/certs | 该卷用作SSL客户端证书文件的存储位置。对应zabbix_proxy.conf中的SSLCertLocation 参数 |
/var/lib/zabbix/ssl/keys | 该卷用作SSL私钥文件的存储位置。对应zabbix_proxy.conf中的SSLKeyLocation 参数 |
/var/lib/zabbix/ssl/ssl_ca | 该卷用作SSL服务器证书验证的CA文件存储位置。对应zabbix_proxy.conf中的SSLCALocation 参数 |
/var/lib/zabbix/snmptraps | 该卷用作snmptraps.logfile的存储位置。可与zabbix-snmptraps容器共享,并通过volumes_from Docker选项在创建新Zabbix server实例时继承。通过共享卷并将ZBX_ENABLE_SNMP_TRAPS 环境变量设为'true'可启用SNMP trap处理功能 |
/var/lib/zabbix/mibs | 该卷允许添加新MIB文件。不支持子目录,所有MIB必须放在/var/lib/zabbix/mibs 目录下 |
基于Apache2的Zabbix web界面 | |
/etc/ssl/apache2 | 该卷允许为Zabbix web界面启用HTTPS。必须包含为Apache2 SSL连接准备的ssl.crt 和ssl.key 两个文件 |
基于nginx的Zabbix web界面 | |
/etc/ssl/nginx | 该卷允许为Zabbix web界面启用HTTPS。必须包含为nginx SSL连接准备的ssl.crt 、ssl.key 文件和dhparam.pem |
Zabbix snmptraps | |
/var/lib/zabbix/snmptraps | 该卷包含接收SNMP trap生成的snmptraps.log 日志file |
/var/lib/zabbix/mibs | 该卷允许添加新MIB文件。不支持子目录,所有MIB必须放在/var/lib/zabbix/mibs 目录下 |
更多信息请参考Docker Hub上的Zabbix官方仓库。
示例1
该示例演示如何run支持MySQL数据库的Zabbix server,基于nginx网页服务器的Zabbix网页界面以及Zabbix Java网关。
1. 创建专用于Zabbix组件容器的网络:
2. 启动空的MySQL服务器实例
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
--restart unless-stopped \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
3. 启动Zabbix Java网关实例
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-6.0-latest
4. 启动Zabbix server实例并将其与已创建的MySQL服务器实例链接
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-6.0-latest
Zabbix server实例向主机机器暴露10051/TCP端口(Zabbix trapper)。
5. 启动Zabbix网页界面并将其与已创建的MySQL服务器和Zabbix server实例链接
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest
Zabbix网页界面实例向主机机器暴露80/TCP端口(HTTP)。
示例2
该示例演示如何run支持PostgreSQL数据库的Zabbix server,基于nginx网页服务器的Zabbix网页界面以及SNMP trap功能。
1. 创建专用于Zabbix组件容器的网络:
2. 启动空的PostgreSQL服务器实例
docker run --name postgres-server -t \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
--restart unless-stopped \
-d postgres:latest
3. 启动Zabbix snmptraps实例
docker run --name zabbix-snmptraps -t \
-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
--network=zabbix-net \
-p 162:1162/udp \
--restart unless-stopped \
-d zabbix/zabbix-snmptraps:alpine-6.0-latest
Zabbix snmptrap实例向主机机器暴露162/UDP端口(SNMP traps)。
4. 启动Zabbix server实例并将其与已创建的PostgreSQL服务器实例链接
docker run --name zabbix-server-pgsql -t \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
-e ZBX_ENABLE_SNMP_TRAPS="true" \
--network=zabbix-net \
-p 10051:10051 \
--volumes-from zabbix-snmptraps \
--restart unless-stopped \
-d zabbix/zabbix-server-pgsql:alpine-6.0-latest
Zabbix server实例向主机机器暴露10051/TCP端口(Zabbix trapper)。
5. 启动Zabbix网页界面并将其与已创建的PostgreSQL服务器和Zabbix server实例链接
docker run --name zabbix-web-nginx-pgsql -t \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
-p 443:8443 \
-p 80:8080 \
-v /etc/ssl/nginx:/etc/ssl/nginx:ro \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latest
Zabbix网页界面实例向主机机器暴露443/TCP端口(HTTPS)。
目录/etc/ssl/nginx必须包含所需名称的证书。
示例3
该示例演示如何在Red Hat 8上使用podman
来run支持MySQL数据库的Zabbix server,基于nginx网页服务器的Zabbix网页界面以及Zabbix Java网关。
1. 创建名为zabbix
的新pod并暴露端口(网页界面、Zabbix server trapper):
2. (可选)在zabbix
pod位置启动Zabbix agent容器:
podman run --name zabbix-agent \
-e ZBX_SERVER_HOST="127.0.0.1,localhost" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-agent-60:latest
3. 在主机上创建./mysql/
目录并启动Oracle MySQL服务器8.0:
podman run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-v ./mysql/:/var/lib/mysql/:Z \
--restart=always \
--pod=zabbix \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
4. 启动Zabbix server容器:
podman run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="127.0.0.1" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-server-mysql-60
5. 启动Zabbix Java网关容器:
podman run --name zabbix-java-gateway -t \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-60
6. 启动Zabbix网页界面容器:
podman run --name zabbix-web-mysql -t \
-e ZBX_SERVER_HOST="127.0.0.1" \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-web-mysql-60
Pod zabbix
从zabbix-web-mysql
容器的8080/TCP向主机机器暴露80/TCP端口(HTTP)。
Zabbix 还提供了用于在Docker中定义和运行多容器Zabbix组件的compose文件。这些compose文件可在github.com上的Zabbix官方docker仓库获取: https://github.com/zabbix/zabbix-docker。这些compose文件作为示例提供,它们是经过重载的。例如,它们包含同时支持MySQL和SQLite3的proxies。
存在几种不同版本的compose文件:
文件名 | 描述 |
---|---|
docker-compose_v3_alpine_mysql_latest.yaml |
该composefile在Alpine Linux上运行支持MySQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_alpine_mysql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Alpine Linux上运行支持MySQL数据库的Zabbix组件。 |
docker-compose_v3_alpine_pgsql_latest.yaml |
该composefile在Alpine Linux上运行支持PostgreSQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_alpine_pgsql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Alpine Linux上运行支持PostgreSQL数据库的Zabbix组件。 |
docker-compose_v3_centos_mysql_latest.yaml |
该composefile在CentOS 8上运行支持MySQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_centos_mysql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在CentOS 8上运行支持MySQL数据库的Zabbix组件。 |
docker-compose_v3_centos_pgsql_latest.yaml |
该composefile在CentOS 8上运行支持PostgreSQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_centos_pgsql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在CentOS 8上运行支持PostgreSQL数据库的Zabbix组件。 |
docker-compose_v3_ubuntu_mysql_latest.yaml |
该composefile在Ubuntu 20.04上运行支持MySQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_ubuntu_mysql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Ubuntu 20.04上运行支持MySQL数据库的Zabbix组件。 |
docker-compose_v3_ubuntu_pgsql_latest.yaml |
该composefile在Ubuntu 20.04上运行支持PostgreSQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_ubuntu_pgsql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Ubuntu 20.04上运行支持PostgreSQL数据库的Zabbix组件。 |
可用的Docker compose文件支持Docker Compose的version 3版本。
Compose文件配置为支持在一个主机机器上的本地存储 Docker Compose将在文件夹中create一个zbx_env
目录 compose file 当您 run Zabbix组件时使用compose file。 目录将包含与上述相同的结构 卷部分及数据库存储目录
/etc/localtime
也存在只读模式的卷 /etc/timezone
文件
在github.com上包含compose文件的同一目录中,您可以找到 每个compose组件file的默认环境变量文件。 这些环境文件命名格式为.env_<type of component>
。
以下列出的命令适用于Docker Compose V2. 若您使用Docker Compose V1,请将docker compose -f
替换为docker-compose -f
示例1
该命令将下载Zabbix 6.0各组件的最新镜像,并以守护进程模式run它们。
请勿忘记从github.com官方Zabbix仓库下载包含compose文件的 .env_<type of component>
文件。
示例2
该命令将下载Ubuntu 20.04 (focal)基础镜像,然后在本地构建Zabbix 6.0组件并以守护进程模式run它们。