原生Linux部署灵活性高,适合复杂环境,但部署过程较繁琐。Docker部署便捷性高,易迁移,适合快速实现。


【Zabbix】Zabbix 保姆级安装指南:从零开始打造高效监控系统,轻松掌握运维利器!

Zabbix在原生Linux命令部署与Docker部署的对比:

原生Linux命令部署

  1. 特点

    • 直接在物理或虚拟机上安装Zabbix Server、Agent、Web界面等组件。
    • 需要手动配置依赖项,如数据库(MySQL/PostgreSQL)和Web服务(Apache/Nginx)。
    • 更灵活,可根据需求自定义环境和配置。
  2. 优势

    • 更深入的掌控:能精细调整系统和服务。
    • 更适合复杂环境:适合特定的操作系统版本和硬件环境。
    • 支持长期维护:适合长期运行的生产环境。
  3. 劣势

    • 安装和配置过程较繁琐,需要较高的运维技能。
    • 升级或迁移时可能会耗费时间。

Docker部署

  1. 特点

    • 利用容器技术运行Zabbix Server、Agent和Web界面。
    • 使用预构建的Docker镜像(官方或社区提供)。
  2. 优势

    • 快速部署:使用Docker Compose文件快速启动多个服务。
    • 高度便携性:容器可轻松迁移到其他宿主机。
    • 隔离性强:不同的服务运行在独立容器中,减少冲突。
  3. 劣势

    • 对Docker技术有一定要求。
    • 容器化可能对性能有轻微影响,尤其是高负载环境。
    • 适合短期使用或快速验证,但长期运行需要更好的容器管理方案(如Kubernetes)。

  • 对比总结
特性 原生Linux部署 Docker部署
安装复杂度
运行性能 高,直接运行在宿主机上 较高,需一定开销
灵活性 较低,受容器限制
迁移便捷性 较低
维护性 高(需手动管理) 较高(容器管理简便)

zabbix版本和源代码:zabbix源码网址

1. 安装 Docker 和 Docker Compose

确保服务器上已安装 Docker 和 Docker Compose。也可以使用默认的docker compose
如果未安装,可以参考官方文档:
Docker 安装指南
Docker-Compose 安装指南

创建目录

# 用于存储 Zabbix 服务器容器的配置文件等相关数据
mkdir -p /data2/zabbix/zabbix-server   
# 用于存储 Zabbix 服务器容器中的告警脚本
mkdir -p /data2/zabbix/alertscripts     
# 用于存储 Zabbix Web 容器中的字体文件
mkdir -p /data2/zabbix/fonts   
# 用于存储 MySQL 数据库容器的数据文件          
mkdir -p /data2/zabbix/db               

mkdir -p /data2/zabbix/zabbix-server    
mkdir -p /data2/zabbix/alertscripts     
mkdir -p /data2/zabbix/fonts           
mkdir -p /data2/zabbix/db     
2. 编辑zabbix_server.conf

在项目目录中创建一个 docker-compose.yml 文件,并将以下内容粘贴到文件中:

LogType=console
DBHost=zabbix-mysql
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306
User=zabbix

准备字体文件:下载 DejaVuSans.ttf 字体文件,并放到项目目录的 fonts 子目录中:


中文简体文件添加
从主机(C:\Windows\Fonts)上传一个.ttf的字体文件到/data2/zabbix/fonts目录
可使用rz命令,或者ftp,或远程传输工具(如:xftp)
并将文件名称改成DejaVuSans.ttf(yml文件中有指明)

3. 编写docker-compose.yml
services:
  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=root
      - 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=root
    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

  zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:centos-5.2-latest
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime
    networks:
      - zbx_net
  zabbix-server-mysql:
    image: zabbix/zabbix-server-mysql:centos-5.2-latest
    restart: always
    volumes:
      - /data2/zabbix/zabbix-server:/etc/zabbix
      - /data2/zabbix/alertscripts:/usr/lib/zabbix/alertscripts
      - /etc/localtime:/etc/localtime
    ports:
      - 10052:10051
    environment:
      - DB_SERVER_HOST=zabbix-mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=root
      - 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=10052
    networks:
      - zbx_net

networks:
  zbx_net:
    driver: bridge
4. 启动docker compose

启动服务
在项目目录中运行以下命令启动所有服务:

#-d 参数表示在后台运行。
docker compose up -d
#检查容器状态:使用以下命令检查所有容器是否正常运行:up
docker ps

定义了一个完整的 Zabbix 监控系统,包括:

  1. Zabbix Web 前端(基于 Nginx 和 MySQL)
  2. Zabbix 服务器(基于 MySQL)
  3. Zabbix Java 网关
  4. Zabbix 代理
  5. MySQL 数据库

所有服务都连接到一个 Docker 网络 zbx_net,并且通过 depends_on 确保服务启动的顺序。通过挂载本地目录和文件,确保了数据的持久化和配置的自定义。

version: '3'  # 使用 Docker Compose 版本 3

services:
  zabbix-web-nginx-mysql:
    image: zabbix/zabbix-web-nginx-mysql:centos-5.2-latest  # Zabbix Web 前端,基于 Nginx 和 MySQL
    restart: always  # 容器总是自动重启,确保高可用性
    environment:
      - DB_SERVER_HOST=zabbix-mysql  # 指定 MySQL 数据库服务器的主机名
      - MYSQL_DATABASE=zabbix  # 指定使用的数据库名称
      - MYSQL_USER=zabbix  # 指定数据库用户
      - MYSQL_PASSWORD=zabbix  # 指定数据库用户的密码
      - MYSQL_ROOT_PASSWORD=root  # 指定 MySQL root 用户的密码
      - ZBX_SERVER_HOST=zabbix-server-mysql  # 指定 Zabbix 服务器的主机名
    ports:
      - 8080:8080  # 将容器的 8080 端口映射到主机的 8080 端口,允许通过主机的 8080 端口访问 Zabbix Web 界面
    volumes:
      - /etc/localtime:/etc/localtime  # 同步主机和容器的时间
      - /data2/zabbix/fonts/DejaVuSans.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf  # 替换 Zabbix Web 界面中的字体文件
    networks:
      - zbx_net  # 将容器连接到 zbx_net 网络
    depends_on:
      - zabbix-server-mysql  # 依赖 Zabbix 服务器
      - zabbix-mysql  # 依赖 MySQL 数据库

  zabbix-mysql:
    image: mysql:8.0.23  # MySQL 数据库服务
    restart: always  # 容器总是自动重启
    ports:
      - 3306:3306  # 将容器的 3306 端口映射到主机的 3306 端口,允许通过主机的 3306 端口访问 MySQL 数据库
    environment:
      - MYSQL_DATABASE=zabbix  # 指定创建的数据库名称
      - MYSQL_USER=zabbix  # 指定数据库用户
      - MYSQL_PASSWORD=zabbix  # 指定数据库用户的密码
      - MYSQL_ROOT_PASSWORD=root  # 指定 MySQL root 用户的密码
    command:
      - mysqld
      - --default-authentication-plugin=mysql_native_password  # 使用 MySQL 原生密码认证插件
      - --character-set-server=utf8  # 设置服务器字符集为 UTF-8
      - --collation-server=utf8_bin  # 设置服务器排序规则为 UTF-8 二进制
    volumes:
      - /etc/localtime:/etc/localtime  # 同步主机和容器的时间
      - /data2/zabbix/db:/var/lib/mysql  # 将 MySQL 数据目录挂载到本地,确保数据持久化
    networks:
      - zbx_net  # 将容器连接到 zbx_net 网络

  zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:centos-5.2-latest  # Zabbix Java 网关服务,用于监控 Java 应用程序
    restart: always  # 容器总是自动重启
    volumes:
      - /etc/localtime:/etc/localtime  # 同步主机和容器的时间
    networks:
      - zbx_net  # 将容器连接到 zbx_net 网络

  zabbix-server-mysql:
    image: zabbix/zabbix-server-mysql:centos-5.2-latest  # Zabbix 服务器,基于 MySQL 数据库
    restart: always  # 容器总是自动重启
    volumes:
      - /data2/zabbix/zabbix-server:/etc/zabbix  # 挂载 Zabbix 服务器的配置文件目录
      - /data2/zabbix/alertscripts:/usr/lib/zabbix/alertscripts  # 挂载 Zabbix 的告警脚本目录
      - /etc/localtime:/etc/localtime  # 同步主机和容器的时间
    ports:
      - 10052:10051  # 将容器的 10051 端口映射到主机的 10052 端口,允许通过主机的 10052 端口访问 Zabbix 服务器
    environment:
      - DB_SERVER_HOST=zabbix-mysql  # 指定 MySQL 数据库服务器的主机名
      - MYSQL_DATABASE=zabbix  # 指定使用的数据库名称
      - MYSQL_USER=zabbix  # 指定数据库用户
      - MYSQL_PASSWORD=zabbix  # 指定数据库用户的密码
      - MYSQL_ROOT_PASSWORD=root  # 指定 MySQL root 用户的密码
      - ZBX_JAVAGATEWAY=zabbix-java-gateway  # 指定 Zabbix Java 网关的主机名
      - ZBX_JAVAGATEWAY_ENABLE=true  # 启用 Java 网关
      - ZBX_JAVAGATEWAYPORT=10052  # 指定 Java 网关的端口
    depends_on:
      - zabbix-mysql  # 依赖 MySQL 数据库
    networks:
      - zbx_net  # 将容器连接到 zbx_net 网络

  zabbix-agent:
    image: zabbix/zabbix-agent:centos-5.2-latest  # Zabbix 代理,用于在被监控的主机上收集数据
    restart: always  # 容器总是自动重启
    ports:
      - 10050:10050  # 将容器的 10050 端口映射到主机的 10050 端口,允许通过主机的 10050 端口访问 Zabbix 代理
    environment:
      - ZBX_HOSTNAME=Zabbix server  # 指定 Zabbix 代理的主机名
      - ZBX_SERVER_HOST=zabbix-server-mysql  # 指定 Zabbix 服务器的主机名
      - ZBX_SERVER_PORT=10052  # 指定 Zabbix 服务器的端口
    networks:
      - zbx_net  # 将容器连接到 zbx_net 网络

networks:
  zbx_net:
    driver: bridge  # 定义一个名为 zbx_net 的 Docker 网络,使用 bridge 驱动
5. 访问 Zabbix Web 界面

Zabbix Web 界面通过 zabbix-web-nginx-mysql 服务暴露在主机的 8080 端口。在浏览器中访问:

http://<你的服务器IP>:8080
例如,如果服务器 IP 是 10.0.0.15则访问:
http://10.0.0.15:8080

完成 Zabbix 安装向导
第一次访问 Zabbix Web 界面时,会自动进入安装向导。按照以下步骤完成配置:

参考:【Zabbix】Zabbix 保姆级安装指南:从零开始打造高效监控系统,轻松掌握运维利器!

完成安装
安装完成后,会显示一个确认页面。
点击 Finish,然后使用默认用户名和密码登录:
Username: Admin
Password: zabbix


总结:通过以上步骤,您可以成功使用 Docker Compose 部署 Zabbix 监控系统。部署完成后,可以通过 Zabbix Web 界面进行监控和管理。如果遇到问题,可以通过日志和配置文件进行排查。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐