Ubuntu 24.04 安装 Zabbix 7.0 LTS 教程
在 Ubuntu 24.04 部署 Zabbix 7.0 LTS:添加仓库、导入 MariaDB/MySQL 架构、配置 nginx 前端与 agent2,并排查数据库密码、nginx 注释等常见报错。
构建内容
在单台 Ubuntu 24.04 VPS 上运行完整的 Zabbix 7.0 LTS 堆栈:负责轮询和告警的 zabbix-server 守护进程、存储所有指标的 MariaDB/MySQL 数据库、由 nginx 提供服务的 PHP 前端,以及从本机收集指标的 zabbix-agent2。部署完成后,将其指向第二台服务器并关联模板。当磁盘空间已满或服务停止时,您会立即收到电子邮件。
Zabbix 比状态页工具更重:它是真正的时间序列系统,支持模板、触发器、升级通知和历史数据保留。大多数问题都出在被跳过的三个步骤上:导入数据库架构、设置 Zabbix server 实际读取的数据库密码,以及取消 nginx 配置中两行内容的注释。正确完成这些步骤后,其余操作都可通过向导完成。如果您只需要检查服务在线或离线,并提供可分享的状态页,轻量级 Uptime Kuma 状态监控器可在一个容器中完成这些工作;当您需要为多台主机设置逐项指标阈值和升级通知时,Zabbix 才值得使用。
请使用 7.0 LTS 系列:其 server、frontend、agent2 和数据库架构版本保持一致,并且可持续多年获得安全修复。在复制下面的仓库文件名之前,请先查看 Zabbix 官方下载页面。latest发布包始终指向最新的 7.0 小版本,但如果您希望固定使用准确的 7.0-N构建版本,页面也会列出对应的文件名。本教程中的其他命令在整个 7.0 系列中均保持稳定。
资源规格、端口和前置条件
假设使用全新的 Ubuntu 24.04 KVM VPS,并拥有 root 或 sudo 权限。请根据实际资源规划:在一台服务器上运行 server、database、nginx 和 PHP,并监控少量主机时,2 GB RAM 和 2 个 vCPU 是合理的最低配置。1 GB 的服务器可以启动,但随着历史数据增长,数据库会因资源不足而受影响;监控对象超过几十台后,建议使用 4 GB RAM,超过 100 台后,应将数据库迁移到独立服务器。磁盘占用取决于收集的监控项数量和历史数据保留时间;初始可预留几 GB,housekeeper 会根据设置的保留期限清理旧数据。
端口:前端使用 80 和 443,可对公网开放,也可仅允许您自己的 IP 访问。服务器在 TCP 10051 上监听,用于接收 active agents 推送的数据;每个 agent 在 TCP 10050 上监听,供服务器轮询。如果前方部署了防火墙,只开放您实际对外提供的端口。建议为前端配置 DNS A 记录,因为您需要为其配置正式证书。Zabbix 服务器会监控您运行的其他服务,因此应将其作为 2026 年值得运行的更完整自托管服务栈的一部分,而不是事后临时添加的服务。
步骤 1:添加官方 Zabbix 7.0 软件源
zabbix-release软件包只执行一项操作:将 APT 软件源列表和签名密钥写入系统。安装该软件包,然后刷新索引。
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update如果 wget 返回 404 Not Found,说明文件名已更改。打开 Zabbix 下载页面,选择 Ubuntu 24.04,然后复制页面显示的准确 zabbix-release URL。干净的 apt update 会显示一行 repo.zabbix.com,且不会出现密钥警告;The following signatures couldn't be verified because the public key is not available 表示发布软件包未安装其密钥,因此请重新运行 dpkg -i,然后再次更新。
步骤 2:安装服务器、前端和代理
一次性安装基于 MySQL 构建的服务器、PHP 前端、nginx 配置、SQL 架构文件和 agent2。
sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2zabbix-server-mysql 是针对 MySQL/MariaDB 编译的服务器;如果使用 PostgreSQL,请改为安装 zabbix-server-pgsql,并相应调整下面的数据库步骤。zabbix-sql-scripts 包含接下来要导入的架构文件;在 7.0 中它是一个独立的软件包。遗漏该软件包正是之后找不到导入路径的原因。这些软件包都不会安装数据库引擎,因此如果服务器上尚未安装 MariaDB,请现在安装。
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb第 3 步:使用正确的字符集创建数据库
Zabbix 对排序规则要求严格:数据库必须使用 utf8mb4 字符集和 utf8mb4_bin 排序规则,否则导入会在中途因外键错误而终止。使用 sudo mysql 打开 root shell,然后运行:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost;
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;SET GLOBAL 这一行是导入过程的安全措施。Zabbix 架构会创建存储函数,而在启用二进制日志时,非 SUPER 账户(例如 zabbix)无法创建这些函数。MySQL 8 默认启用二进制日志,某些托管版 MariaDB 也会启用(标准 MariaDB 不会)。如果服务器启用了二进制日志却跳过该标志,导入会因 ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled 而终止。以 root 身份设置该选项即可解决问题;导入完成后再将其关闭。请准确记录密码,服务器配置必须使用完全相同的字符串,逐字节都不能改变。
步骤 4:导入架构(最容易被跳过的一步)
这是全新前端拒绝加载的最常见原因:您创建的数据库为空。将 zabbix-sql-scripts 中随附的架构加载到该数据库。
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -p zabbix系统会提示输入 zabbix 密码。在小型 VPS 上通常需要运行 30 到 60 秒。成功时不会输出任何内容,这里保持静默是正常的。zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory 表示未安装 zabbix-sql-scripts 软件包(返回步骤 2)。ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' 表示步骤 3 中的密码或授权不正确。完成后,将安全标志重新关闭:
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"使用 sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" 确认导入结果。返回数字而不是 doesn't exist 错误,表示架构已成功导入。
第 5 步:在 zabbix_server.conf 中设置数据库密码
服务器从 /etc/zabbix/zabbix_server.conf 读取数据库凭据。这里只需设置密码,DBName 和 DBUser 已默认设置为 zabbix。取消注释 # DBPassword= 行并设置密码:
DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-password密码必须与第 3 步中的密码逐字节一致。DBPassword 为空或错误,是后续出现“Zabbix server is not running”横幅的首要原因:守护进程启动后无法登录数据库,随后退出。屏幕上不会显示具体原因,只有日志中会记录。
第 6 步:将 nginx 指向前端
zabbix-nginx-conf 软件包会在 /etc/zabbix/nginx.conf 安装一个 server block,并从 /etc/nginx/conf.d/zabbix.conf 将其链接到 nginx。但其中的 listen 和 server_name 行默认处于注释状态,因此在编辑这些内容前,nginx 不会为 Zabbix 提供服务:
server {
listen 80;
server_name zabbix.example.com;
...
}使用您的域名;如果尚未配置 DNS,也可以使用服务器的公网 IP。需要注意两点。Ubuntu 的默认 nginx 欢迎站点也监听 80 端口,并被标记为默认服务器。因此,对于名称不匹配的请求,它会优先响应。请删除该站点,否则会加载错误页面:sudo rm -f /etc/nginx/sites-enabled/default。如果 /etc/nginx/conf.d/zabbix.conf 意外缺失(这是一个已知的打包问题),请使用 sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf 手动创建链接。然后测试并重新加载:
sudo nginx -t
sudo systemctl reload nginxnginx -t 应输出 test is successful。如果输出的是 nginx: [emerg] a duplicate default server for 0.0.0.0:80,说明默认站点和 Zabbix block 都声明了 default_server。删除默认站点后重新测试。更常见的情况是,测试仅显示 conflicting server name 警告并通过,但浏览器仍显示普通欢迎页面。这表示未匹配的名称被默认站点处理。删除该站点即可解决问题。
第 7 步,启动并启用服务
启动服务器、代理、PHP-FPM 和 nginx,并将它们设为开机自动启动,使其在重启后仍能运行。
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmUbuntu 24.04 提供 PHP 8.3,因此 FPM 服务为 php8.3-fpm;zabbix-nginx-conf软件包在同一个主进程下运行其前端。确认服务器已启动并保持运行:
sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log正常日志会以服务器已启动,以及其 housekeeper、poller 和 trapper进程正在运行结束。如果看到 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost',说明第 5 步中的 DBPassword 不匹配。修正后重新启动。如果出现 [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist 行,说明你跳过了第 4 步中的架构导入,因此服务器没有可读取的数据。
第 8 步:完成 Web 设置向导
访问 http://your-domain-or-ip。Zabbix 设置向导会打开。按以下步骤操作:
- 欢迎,选择语言。
- 先决条件检查,每一行默认都应显示 OK;打包的
/etc/zabbix/php-fpm.conf池已提高 Zabbix 所需的 PHP 限制。 - 配置数据库连接,数据库类型选择 MySQL,主机填写
localhost,端口填写0(表示使用默认端口或套接字),数据库名称填写zabbix,用户填写zabbix,密码填写第 3 步中设置的密码。凭据错误或数据库架构缺失会在这里显示。 - 设置,保留 Zabbix server 主机
localhost和端口10051,然后为安装设置名称。 - 安装前摘要,然后选择 安装。向导会写入
/etc/zabbix/web/zabbix.conf.php。 - 完成,使用
Admin(注意大写 A)和密码zabbix登录,然后立即在 用户 中修改该密码。
如果向导报告 Cannot create the configuration file,说明 Web 用户无法写入 /etc/zabbix/web/。请下载它提供的 zabbix.conf.php,使用 sudo 手动放置到该位置,然后点击完成。
第 9 步,添加本地主机并关联模板
Zabbix 不会自动监控自身。进入 Data collection → Hosts → Create host,将主机名设置为 zabbix-server,将其添加到 Linux servers 组,并添加 Agent 接口,IP 设置为 127.0.0.1,端口设置为 10050。在 Templates 下关联 Linux by Zabbix agent(被动轮询版本;Linux by Zabbix agent active 使用 agent 主动推送)。保存。
不到 1 分钟,主机行中会显示绿色的 ZBX 标签,指标也会出现在 Monitoring → Latest data 下。红色的 ZBX 标签表示服务器无法连接 agent。这属于下文介绍的故障模式,不是本步骤配置错误。
第 10 步:配置一个实用触发器和电子邮件告警
Linux by Zabbix agent 模板已经自带高 CPU 使用率、低内存和磁盘空间不足触发器,因此链接模板后即可立即获得告警。要了解触发器的构建方式,可以自行添加一个:打开主机,进入 Triggers → Create trigger,将其命名为 Root filesystem over 90% full on {HOST.NAME},将严重性设置为 High,并使用以下表达式:
last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90vfs.fs.dependent.size[/,pused] 是模板的文件系统发现功能为根文件系统创建的已用百分比监控项(7.0 的 Linux 模板只采集一次 vfs.fs.get,然后派生出每个挂载点的依赖监控项),因此该触发器无需额外采集数据即可触发。保存设置。
触发器在收到 action 通知之前,只会更改仪表板中一行的颜色。进入 Alerts → Media types → Email,设置 SMTP 服务器、端口、发件人地址、连接安全方式(通常为 STARTTLS)以及中继凭据(如有),然后使用 Test。测试失败说明 SMTP 链路存在问题,应在任何实际告警依赖它之前修复。进入 Users → Users → Admin → Media → Add,为 Admin 用户添加地址,并选择需要通知的严重性。然后进入 Alerts → Actions → Trigger actions → Create action 配置操作:添加类似 Trigger severity >= Warning 的条件,并在 Operations 下选择通过 Email 向 Admin 发送通知。保存并启用该操作。更倾向于使用聊天工具?Zabbix 7.0 自带适用于 Slack、Discord 和 Telegram 的 webhook 媒体类型。按照配置 Email 的方式配置其中一个,然后将其分配给用户。
监控第二台服务器的 agent
要监控另一台服务器,也要在该服务器上添加 Zabbix 软件源。Ubuntu 24.04 不提供自带的 Zabbix 软件包,因此只安装 agent:
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-agent2编辑 /etc/zabbix/zabbix_agent2.conf,将 Server 设置为 Zabbix server 的 IP(用于被动轮询);对于主动检查,还要设置 ServerActive,并配置与前端中创建的主机匹配的唯一 Hostname:
Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01运行 sudo systemctl enable --now zabbix-agent2,并允许 Zabbix server 访问此服务器的 TCP 10050 端口。返回前端,创建一个主机,将其 Agent 接口指向该服务器的 IP,关联 Linux 模板。通常在一分钟内即可开始上报数据。
故障模式及其对应提示
前端显示 Error connecting to database 或数据库错误。 在向导的数据库步骤中,Access denied for user 'zabbix'@'localhost' (using password: YES) 表示密码与第 3 步中的密码不匹配,或 GRANT 从未执行。如果数据库可以连接,但前端报告 The frontend does not match Zabbix database 或 Table 'zabbix.users' doesn't exist,说明第 4 步中的架构导入被跳过或失败。请在新建的数据库中重新导入。
橙色提示条:Zabbix server is not running: the information displayed may not be current。 前端已启动,但无法访问正在运行的服务器。最常见的原因有以下 3 个。首先,服务已停止。检查 systemctl status zabbix-server 并启动服务。其次,服务正在运行,但无法访问数据库。日志中会显示 [Z3001] connection to database 'zabbix' failed: [1045] Access denied,表示 DBPassword 错误或为空。最后,前端可能指向了错误的服务器。该配置以主机 localhost 和端口 10051 的形式存储在 /etc/zabbix/web/zabbix.conf.php 中。Ubuntu 默认不启用 SELinux,因此 RHEL 指南中提到的 SELinux 套接字原因不适用。在这里,问题几乎总是数据库密码错误或服务已停止。
主机显示红色的 ZBX 标签;项目错误为 Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused。 代理未运行或未监听端口。检查 systemctl status zabbix-agent2 并确认 ListenPort=10050。如果显示超时而不是“connection refused”,表示防火墙丢弃了端口 10050 的流量。相关的 Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. 表示代理可以访问,但其 Server= 行未列出 Zabbix 服务器的 IP。添加该 IP,然后重启代理。
显示 nginx 默认欢迎页面,或显示 502 Bad Gateway。 欢迎页面表示默认站点仍处于启用状态,或 Zabbix 配置块未创建链接。删除 /etc/nginx/sites-enabled/default,并确认 /etc/nginx/conf.d/zabbix.conf 存在,如第 6 步所示。502 表示 nginx 已连接到 PHP,但 PHP-FPM 已停止,或正在监听其他套接字。启动 php8.3-fpm,并检查 Zabbix 配置块中的 fastcgi_pass 套接字是否与正在运行的池配置一致。
备份、升级和 TLS
数据库包含完整历史记录,因此应按计划使用 mysqldump 进行备份,并将转储文件保存到服务器之外:
mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gz/etc/zabbix 配置文件很小,也值得备份,但可以重新生成;数据则无法重建。恢复时反向执行:创建数据库,导入转储文件,然后让配置指向该数据库。
7.0 系列内的升级属于常规的 apt update && apt upgrade 操作;服务器会在下次启动时应用所有架构迁移,因此应升级软件包并重启 zabbix-server。未来升级到新的主版本属于有计划的迁移。请先阅读升级说明,提前转储数据库,并预期架构会发生单向变更。正因为这种跳跃不可逆,才应固定在 LTS 系列并持续使用该系列。
不要让前端继续使用纯 HTTP。DNS 指向服务器后,使用 在 Ubuntu 24.04 的 nginx 上配置 Certbot 和 Let's Encrypt 为其配置证书;该操作会重写 server block,使其监听 443,并将 80 重定向到 HTTPS。在加固这台用于登录并监控其他服务器的主机时,也应通过 使用 fail2ban 禁止暴力破解 SSH 尝试 加固 SSH。监控登录不应以明文传输,其入口也不应暴露给密码猜测攻击者。
FAQ
我需要 Zabbix agent,还是可以不安装 agent 进行监控?
两种方式都可以。agent(agent2)可提供丰富的主机级指标,包括 CPU、内存、磁盘、进程、服务和日志文件,对于您可以控制的服务器,这是通常的选择。对于无法安装软件的设备,可以使用无 agent 监控:通过 SNMP 监控交换机和打印机,通过 ICMP ping 检查可达性,通过 HTTP 检查端点,通过 IPMI 检查硬件状态。大多数实际部署会混合使用这两种方式。
为什么前端显示 Zabbix server 未运行?
前端本身可以正常工作,但无法连接到正在运行的 zabbix-server 进程。通常是 server 已启动,但由于 zabbix_server.conf 中的 DBPassword 错误或为空而无法登录,随后立即退出。运行 systemctl status zabbix-server 并查看 /var/log/zabbix/zabbix_server.log;如果其中出现 [Z3001] connection to database ... failed 行,就可以确认这一点。修正密码并重启后,该提示通常会在一分钟内消失。
我必须使用 MySQL,还是可以使用 PostgreSQL?
两者都完全受支持:本指南使用的是 zabbix-server-mysql,搭配 MariaDB 或 MySQL;也可以使用 zabbix-server-pgsql,搭配 PostgreSQL。对于小型部署,选择哪一种影响很小。对于大型部署,PostgreSQL 搭配 TimescaleDB 扩展可以对历史数据表进行分区,并显著降低维护开销,因此大型站点更倾向于使用它。请选择其中一种并持续使用;之后迁移需要完整导出和重新导入,而不是切换一个配置项。
Zabbix 一体化服务器需要多少 RAM?
如果一台服务器只监控少量主机,2 GB 是实际可用的最低配置,超过几十台主机后,4 GB 会更宽裕;内存主要用于数据库缓存和 server 的轮询器。1 GB VPS 可以运行,但随着历史数据增长,数据库会逐渐缺少内存。超过一百台主机后,应将数据库拆分到独立服务器,并调整其缓冲池,而不是继续向同一台机器增加 RAM。
只监控几台服务器,使用 Zabbix 是否过度配置?
可能是。如果您只需要确认“服务是否在线”并提供一个可共享的页面,那么 用于运行状态和状态监控的 Uptime Kuma 这类轻量工具部署更快,也更便于快速查看。需要逐项指标阈值、历史图表、模板化主机和升级规则时,应选择 Zabbix;这些功能是简单的 ping 工具无法在整个主机集群中提供的。