这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

5 从容器中安装

Docker

Zabbix 为每个组件都提供了 Docker 镜像 ,作为弹性和自给自足的容器,促使加快部署和更新过程。

Zabbix provides Docker images for each Zabbix component as portable and self-sufficient containers to speed up deployment and update procedure.

Zabbix 组件支持 MySQL 和 PostgreSQL 数据库、Apache2 和 Nginx Web 服务器。这些镜像被分成多个不同的镜像。

Zabbix components come with MySQL and PostgreSQL database support, Apache2 and Nginx web server support. These images are separated into different images.

Docker 的基础镜像

Zabbix 组件提供了 Ubuntu、Alpine Linux 和 CentOS 的基础镜像:

Zabbix components are provided on Ubuntu, Alpine Linux and CentOS base images:

镜像 版
alpine 3.4
ubuntu trusty
centos latest

如果基础镜像升级了,所有的镜像被配置为重建成最新版本的镜像。

Docker 源文件

每个人都可以在 github.com 上使用 Zabbix 官方镜像仓库,并关注其 Docker 文件变更情况。您可以根据官方 Docker 文件复制此项目或制作自己的镜像。

组件

所有 Zabbix 组件都可在以下 Docker 镜像仓库中使用:

此外,对于 SNMP trap 的支持,它仅作为基于 Ubuntu Trusty 的额外镜像仓库 (zabbix/zabbix-snmptraps) 提供。它可以与 Zabbix server 和 Zabbix proxy 关联。

版本

Zabbix 组件的每个镜像仓库都包含了下列标签:

  • latest - 基于 Alpine Linux 镜像的最新稳定版的 Zabbix 组件;
  • alpine-latest - 基于 Alpine Linux 镜像的最新稳定版的 Zabbix 组件;
  • ubuntu-latest - 基于 Ubuntu 镜像的最新稳定版的 Zabbix 组件;
  • alpine-5.0-latest - 基于 Alpine Linux 镜像的最新次要版本的 Zabbix 5.0 组件;
  • ubuntu-5.0-latest - 基于 Unbuntu 镜像的最新次要版本的 Zabbix 5.0 组件;
  • alpine-5.0.* - 基于 Alpine Linux 镜像的不同次要版本的 Zabbix 5.0 组件,其中 * 代表 Zabbix 组件的次要版本;
  • ubuntu-5.0.* - 基于 Ubuntu 镜像的不同次要版本的 Zabbix 5.0 组件,其中 * 代表 Zabbix 组件的次要版本

使用方法

环境变量

所有 Zabbix 组件镜像都提供环境变量来控制配置。 这些环境变量在每个组件镜像仓库中列出。这些环境变量是 Zabbix 配置文件中的选项,但具有不同的命名方法。 例如,ZBX_LOGSLOWQUERIES 等于来自 Zabbix server 和 Zabbix proxy 配置文件的 LogSlowQueries

一些配置选项是不允许更改的。例如,PIDFileLogType

其中,一些组件有特定的环境变量,而这些环境变量在官方 Zabbix 配置文件并不存在:

变量 * 组件** **描 **
DB_SERVER_HOST Server
Proxy
Web interface
这个变量指的是 MySQL 或 PostgreSQL 的 IP 或 DNS。
默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为mysql-serverpostgres-server
DB_SERVER_PORT Server
Proxy
Web interface
这个变量指的是 MySQL 或 PostgreSQL 的端口。
默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为 '3306' 或 '5432' 。
MYSQL_USER Server
Proxy
Web-interface
MySQL 数据库用户。
默认情况下,这个值为 'zabbix'。
MYSQL_PASSWORD Server
Proxy
Web interface
MySQL 数据库密码。
默认情况下,这个值为 'zabbix'。
MYSQL_DATABASE Server
Proxy
Web interface
Zabbix 数据库库名。
默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 'zabbix' 和 'zabbix_proxy' 。
POSTGRES_USER Server
Web interface
PostgreSQL 数据库用户。
默认情况下,这个值为 'zabbix'。
POSTGRES_PASSWORD Server
Web interface
PostgreSQL 数据库密码。
默认情况下,这个值为 'zabbix'。
POSTGRES_DB Server
Web interface
Zabbix 数据库库名。
默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 'zabbix' 和 'zabbix_proxy' 。
TZ Web-interface PHP 时区格式。所有支持的时区列表为 php.net.
默认情况下,这个值为 'Europe/Riga' 。
ZBX_SERVER_NAME Web interface Web 界面右上角显示的安装名称。
默认情况下,这个值为 'Zabbix Docker' 。
ZBX_JAVAGATEWAY_ENABLE Server
Proxy
是否启用 Zabbix Java gateway 以采集与 Java 相关的检查数据。
默认情况下,这个值为 "false" 。
ZBX_ENABLE_SNMP_TRAPS Server
Proxy
是否启用 SNMP trap feature 功能。这要求 zabbix-snmptraps 实例并共享 /var/lib/zabbix/snmptraps 卷到 Zabbix server 或 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 相关的文件。这些文件名指定使用 ZBX_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_TLSPSKFILE 环境变量。
Zabbix server
/usr/lib/zabbix/alertscripts 该卷用于自定义告警脚本。即 zabbix_server.conf 中的 AlertScriptsPath 参数。
/usr/lib/zabbix/externalscripts 该卷用于 外部检查。即在 zabbix_server.conf 中的 ExternalScripts 参数。
/var/lib/zabbix/modules 该卷允许通过 LoadModule 功能加载额外的模块以扩展 Zabbix agent。
/var/lib/zabbix/enc 该卷用于存放 TLS 相关的文件。这些文件名指定使用 ZBX_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_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.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker 的 volumes_from 选项继承。可以通过共享卷,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 'true' 以启用 SNMP trap 处理功能。
/var/lib/zabbix/mibs 该卷允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。
Zabbix proxy
/usr/lib/zabbix/externalscripts 该卷用于使用 外部检查。即在 zabbix_proxy.conf 中的 ExternalScripts 参数。
/var/lib/zabbix/modules 该卷允许通过 LoadModule 功能加载额外的模块以扩展 Zabbix server。
/var/lib/zabbix/enc 该卷用于存放 TLS 相关的文件。这些文件名指定使用 ZBX_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_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.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker的 volumes_from 选项继承。可以通过共享卷,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 'true' 以启用 SNMP trap 处理功能。
/var/lib/zabbix/mibs 该卷允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。
基于 Apache2 Web 服务器的 Zabbix Web 接口
/etc/ssl/apache2 该卷允许为 Zabbix Web 接口启用 HTTPS。该卷必须包含为 Apache2 SSL 连接准备的 ssl.crtssl.key 两个文件。
基于 Nginx Web 服务器的 Zabbix Web 接口
/etc/ssl/nginx 该卷允许为 Zabbix Web 接口启用 HTTPS。该卷必须包含为 Nginx SSL 连接装备的 ssl.crtssl.key 两个文件。
Zabbix snmptraps
/var/lib/zabbix/snmptraps 该卷包含了以接收到的 SNMP traps 命名的 snmptraps.log 日志文件。
/var/lib/zabbix/mibs 该卷允许添加新的 MIB 文件。它不支持子目录,该 MIB 文件必须位于 /var/lib/zabbix/mibs 下。

关于更多的信息请在 Docker Hub 的 Zabbix 官方镜像仓库查看。

使用方法实例

** 示例 1 **

该示例示范了如何使用内置 MySQL 数据库、Zabbix server、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java gateway 来运行 Zabbix 应用。 1.创建专用于Zabbix组件容器的网络:

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

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 \
             -d mysql:8.0 \
             --restart unless-stopped \
             --character-set-server=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password

3.启动Zabbix Java gateway实例

# docker run --name zabbix-java-gateway -t \
             --network=zabbix-net \
             --restart unless-stopped \
             -d zabbix/zabbix-java-gateway:alpine-5.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-5.0-latest

Zabbix服务器实例向主机公开10051 / TCP端口(Zabbix trapper)

5.启动Zabbix Web界面,并将实例与创建的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-5.0-latest

Zabbix Web界面实例向主机公开80 / TCP端口(HTTP)

** 示例 2 **

该示例演示了如何在具有PostgreSQL数据库支持,基于Nginx Web服务器的Zabbix Web界面和SNMP陷阱功能的情况下运行Zabbix服务器。

1.创建专用于Zabbix组件容器的网络:

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

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-5.0-latest

Zabbix snmptrap实例向主机公开162 / UDP端口(SNMP traps)

4.启动Zabbix服务器实例并将该实例与创建的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-5.0-latest

::: noteclassic Zabbix服务器实例将10051 / TCP端口(Zabbix trapper)公开给主机。 ::: 5.启动Zabbix Web界面,并将实例与创建的PostgreSQL服务器和Zabbix服务器实例链接

# 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-5.0-latest

::: noteclassic Zabbix Web界面实例向主机公开443 / TCP端口(HTTPS)。 目录/ etc / ssl / nginx必须包含具有所需名称的证书。 ::: ** 示例 3 **

该示例演示了如何在Red Hat 8上使用podman运行具有MySQL数据库支持的Zabbix服务器,基于Nginx Web服务器的Zabbix Web界面以及Zabbix Java gateway。

1.使用名称zabbix和公开的端口(Web界面,Zabbix server trapper)创建新的Pod:

podman pod create --name zabbix -p 80:8080 -p 10051:10051

2.(可选)在zabbix pod位置启动Zabbix agent容器:

podman run --name zabbix-agent \
           -eZBX_SERVER_HOST="127.0.0.1,localhost" \
           --restart=always \
           --pod=zabbix \
           -d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest

3.在主机上创建./mysql/目录,然后启动Oracle MySQL server 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-50

5.启动Zabbix Java Gateway容器:

podman run --name zabbix-java-gateway -t \
             --restart=always \
             --pod=zabbix \
             -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50

Pod zabbix从zabbix-web-mysql容器的8080 / TCP向主机公开80 / TCP端口(HTTP)。

Docker Compose

Zabbix 为 Docker 提供了定义和运行复杂 Zabbix 组件的 compose 文件。这些 compose 文件可以在 github.com: https://github.com/zabbix/zabbix-docker 上的 Zabbix docker 官方镜像仓库中找到。这些 compose 文件作为示例添加,并支持广泛。例如,Zabbix proxy 支持 MySQL和 SQLite3。

以下为几个不同版本的 compose 文件:

文件名 ** 述**
docker-compose_v3_alpine_mysql_latest.yaml 该 compose 文件运行基于 Alpine Linux 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。
docker-compose_v3_alpine_mysql_local.yaml 该 compose 文件本地构建和运行基于 Alpine Linux 的 Zabbix 5.0 最新版本的组件,支持 MySQL数据库。
docker-compose_v3_alpine_pgsql_latest.yaml 该 compose 文件运行基于 Alpine Linux 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。
docker-compose_v3_alpine_pgsql_local.yaml 该 compose 文件本地构建和运行基于 Apline Linux 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。
docker-compose_v3_centos_mysql_latest.yaml 该 compose 文件运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。
docker-compose_v3_centos_mysql_local.yaml 该 compose 文件本地构建和运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。
docker-compose_v3_centos_pgsql_latest.yaml 该 compose 文件运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。
docker-compose_v3_centos_pgsql_local.yaml 该 compose 文件本地构建和运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。
docker-compose_v3_ubuntu_mysql_latest.yaml 该 compose 文件运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。
docker-compose_v3_ubuntu_mysq l_local.yaml 该 compose 文件本地构建和运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。
docker-compose_v3_ubuntu_pgsql_latest.yaml 该 compose 文件运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。
docker-compose_v3_ubuntu_pgsql_local.yaml 该 compose 文件本地构建和运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 PosegreSQL 数据库。

可用的Docker compose文件支持Docker Compose的版本3。

存储

撰写文件被配置为支持主机上的本地存储。 当您使用compose文件运行Zabbix组件时,Docker Compose将在文件夹中使用compose文件创建一个zbx_env目录。 该目录将包含与上述“”部分中描述的结构相同的目录以及用于数据库存储的目录。

此外,还有卷 /etc/localtime/etc/timezone 下的文件为只读模式。

环境变量文件

在 github.com 上与存放 compose 文件的同一目录中,您可以在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件的命令与 .env_<type of component> 类似。

示例

** 示例 1 **

# git checkout 5.0
       # docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d

该命令将为每个Zabbix组件下载最新的Zabbix 5.0映像,并在分离模式下运行它们。

不要忘记从 github.com 的 Zabbix 官方镜像仓库下载 .env_<type of component> 文件和 compose 文件。

** 示例 2 **

# git checkout 5.0
       # docker-compose -f ./docker-compose_v3_ubuntu_mysql_local.yaml up -d

该命令将下载基本映像Ubuntu 20.04(本地),然后在本地构建Zabbix 5.0组件并以分离模式运行它们。