Zabbix 分布式监控告警系统搭建
Zabbix 是一款企业级开源监控解决方案,可以监控网络、服务器、虚拟机和云服务的各项参数。它支持代理模式的分布式监控,内置丰富的告警机制和可视化功能。本文将在搬瓦工 VPS 上使用 Docker 方式搭建 Zabbix 监控系统。
一、环境要求
- 操作系统:Ubuntu 20.04+ 或 Debian 11+。
- 内存:Zabbix Server 推荐 2GB 以上。
- 磁盘:数据库需要较大存储空间,建议 20GB 以上。
- 前置条件:已安装 Docker。
二、Docker Compose 部署
创建 /opt/zabbix/docker-compose.yml:
mkdir -p /opt/zabbix
cat > /opt/zabbix/docker-compose.yml <<'EOF'
version: '3.8'
services:
mysql-server:
image: mysql:8.0
container_name: zabbix-mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
MYSQL_ROOT_PASSWORD: root_password
command:
- mysqld
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --default-authentication-plugin=mysql_native_password
volumes:
- zabbix-mysql-data:/var/lib/mysql
zabbix-server:
image: zabbix/zabbix-server-mysql:ubuntu-7.0-latest
container_name: zabbix-server
restart: unless-stopped
depends_on:
- mysql-server
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
MYSQL_ROOT_PASSWORD: root_password
ZBX_CACHESIZE: 128M
ZBX_HISTORYCACHESIZE: 64M
ports:
- "10051:10051"
volumes:
- zabbix-server-alertscripts:/usr/lib/zabbix/alertscripts
- zabbix-server-externalscripts:/usr/lib/zabbix/externalscripts
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest
container_name: zabbix-web
restart: unless-stopped
depends_on:
- zabbix-server
- mysql-server
environment:
ZBX_SERVER_HOST: zabbix-server
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
PHP_TZ: Asia/Shanghai
ports:
- "8080:8080"
zabbix-agent:
image: zabbix/zabbix-agent2:ubuntu-7.0-latest
container_name: zabbix-agent
restart: unless-stopped
depends_on:
- zabbix-server
environment:
ZBX_SERVER_HOST: zabbix-server
ZBX_HOSTNAME: "Zabbix server"
privileged: true
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
zabbix-mysql-data:
zabbix-server-alertscripts:
zabbix-server-externalscripts:
EOF
cd /opt/zabbix
docker compose up -d
三、初始登录
等待约 1-2 分钟数据库初始化完成后,访问 http://你的IP:8080:
- 默认用户名:Admin
- 默认密码:zabbix
首次登录后务必修改管理员密码。进入「User settings」→「Password」修改。
四、添加监控主机
4.1 本机监控
Docker Compose 中已包含 Zabbix Agent,默认已注册主机「Zabbix server」。在 Web 界面中进入「Monitoring」→「Hosts」查看状态,确认 Agent 图标变为绿色表示连接正常。
4.2 远程主机安装 Agent
在需要监控的远程搬瓦工 VPS 上安装 Zabbix Agent:
# Ubuntu/Debian
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu22.04_all.deb
dpkg -i zabbix-release_latest+ubuntu22.04_all.deb
apt update
apt install zabbix-agent2 -y
4.3 配置 Agent
cat > /etc/zabbix/zabbix_agent2.conf <<EOF
Server=YOUR_ZABBIX_SERVER_IP
ServerActive=YOUR_ZABBIX_SERVER_IP
Hostname=bwg-vps-02
LogFile=/var/log/zabbix/zabbix_agent2.log
EOF
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
4.4 在 Web 界面添加主机
进入「Data collection」→「Hosts」→「Create host」:
- Host name:与 Agent 配置中的 Hostname 一致。
- Templates:选择「Linux by Zabbix agent」模板。
- Host groups:选择「Linux servers」。
- Interfaces:添加 Agent 接口,填入远程服务器 IP 和端口 10050。
五、配置告警
5.1 邮件告警
进入「Alerts」→「Media types」,找到「Email」并配置:
- SMTP server:你的 SMTP 服务器地址。
- SMTP server port:587。
- SMTP email:发件人邮箱。
- Authentication:填入用户名和密码。
然后在「Users」→「Admin」→「Media」中添加邮件接收地址。
5.2 创建告警动作
进入「Alerts」→「Actions」→「Trigger actions」→「Create action」:
- Name:设置动作名称,如「发送告警邮件」。
- Conditions:添加触发条件,例如触发器严重程度 >= Warning。
- Operations:添加操作,选择「Send message」,发送给 Admin 用户组。
六、自定义监控项
6.1 创建自定义监控项
在主机页面点击「Items」→「Create item」,可以添加自定义的监控指标。例如监控 Nginx 连接数:
# 在被监控主机的 Agent 配置中添加
UserParameter=nginx.active,curl -s http://localhost/nginx_status | grep Active | awk '{print $NF}'
6.2 创建自定义触发器
在主机页面点击「Triggers」→「Create trigger」:
- Expression:
last(/hostname/system.cpu.util) > 80 - Severity:选择 Warning 或 High。
七、仪表板与图表
Zabbix 内置了丰富的可视化功能:
- Dashboard:进入「Monitoring」→「Dashboard」创建自定义仪表板,添加各种小部件(图表、地图、问题列表等)。
- Graphs:在主机页面查看自动生成的性能图表。
- Maps:创建网络拓扑图,直观展示各主机之间的关系。
八、防火墙配置
# Zabbix Server 端口
ufw allow 10051/tcp
# Zabbix Agent 端口(被监控主机)
ufw allow 10050/tcp
# Web 界面端口
ufw allow 8080/tcp
九、数据维护
# 查看数据库大小
docker exec zabbix-mysql mysql -u zabbix -pzabbix_password -e "SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.tables WHERE table_schema = 'zabbix' GROUP BY table_schema;"
# Zabbix 内置了 Housekeeper 自动清理历史数据
# 在 Web 界面 Administration → General → Housekeeping 中配置保留策略
十、常见问题
Web 界面打不开
# 检查容器状态
docker compose ps
docker compose logs zabbix-web
Agent 无法连接
确认 Server 和 Agent 之间的 10050/10051 端口是否畅通,以及 Agent 配置中的 Server 地址是否正确。
总结
Zabbix 是功能最全面的开源监控系统之一,适合需要监控多台服务器的场景。对于只需要监控单台 VPS 的用户,可以考虑更轻量的 Netdata 或 Uptime Kuma。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。