前言:本文涉及 MySQL 和 Docker 的基础使用,内容偏入门,相关知识点大家也可自行通过 AI 查询学习。身处信息爆炸的时代,我们何其幸运,海量优质知识与学习资源都触手可及。谨以此文记录成长路上的每一步,愿与大家一同学习,共同进步

Zabbix 理论

Zabbix 是一款成熟的企业级开源监控解决方案,能够监控网络、服务器、虚拟化、云服务、数据库、应用程序等成千上万的 IT 组件。它的核心设计思想是集中式采集、存储、展示与告警

核心架构组件

  1. Zabbix Server

    • 监控系统的中枢,负责数据收集、告警计算、配置管理、与数据库交互。

    • 通过轮询或接收主动推送的方式从被监控对象获取数据。

  2. Zabbix Agent

    • 部署在被监控主机上的守护进程,可工作在主动模式(Agent 主动向 Server 上报数据)或被动模式(Server 定期向 Agent 询问数据)。

    • 支持操作系统内置指标(CPU、内存、磁盘、网络等)和自定义脚本扩展。

  3. Zabbix Proxy(可选)

    • 用于分布式监控场景,部署在远程区域,代理 Server 收集数据并缓存,减轻 Server 压力,尤其适用于跨数据中心或网络环境较差的场景。

  4. Database

    • 存储所有配置信息、历史数据和告警记录。支持 MySQL、PostgreSQL、Oracle 等关系型数据库。

    • 数据量较大时,建议将数据库单独部署在高性能机器上。

  5. Zabbix Frontend

    • 基于 PHP 的 Web 界面,提供仪表盘、图表、配置入口、告警管理等功能。

    • 通常与 Zabbix Server 部署在同一主机,也可分离。

数据采集方式

  • Zabbix Agent:用于监控操作系统内部指标,效率高,支持密钥加密。

  • SNMP:用于网络设备、打印机、UPS 等支持 SNMP 协议的设备。

  • IPMI:用于监控服务器硬件(温度、风扇、电源等)。

  • JMX:监控 Java 应用程序(如 Tomcat、Kafka)。

  • 自定义脚本:通过 UserParameter 或外部检查执行任意脚本获取数据。

监控流程

  1. 创建主机:(Host)

  2. 关联模板:(Template)模板包含预先定义的监控项、触发器、图形等,可复用

  3. 数据采集:Zabbix Server 根据配置的监控项(Item)定期向 Agent 或设备发起请求

  4. 数据存储:采集到的值存入数据库(历史数据可设置保留周期)

  5. 触发器评估:对采集到的值进行阈值判断,产生告警

  6. 动作执行:当触发器触发时,执行预定义动作,如发送邮件、执行远程命令等

  7. 可视化与报表:通过 Web 界面查看图表、仪表盘、报表


Zabbix实战

环境

主机 IP操作系统角色备注
192.168.206.131Debian 12MySQL 数据库已安装 MySQL 8.4.6
192.168.206.136openEuler 22.03Zabbix Agent作为监控主服务器
192.168.206.133CentOS Stream 10Zabbix Server + Web(Docker 容器)作为监控主服务器

说明:为了完整展示多机部署,我们将数据库与 Zabbix Server 分离。如果资源有限,也可以将数据库与 Server 合并。


第一阶段:数据库准备(在 192.168.206.131 上执行)

由于 Debian 已安装 MySQL 8.4.6,我们只需创建 Zabbix 所需的数据库和用户。

  1. 登录 MySQL

    mysql -u root -p
  2. 创建数据库与用户

    CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
    #创建一个名为 zabbix 的数据库,使用 UTF-8 四字节编码,支持完整的 Unicode 字符(包括 emoji、中文等)COLLATE utf8mb4_bin意为使用 二进制校对规则,区分大小写,按字节比较(性能更好,精确匹配)
    ​
    CREATE USER 'zabbix'@'192.168.206.136' IDENTIFIED BY '自定义密码';
    #创建一个zabbix用户,仅192.168.206.136可连接,设置登录密码。允许从任何主机连接,使用 'zabbix'@'%'
    ​
    GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'192.168.206.136';
    #授予192.168.206.136对数据库zabbix所有权限(SELECT、INSERT、UPDATE、DELETE、CREATE、DROP 等)
    ​
    SET GLOBAL log_bin_trust_function_creators = 1;
    #允许在启用二进制日志(binlog)时创建函数/触发器,MySQL 默认为了 主从复制安全,限制创建函数,Zabbix 需要创建存储过程和函数,因此需要开启此选项,GLOBAL 表示全局生效,重启后失效(如需永久生效需改 my.cnf)
    ​
    FLUSH PRIVILEGES;
    #MySQL 会将权限表加载到内存中缓存,执行此命令强制重新加载,使上述用户和权限修改立即生效
    ​
    SELECT user, host FROM mysql.user;
    #查询验证当前 MySQL 中所有用户及其允许连接的主机

    注意:

    • log_bin_trust_function_creators 临时开启,等导入数据后可以关闭。

  3. 导入 Zabbix 初始数据 需要先下载 Zabbix 源码包或 schema 文件。我们选择最新稳定版 Zabbix 7.0 LTS。

    # 下载 Zabbix 7.0 的源码包(包含 SQL 文件)
    wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.8.tar.gz
    tar -xzf zabbix-7.0.8.tar.gz
    cd zabbix-7.0.8/database/mysql
    # 按顺序导入(注意路径sql实际路径)
    mysql -u root -p zabbix < schema.sql
    mysql -u root -p zabbix < images.sql
    mysql -u root -p zabbix < data.sql
  4. 关闭 log_bin_trust_function_creators

    mysql -u root -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"

第二阶段:部署 Zabbix Server 与前端 (192.168.206.133 Centos stream10)

# 启动 Zabbix Server 容器
docker run -d \
  --name zabbix-server \
  -e DB_SERVER_HOST=192.168.206.131 \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=xbsix123 \
  -e MYSQL_DATABASE=zabbix \
  -p 10051:10051 \
  zabbix/zabbix-server-mysql:alpine-7.0-latest
​
# 启动 Zabbix Web 容器(Nginx + PHP)
docker run -d \
  --name zabbix-web \
  -e ZBX_SERVER_HOST=192.168.206.133 \
  -e DB_SERVER_HOST=192.168.206.131 \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=xbsix123 \
  -e MYSQL_DATABASE=zabbix \
  -p 80:8080 \
  zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest

访问 http://192.168.206.133,即部署前端的服务器ip,使用默认账号 Admin / 密码 zabbix 登录。


第三阶段:部署被监控 Agent(在192.168.206.136 openeuler上执行)

从 Zabbix 官网下载源码编译安装 Agent。

  1. 安装编译依赖

    # 1. 安装编译依赖(必须!否则configure会报错)
    sudo apt update
    sudo apt install -y gcc make automake autoconf libpcre3-dev
  2. 下载源码并编译

    # 2. 下载 Zabbix 7.0.8 源码
    wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.8.tar.gz
    
    # 3. 解压
    tar -xzf zabbix-7.0.8.tar.gz
    
    # 4. 进入目录
    cd zabbix-7.0.8
    
    # 5. 编译配置(只安装Agent)
    ./configure --enable-agent --prefix=/usr/local/zabbix
    
    # 6. 编译
    make
    
    # 7. 安装
    make install
    
  3. 创建配置文件 

    #复制示例配置文件
    cp /usr/local/zabbix/etc/zabbix_agentd.conf /usr/local/zabbix/etc/zabbix_agentd.conf.bak
    #修改配置文件/usr/local/zabbix/etc/zabbix_agentd.conf
    Server=192.168.206.133        # Zabbix Server IP
    ServerActive=192.168.206.133  # 主动模式服务器地址
    Hostname=openeuler            # 该主机在 Zabbix 前端显示的名称
  4. 创建 systemd 服务文件(以便开机自启)

    #建文件之前需要为agent创一个专用账号和组,并且将文件目录权限修改
    groupadd zabbix
    useradd -r -g zabbix -s /sbin/nologin zabbix
    chown -R zabbix:zabbix /usr/local/zabbix/
    chmod 755 /usr/local/zabbix/sbin/zabbix_agentd
    
    #/etc/systemd/system/系统服务目录,放这里才能开机自启、用 systemctl 管理。
    cat > /etc/systemd/system/zabbix-agent.service <<'EOF'
    [Unit]
    #服务的描述,方便你识别
    Description=Zabbix Agent  
    #agent 要连网,网络启动完成后,再启动ZabbixAgent
    After=network.target
    
    [Service]
    #普通服务类型(最常用),直接启动二进制程序
    Type=simple
    #进程号文件,系统用它识别 Zabbix 进程是否在运行
    PIDFile=/tmp/zabbix_agentd.pid
    #用 zabbix 用户 启动服务(安全,不用 root 跑)
    User=zabbix
    #用 zabbix 用户组
    Group=zabbix
    
    #/usr/local/zabbix/sbin/zabbix_agentd:agent 主程序
    #-f:前台运行(systemd 管理需要)
    #-c ...:指定配置文件路径
    ExecStart=/usr/local/zabbix/sbin/zabbix_agentd -f -c /usr/local/zabbix/etc/zabbix_agentd.conf
    #服务停止时,杀死 zabbix 进程
    ExecStop=/usr/bin/pkill zabbix_agentd
    #崩溃自动重启,保证 agent 一直在线
    Restart=on-failure
    
    [Install]
    #表示多用户模式下开机自启,执行systemctl enable zabbix-agent 就是靠这个生效
    WantedBy=multi-user.target
    EOF
  5. 启动并且设置自启动Agent

    #重载
    systemctl daemon-reload
    #启动
    systemctl start zabbix-agent
    # 开机自启
    systemctl enable zabbix-agent
    #查看状态
    systemctl status zabbix-agent
  6. 防火墙放行 Agent 端口(10050)

    firewall-cmd --permanent --add-port=10050/tcp
    firewall-cmd --reload

第四阶段:在 Zabbix 前端添加主机并开始监控

  1. 登录 Zabbix Webhttp://192.168.206.136,用户名 Admin,密码你设置的。

  2. 添加主机

    • 点击左侧菜单 Monitoring → Hosts,点击右上角 Create host

    • Host name:输入Agent 配置文件中的 Hostname

    • Visible name:可选,便于识别。

    • Groups:点击 Select,选择一个已有组(如 Linux servers)或新建组。

    • Interfaces:点击 Add,选择 Agent,输入 IP 192.168.206.136,端口 10050

    • Templates:点击 Select,选择 Linux by Zabbix agent(这是官方提供的模板,包含了 CPU、内存、磁盘等基础监控项)。点击 Add 保存。

  3. 等待数据 几秒钟后,点击 Monitoring → Latest data,过滤主机 ,即可看到采集到的数据。

  1. 测试告警 可以尝试在 Agent 主机上模拟一个高负载,或者手动修改触发器的阈值,观察 Monitoring → Problems 是否出现告警。


第五阶段(可选):配置邮件告警

这一块内容目前本人还在探索中,后续补充


总结

至此,已经完成了:

  • 一套分离式 Zabbix 监控环境的搭建(数据库、Server、前端、Agent)。

  • 添加了一台 Linux 主机并应用官方模板,实现了基础监控。

  • 了解了告警动作的配置方法。

Zabbix 功能非常丰富,后续可以探索:

  • 自定义监控项(UserParameter)

  • 图形化仪表盘

  • 自动发现(LLD)

  • 分布式监控(Proxy)

  • 与 CMDB、自动化工具集成

建议在生产环境部署前,仔细阅读官方文档,并根据实际规模规划数据库分区、数据保留策略等。

本人在搭建过程中,遇到防火墙报错,以及数据库版本不匹配等等问题,网络问题可以用telnet ip 10050排查,数据库重新导入合适版本文件即可。

更多推荐