服务器半夜挂了,第二天才被发现?磁盘快满了没人知道?多台机器想统一监控?Zabbix 是使用最广泛的开源监控系统之一:一台 Zabbix 服务器就能监控成百上千台机器,自动采集 CPU、内存、磁盘、网络,异常自动告警到邮件/钉钉/企业微信。这篇文章带你从零装好 Zabbix,并把第一台主机监控起来。
一、Zabbix 是什么?架构怎么理解
Zabbix 采用 C/S 架构:
被监控主机(装 Zabbix Agent)--数据--> Zabbix Server(采集+存储)--展示--> Web 前端
|
+--告警--> 邮件/钉钉/脚本
| 组件 | 作用 |
|---|---|
| Zabbix Server | 核心,负责采集、判断、告警(用 MySQL/PostgreSQL 存数据) |
| Zabbix Agent | 装在被监控主机上,采集本机指标上报 |
| Zabbix Web | 浏览器管理界面(PHP) |
监控流程:Agent 把数据发给 Server -> Server 判断是否触发阈值 -> 触发则告警并记录。
二、安装 Zabbix Server(以 CentOS 7 为例)
第 1 步:安装 Zabbix 软件源
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
yum clean all
第 2 步:安装 Server + 前端 + Agent
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent
第 3 步:创建数据库
mysql -uroot -p
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
第 4 步:导入初始数据
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
第 5 步:配置 Server
编辑 /etc/zabbix/zabbix_server.conf:
DBPassword=你的密码
第 6 步:配置 PHP 时区
编辑 /etc/httpd/conf.d/zabbix.conf:
php_value date.timezone Asia/Shanghai
第 7 步:启动
systemctl restart zabbix-server zabbix-agent httpd
systemctl enable zabbix-server zabbix-agent httpd
systemctl status zabbix-server # 确认 active (running)
第 8 步:浏览器完成安装
访问 http://服务器IP/zabbix ,按向导填写数据库信息,登录默认账号:Admin / zabbix。
三、安装 Agent 并把主机接入监控
第 1 步:在被监控主机安装 Agent(CentOS)
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
yum install -y zabbix-agent
Ubuntu/Debian:
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
apt update && apt install -y zabbix-agent
第 2 步:配置 Agent 指向 Server
编辑 /etc/zabbix/zabbix_agentd.conf:
Server=192.168.1.10 # Zabbix Server 的 IP
ServerActive=192.168.1.10 # 主动模式也指向 Server
Hostname=web-01 # 主机名,要和 Web 端添加的主机名一致
第 3 步:重启 Agent 并放行端口
systemctl restart zabbix-agent
systemctl enable zabbix-agent
# 放行 10050 端口(Agent 端口)
iptables -A INPUT -p tcp -s 192.168.1.10 --dport 10050 -j ACCEPT
第 4 步:Web 端添加主机
- 配置 -> 主机 -> 创建主机;
- 主机名称填
web-01(与 Agent 的 Hostname 一致),群组选 Linux servers; - IP 地址填被监控机器 IP,端口默认 10050;
- 关联模板:选择
Linux by Zabbix agent(自带 CPU、内存、磁盘、网络全套监控项); - 点添加,等 1-2 分钟,主机状态变绿色"已启用"、可用性显示 ZBX,就接入成功了。
四、查看监控数据
接入后稍等几分钟,进入 监测 -> 主机 -> 图表,就能看到:
- CPU 使用率曲线;
- 内存使用情况;
- 磁盘空间与 IO;
- 网络流量。
常用排查命令:
# 检查 Agent 与 Server 是否连通
zabbix_get -s 192.168.1.20 -k system.cpu.util[,iowait]
# 手动测试监控项
zabbix_get -s 192.168.1.20 -k agent.ping
zabbix_get 需要安装:
yum install -y zabbix-get
五、配置邮件告警
第 1 步:配置邮件服务器脚本(用最通用的方式,先配一个发信脚本)
编辑 /etc/zabbix/zabbix_server.conf 确认:
AlertScriptsPath=/usr/lib/zabbix/alertscripts
写一个简单的 curl 发信脚本(调用邮件 API 或直接用 mail):
cat > /usr/lib/zabbix/alertscripts/sendmail.sh <<'EOF'
#!/bin/bash
echo "$3" | mail -s "$2" "$1"
EOF
chmod +x /usr/lib/zabbix/alertscripts/sendmail.sh
第 2 步:Web 端配置
- 管理 -> 报警媒介类型 -> 创建媒介类型:脚本名填 sendmail,参数分别给收件人/标题/内容;
- 用户(Admin)-> 报警媒介 -> 添加,填你的收件邮箱;
- 管理 -> 用户 -> 添加用户(或用 Admin),在"报警媒介"里启用并保存;
- 配置 -> 动作 -> 触发器动作:启用默认动作(报告问题/恢复),或创建自定义动作选择触发条件和告警用户。
第 3 步:测试
到某一台主机手动停掉一个服务(比如 systemctl stop httpd),几秒钟后应收到问题告警邮件;恢复服务后收到"已恢复"邮件。
更专业的做法是直接接钉钉/企业微信机器人(通过 Webhook 脚本),原理相同,都是把告警内容 POST 到机器人 URL。
六、触发器:自定义告警阈值
内置模板的监控项一般够了,自定义一个"磁盘超过 85% 告警"的触发器:
- 配置 -> 主机 -> 选择主机 -> 触发器 -> 创建触发器;
- 名称:
{HOST.NAME} 磁盘空间不足; - 表达式:
last(/web-01/vfs.fs.size[/,pused]) > 85
表达式含义:web-01 这台主机的根分区使用率超过 85% 触发。
- 严重性选"警告",保存。之后磁盘超阈值就会告警。
七、常见问题排查
1. 主机显示灰色/不可达(ZBX 变红)
先确认 Agent 装了、进程在跑、10050 端口放行,再检查 Server/Agent 配置里的 IP 和 Hostname 是否一致:
systemctl status zabbix-agent
ss -tlnp | grep 10050
tail -f /var/log/zabbix/zabbix_agentd.log
2. 没有数据,全是"不支持"
监控项不支持一般是 Agent 权限不足或取值路径问题。看 Server 日志:
tail -f /var/log/zabbix/zabbix_server.log | grep "web-01"
3. 安装向导数据库报错
确认建库时用了 utf8mb4、授权用户正确、create.sql.gz 导入成功(没有报错输出)。
4. 告警没发出来
先手动执行脚本测试:/usr/lib/zabbix/alertscripts/sendmail.sh 收件人 标题 内容,能发出去再查 Web 端媒介类型、用户绑定、动作是否都配置完整。
总结
Zabbix 上手其实不难:Server 装好数据库和 Web,Agent 装在被监控机器上,Web 端关联模板接入主机,动作配好告警,一套完整监控就起来了。先监控起第一台机器,再慢慢加模板、加触发器、接告警,多台机器统一管理后就再也不用半夜人工盯服务器了。




