Zabbix 实践

Zabbix 作为企业级开源分布式监控解决方案,凭借免费开源、跨平台、灵活告警、可视化报表等优势,成为中小团队与大型企业 IT 基础设施监控的首选方案。本文基于 Zabbix 6.0 LTS 稳定版,从核心概念、组件架构、LNMP 环境搭建、服务端 / 客户端部署、邮件告警配置到实战监控,一站式带你掌握 Zabbix 全流程使用。

一、Zabbix 概述

1. 产品定位

Zabbix 由 Zabbix SIA 开发维护,基于 GPLv2 开源协议,可免费使用、二次分发,支持监控服务器、网络设备、应用服务、云平台、容器、业务指标等全场景监控。

2. 版本生命周期

Zabbix 分LTS 长期支持版标准版,生产环境优先选 LTS 保障稳定性:

  • LTS 版:开发周期 1.5 年 → 全面支持 3 年(功能 + 安全更新)→ 有限支持 2 年(仅高危修复)
  • 标准版:开发周期 6 个月 → 全面支持 6 个月 → 有限支持 6 个月
  • 推荐版本:Zabbix 6.0 LTS / 7.0 LTS,兼容主流系统与组件,长期稳定维护

3. 核心监控能力

  • 采集方式:支持主动模式(Agent 推数据)、被动模式(Server 拉数据)、SNMP/JMX/IPMI 等
  • 告警机制:邮件、短信、脚本、告警升级,支持故障自愈
  • 可视化:Web 前端、报表、图形、仪表盘
  • 分布式:Proxy 实现跨机房、网络隔离场景监控

二、Zabbix 核心组件架构

Zabbix 采用服务端 + 客户端分布式架构,核心组件各司其职,支撑全链路监控:

组件 角色 核心功能
Zabbix Server 核心大脑 数据接收、处理、存储、告警判断、任务调度,支持 HA 高可用
Zabbix Agent/Agent2 被监控端 部署在目标主机,采集系统 / 应用数据;Agent2 多线程、插件化,性能更强
Zabbix Proxy 分布式代理 转发采集数据,减轻 Server 负载,适配多机房 / 跨网络场景
Database 数据存储 存储配置、历史 / 趋势数据,支持 MySQL/MariaDB/PostgreSQL/Oracle
Web 界面 可视化控制台 基于 PHP,配置监控、查看数据、管理告警、生成报表
辅助工具 调试 / 自定义采集 Zabbix Get(测试采集)、Zabbix Sender(推送自定义数据)

关键概念速记

  • 监控项(Item):最小采集单元(CPU、内存、流量等)
  • 触发器(Trigger):监控项阈值规则,触发异常状态
  • 动作(Action):异常后执行操作(发邮件、执行脚本)
  • 模板(Template):预配置监控项 / 触发器集合,批量应用简化配置
  • 主机(Host):被监控设备,需关联模板生效

三、生产环境部署:LNMP + Zabbix 6.0 全流程

本文以 CentOS 7 为例,搭建 LNMP 环境(Nginx+MariaDB+PHP),部署 Zabbix 6.0 LTS。

1. 基础环境准备

  • 关闭防火墙与 SELinux

  • 配置静态 IP,同步系统时区

  • 主机名规划:

    • Zabbix Server:192.168.108.50
    • 被监控端:192.168.108.51

2. 部署 LNMP 环境

(1)安装 Nginx
# 配置 Nginx YUM 源
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
enabled=1
gpgcheck=0

# 安装并启动
yum install nginx -y
systemctl start nginx && systemctl enable nginx

# 开放 HTTP 端口
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
(2)安装 MariaDB 10.X(Zabbix 6.0 强制要求)
# 配置 MariaDB 源
vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name=MariaDB
baseurl=https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/
enabled=1
gpgcheck=0

# 安装并初始化
yum install mariadb-server mariadb -y
systemctl enable mariadb --now

# 设置 root 密码
mysql
DELETE FROM mysql.user WHERE User='';
ALTER USER root@localhost IDENTIFIED BY 'root123';
flush privileges;
quit
(3)安装 PHP 7.2 及扩展
# 安装依赖源
yum install epel-release -y
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

# 安装 PHP 组件
yum install php72w php72w-fpm php72w-mysqlnd php72w-gd -y

# 配置 PHP-FPM 运行用户为 nginx
vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx

# 优化 PHP 配置(适配 Zabbix)
vim /etc/php.ini
short_open_tag = On
max_execution_time = 300
memory_limit = 128M
date.timezone = Asia/Shanghai

# 启动服务
systemctl enable php-fpm --now
systemctl restart nginx

3. 配置 Zabbix 专用数据库

mysql -uroot -proot123
# 创建数据库
CREATE DATABASE zabbix character set utf8 collate utf8_bin;
# 创建授权用户
GRANT all privileges ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix123';
GRANT all privileges ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
flush privileges;
quit

4. 编译安装 Zabbix Server

# 安装编译依赖
yum install mysql-devel pcre-devel openssl-devel gcc gcc-c++ make -y

# 创建 Zabbix 用户
useradd -s /sbin/nologin -M zabbix

# 解压源码包并编译
tar zxvf zabbix-6.0.6.tar.gz
cd zabbix-6.0.6
export CFLAGS="-std=gnu99"
./configure --sysconfdir=/etc/zabbix/ --enable-server --with-mysql --with-net-snmp
make && make install

# 导入 Zabbix 初始数据库
cd database/mysql/
mysql -uroot -proot123 zabbix < schema.sql
mysql -uroot -proot123 zabbix < images.sql
mysql -uroot -proot123 zabbix < data.sql

5. 配置 Zabbix Server 并启动

# 修改配置文件
vim /etc/zabbix/zabbix_server.conf
DBPassword=zabbix123
LogFile=/var/log/zabbix_server.log

# 创建日志文件并授权
touch /var/log/zabbix_server.log
chown zabbix.zabbix /var/log/zabbix_server.log

# 配置 systemd 服务
vim /usr/lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target network.target mysqld.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target

# 启动服务
systemctl daemon-reload
systemctl start zabbix-server && systemctl enable zabbix-server

6. 部署 Web 前端

# 复制前端文件到 Nginx 目录
cp -r zabbix-6.0.6/ui/* /usr/share/nginx/html/
chown -R nginx:nginx /usr/share/nginx/html/

访问 http://192.168.108.50,按向导完成配置,默认账号:Admin,密码:zabbix

7. 被监控端部署 Agent2

# 安装 Zabbix 源
rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm

# 安装 Agent2
yum install zabbix-agent2 -y

# 配置指向 Server
vim /etc/zabbix/zabbix_agent2.conf
Server=192.168.108.50
ServerActive=192.168.108.50
Hostname=mysql001

# 启动服务
systemctl enable zabbix-agent2 --now

四、实战配置:邮件告警 + 业务监控

1. 配置 QQ 邮箱告警(mailx)

# 安装 mailx
yum install mailx -y

# 配置 mail.rc
vim /etc/mail.rc
set from=你的QQ邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=你的QQ邮箱
set smtp-auth-password=QQ邮箱授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

2. 编写告警脚本

# 创建脚本目录
mkdir -p /usr/lib/zabbix/alertscripts
chown zabbix.zabbix /usr/lib/zabbix/alertscripts

# 编写发送脚本
vim /usr/lib/zabbix/alertscripts/mailx.sh
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

# 授权
chmod +x /usr/lib/zabbix/alertscripts/mailx.sh

3. Web 端配置告警

  1. 管理 → 报警媒介类型 → 创建脚本类型
  2. 用户 → Admin → 添加报警媒介,填写收件邮箱
  3. 配置 → 动作 → 创建 Trigger 动作,设置告警 / 恢复消息模板

4. 验证监控

被监控端关闭 MySQL:systemctl stop mysqld,Zabbix 触发告警并发送邮件,完成闭环测试。

五、Zabbix 高频使用场景

  1. 服务器监控:Linux/Windows 系统资源、进程、日志、端口
  2. 网络设备监控:交换机 / 路由器 SNMP 监控、端口流量、状态
  3. 应用服务监控:Nginx、MySQL、Redis、Kafka、Tomcat、K8s
  4. 云平台监控:阿里云、AWS、VMware 虚拟机资源
  5. 分布式监控:多机房用 Proxy 代理采集,降低 Server 压力
  6. 故障自愈:触发器联动脚本,自动重启服务、清理磁盘

六、生产环境优化要点

  1. 数据库优化:定期分区历史表,避免单表过大;使用 SSD 提升 IO
  2. 采集优化:大规模环境用 Agent2 主动模式,降低 Server 负载
  3. Proxy 拆分:跨地域 / 网络隔离场景必须部署 Proxy
  4. 告警收敛:避免风暴告警,配置告警升级、合并规则
  5. 权限管控:按团队分配 Web 权限,防止误操作

七、Zabbix 6.0 常见问题排查清单

1、前端无法访问 / 安装失败

  1. Nginx 未启动:systemctl status nginx

  2. 前端文件缺失:ls /usr/share/nginx/html/index.php

  3. PHP 配置不满足:

    • max_execution_time = 300
    • memory_limit = 128M
    • date.timezone = Asia/Shanghai
  4. 数据库连接失败:库不存在 / 密码错误 / 字符集非 utf8_bin


2、Zabbix Server 起不来 / 10051 未监听

  1. 看日志:tail -f /var/log/zabbix_server.log
  2. DBPassword 未配置 / 写错
  3. 日志文件权限不对:chown zabbix:zabbix /var/log/zabbix_server.log
  4. 数据库未导入:schema.sql/images.sql/data.sql
  5. 端口被占用:netstat -ntlp | grep 10051

3、Agent 灰色不亮绿 / 监控不通

  1. 看 Agent 日志:tail -f /var/log/zabbix/zabbix_agent2.log
  2. Server / ServerActive 指向正确 IP
  3. Hostname 与 Web 端主机名完全一致
  4. 防火墙 / SELinux 关闭
  5. Server 端测试:zabbix_get -s 客户端IP -p 10050 -k system.uname
  6. 修改配置后必须重启:systemctl restart zabbix-agent2

4、监控项无数据 / 不采集

  1. 主机已启用、模板已链接
  2. 监控项已启用、间隔合理
  3. 被动 / 主动模式匹配配置
  4. 用 zabbix_get 验证采集可用性

5、触发器告警但不发邮件

  1. 触发器变为 PROBLEM
  2. Action 已启用、条件匹配
  3. 用户已绑定报警媒介、邮箱正确
  4. AlertScriptsPath 路径正确
  5. 脚本可执行、属主 zabbix:zabbix
  6. 手动测试脚本:./mailx.sh 邮箱 标题 内容
  7. 看邮件日志:tail -f /tmp/mailx.log

6、数据库常见问题

  1. 连接失败:授权不全、bind-address 限制
  2. 性能差:历史数据未分区、未设置保留时长
  3. 空间暴涨:缩短历史 / 趋势存储天数

7、最常用排查命令

# Server 状态
systemctl status zabbix-server

# 端口监听
netstat -ntap | grep zabbix

# Server 日志
tail -f /var/log/zabbix_server.log

# Agent 日志
tail -f /var/log/zabbix/zabbix_agent2.log

# 测试客户端连通性
zabbix_get -s 192.168.108.51 -p 10050 -k system.uname

# 测试邮件告警
cd /usr/lib/zabbix/alertscripts
./mailx.sh your@qq.com "测试标题" "测试内容"

8、排查口诀

前端不行查 Nginx、PHP、权限

Server 挂了查日志、数据库、密码

Agent 灰色查配置、主机名、防火墙

无数据查 zabbix_get、模板、采集间隔

收不到告警查动作、媒介、脚本、权限


八、总结

Zabbix 是零成本、高灵活、全场景的企业级监控工具,从单机部署到分布式架构,从基础监控到业务指标,都能完美支撑。

对于生产环境,优先选择 LTS 版本,搭配 Proxy 分布式架构,做好数据库与告警优化,即可支撑大规模 IT 基础设施的稳定监控。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐