跳至主要內容

zabbix使用容器方式部署

PaperDragon...大约 8 分钟

zabbix使用容器方式部署

近期做了一些民间项目,不需要极好的可靠性,要求快速部署和删除。所以做了个Docker方案。进行记录

参考资料:

  • zabbix-docker镜像构建的文档在这里
    • https://github.com/zabbix/zabbix-docker
  • 该页面所有资料来自官网
    • https://www.zabbix.com/documentation/current/zh/manual/installation/containers

Zabbix-Server

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

组件化和降低耦合度能够更加缩小软件的体积。更容易部署和升级。更容易实现负载均衡和高可用。

变量列表

变量组件描述
DB_SERVER_HOSTServer Proxy Web 界面这个变量指的是 MySQL 或 PostgreSQL 的 IP 或 DNS。 默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为mysql-server 或 postgres-server
DB_SERVER_PORTServer Proxy Web 界面这个变量指的是 MySQL 或 PostgreSQL 的端口。 默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为 '3306' 或 '5432' 。
MYSQL_USERServer Proxy Web 界面MySQL 数据库用户。 默认情况下,这个值为 'zabbix'。
MYSQL_PASSWORDServer Proxy Web 界面MySQL 数据库密码。 默认情况下,这个值为 'zabbix'。
MYSQL_DATABASEServer Proxy Web 界面Zabbix 数据库库名。 默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 'zabbix' 和 'zabbix_proxy' 。
POSTGRES_USERServer Web 界面PostgreSQL 数据库用户。 默认情况下,这个值为 'zabbix'。
POSTGRES_PASSWORDServer Web 界面PostgreSQL 数据库密码。 默认情况下,这个值为 'zabbix'。
POSTGRES_DBServer Web 界面Zabbix 数据库库名。 默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 'zabbix' 和 'zabbix_proxy' 。
PHP_TZWeb 界面PHP 时区格式。支持时区的完整列表参照 php.netopen in new window。 默认情况下,这个值为 'Europe/Riga' 。
ZBX_SERVER_NAMEWeb 界面Web 界面右上角显示的安装名称。 默认情况下,这个值为 'Zabbix Docker' 。
ZBX_JAVAGATEWAY_ENABLEServer Proxy是否启用 Zabbix Java 网关 以采集与 Java 相关的检查数据。 默认情况下,这个值为 "false" 。
ZBX_ENABLE_SNMP_TRAPSServer Proxy是否启用 SNMP trap 功能。 这需要存在 zabbix-snmptraps 容器实例,并共享 /var/lib/zabbix/snmptraps volume 到 Zabbix server 或 proxy。

Volumes

Image 中允许使用一些挂载点。根据 Zabbix 组件类型,这些挂载点各不相同:

Volume描述
Zabbix agent
/etc/zabbix/zabbix_agentd.d这个 volume 允许包含 *.conf 文件并使用 UserParameter 扩展 Zabbix agent。
/var/lib/zabbix/modules这个 volume 允许加载其它 module 并使用 LoadModuleopen in new window 功能扩展 Zabbix agent。
/var/lib/zabbix/enc这个 volume 用于存放 TLS 相关的文件。这些文件名使用 ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILEZBX_TLSPSKFILE 等环境变量指定。
Zabbix server
/usr/lib/zabbix/alertscripts这个 volume 用于自定义告警脚本。即 zabbix_server.confopen in new window 中的 AlertScriptsPath 参数。
/usr/lib/zabbix/externalscripts这个 volume 用于 外部检查open in new window。即 zabbix_server.confopen in new window 中的 ExternalScripts 参数。
/var/lib/zabbix/modules这个 volume 允许通过 LoadModuleopen in new window 功能加载额外的模块以扩展 Zabbix server。
/var/lib/zabbix/enc这个 volume 用于存放 TLS 相关的文件。这些文件名使用 ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILEZBX_TLSPSKFILE 等环境变量指定。
/var/lib/zabbix/ssl/certs这个 volume 用于存放客户端认证的 SSL 客户端认证文件。即 [zabbix_server.conf] 中的 SSLCertLocation 参数。
/var/lib/zabbix/ssl/keys这个 volume 用于存放客户端认证的 SSL 私钥文件。即 zabbix_server.confopen in new window 中的 SSLKeyLocation 参数。
/var/lib/zabbix/ssl/ssl_ca这个 volume 用于存放 SSL 服务器证书认证的证书颁发机构(CA)文件。即 zabbix_server.confopen in new window 中的 SSLCALocation 参数。
/var/lib/zabbix/snmptraps这个 volume 用于存放 snmptraps.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker 的 --volumes-from 选项继承。可以通过共享 volume ,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 'true' 以启用 SNMP trap 处理功能。
/var/lib/zabbix/mibs这个 volume 允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。
Zabbix proxy
/usr/lib/zabbix/externalscripts这个 volume 用于 外部检查open in new window。即 zabbix_proxy.confopen in new window 中的 ExternalScripts 参数。
/var/lib/zabbix/modules这个 volume 允许通过 LoadModuleopen in new window 功能加载额外的模块以扩展 Zabbix server。
/var/lib/zabbix/enc这个 volume 用于存放 TLS 相关的文件。这些文件名使用 ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILEZBX_TLSPSKFILE 等环境变量指定。
/var/lib/zabbix/ssl/certs这个 volume 用于存放客户端认证的 SSL 客户端认证文件。即 zabbix_proxy.confopen in new window 中的 SSLCertLocation 参数。
/var/lib/zabbix/ssl/keys这个 volume 用于存放客户端认证的 SSL 私钥文件。即 zabbix_proxy.confopen in new window 中的 SSLKeyLocation 参数。
/var/lib/zabbix/ssl/ssl_ca这个 volume 用于存放 SSL 服务器证书认证的证书颁发机构(CA)文件。即zabbix_proxy.confopen in new window 中的 SSLCALocation 参数。
/var/lib/zabbix/snmptraps这个 volume 用于存放 snmptraps.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker 的 --volumes-from 选项继承。可以通过共享 volume ,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 'true' 以启用 SNMP trap 处理功能。
/var/lib/zabbix/mibs这个 volume 允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。
基于 Apache2 web 服务器的 Zabbix web 界面
/etc/ssl/apache2这个 volume 允许为 Zabbix Web 界面启用 HTTPS。这个 volume 必须包含为 Apache2 SSL 连接准备的 ssl.crtssl.key 两个文件。
基于 Nginx web 服务器的 Zabbix web 界面
/etc/ssl/nginx这个 volume 允许为 Zabbix Web 接口启用 HTTPS。这个 volume 必须包含为 Nginx SSL 连接装备的 ssl.crtssl.key 两个文件。
Zabbix snmptraps
/var/lib/zabbix/snmptraps这个 volume 包含了已接收到的 SNMP traps 命名的 snmptraps.log日志文件。
/var/lib/zabbix/mibs这个 volume 允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。

案例来自官网

示例1

该示例示范了如何运行 MySQL 数据库支持的 Zabbix Server 、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java 网关。

  1. 创建专用于 Zabbix 组件容器的网络:
# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
  1. 启动空的 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
  1. 启动 Zabbix Java 网关实例:
# docker run --name zabbix-java-gateway -t \
             --network=zabbix-net \
             --restart unless-stopped \
             -d zabbix/zabbix-java-gateway:alpine-5.4-latest
  1. 启动 Zabbix server 实例,并将其关联到已创建的 MySQL server 实例:
# 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.4-latest

Zabbix server 实例将 10051/TCP 端口(Zabbix trapper)暴露给主机。

  1. 启动 Zabbix Web 界面,并将其关联到已创建的 MySQL server 和 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.4-latest

Zabbix web 界面实例将 80/TCP 端口(HTTP)暴露给主机。

示例 2

该示例示范了如何运行 PostgreSQL 数据库支持的 Zabbix server、基于 Nginx Web 服务器的 Zabbix Web 界面和 SNMP trap功能。

  1. 创建专用于 Zabbix 组件容器的网络:
# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
  1. 启动空的 PostgreSQL server 实例:
# 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
  1. 启动 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.4-latest

Zabbix snmptrap 实例将 162/UDP 端口(SNMP traps)暴露给主机。

  1. 启动 Zabbix server 实例,并将其关联到已创建的 PostgreSQL server 实例:
# 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.4-latest

Zabbix server 实例将 10051/TCP 端口(Zabbix trapper)暴露给主机。

  1. 启动 Zabbix Web 界面,并将其关联到已创建的 PostgreSQL server 和 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-5.4-latest

Zabbix web 界面实例将 443/TCP 端口(HTTPS)暴露给主机。 /etc/ssl/nginx 目录必须包含具有所需名称的证书。

Zabbix-Agent

docker run --name zabbix-agent -e ZBX_HOSTNAME="some-hostname" -e ZBX_SERVER_HOST="some-zabbix-server" -p 10050:10050 -d zabbix/zabbix-agent:5.0.15-ubuntu
 
some-hostname是主机名,是 Zabbix 代理配置文件中的主机名参数,some-zabbix-server是 Zabbix 服务器或代理的 IP 或 DNS 名称

一键部署

zabbix-server 5.2,mysql 8.0.23

version: '3'

services:
	# web界面
  zabbix-web-nginx-mysql:
    image: zabbix/zabbix-web-nginx-mysql:centos-5.2-latest
    restart: always
    environment:
      - DB_SERVER_HOST=zabbix-mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=123qwe
      - ZBX_SERVER_HOST=zabbix-server-mysql
    ports:
      - 8080:8080
    volumes:
      - /etc/localtime:/etc/localtime
      - /data2/zabbix/fonts/DejaVuSans.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf
    networks:
      - zbx_net
    depends_on:
      - zabbix-server-mysql
      - zabbix-mysql
  # 数据库
  zabbix-mysql:
    image: mysql:8.0.23
    restart: always
    ports:
      - 3306:3306
    environment:
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=123qwe
    command:
      - mysqld
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8
      - --collation-server=utf8_bin
    volumes:
      - /etc/localtime:/etc/localtime
      - /data2/zabbix/db:/var/lib/mysql
    networks:
      - zbx_net
  #  Java 网关容器
  zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:centos-5.2-latest
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime
    networks:
      - zbx_net
  # Zabbix server容器
  zabbix-server-mysql:
    image: zabbix/zabbix-server-mysql:centos-5.2-latest
    restart: always
    volumes:
      - zabbix-server-vol:/etc/zabbix
      - /data2/zabbix/alertscripts:/usr/lib/zabbix/alertscripts
      - /etc/localtime:/etc/localtime
    ports:
      - 10051:10051
    environment:
      - DB_SERVER_HOST=zabbix-mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=123qwe
      - ZBX_JAVAGATEWAY=zabbix-java-gateway
      - ZBX_JAVAGATEWAY_ENABLE=true
      - ZBX_JAVAGATEWAYPORT=10052
    depends_on:
      - zabbix-mysql
    networks:
      - zbx_net
  # 探针
  zabbix-agent:
    image: zabbix/zabbix-agent:centos-5.2-latest
    restart: always
    ports:
      - 10050:10050
    environment:
      - ZBX_HOSTNAME=Zabbix server
      - ZBX_SERVER_HOST=zabbix-server-mysql
      - ZBX_SERVER_PORT=10051
    networks:
      - zbx_net

networks:
  zbx_net:
    driver: bridge

volumes:
  zabbix-server-vol:

解决汉化bug

mkdir alertscripts db fonts

cd fonts
wget https://dl.cactifans.com/zabbix_docker/msty.ttf
mv msty.ttf DejaVuSans.ttf

原x启动 错台了,启动容器

docker compose up -d

访问浏览器8080端口

用户名Admin
密码zabbix

Agent

version: "3"
services:
  zabbix-agent:
    container_name: zabbix-agent
    environment:
      - ZBX_HOSTNAME=some-hostname
      - ZBX_SERVER_HOST=some-zabbix-server
    ports:
      - 10050:10050
    image: zabbix/zabbix-agent:5.2-ubuntu-latest
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3