首页  /  监控  /  正文

Zabbix 环境准备与 Server 部署

监控 2026-10-02📖 23 分钟👁 —
📊 监控 · Zabbix + Grafana第 1 / 3 页123📖 完整导航 →

一、监控系统就四件事

Zabbix 6.4 之后也能监控容器了,某种程度上可以顶掉一部分 Prometheus 的活。

先给自己留个待办:想办法把 shell 的 crontab 定时任务、Nginx/Tengine 的具体配置也塞进这个项目里。

监控系统说到底就干四件事:采集 + 存储 + 展示 + 告警 —— 把指标采回来、存下来、画出来,出事的时候把人叫醒。

监控的四个环节,以及把展示、告警换成专门组件之后的链路

Zabbix 自己带展示和告警,只是这两块偏弱。所以展示可以换成 Grafana,告警可以交给睿象云这类专门做告警的平台。


二、Zabbix 是什么

企业级的分布式开源监控解决方案,说白了就是一套监控组件。采集、存储、展示、告警它都做,只是后两个功能弱,真想做得顺眼还得挂专门的组件。

Zabbix 基础架构:Agent 采集 → Server 汇总 → Database 存储 → Web 前端展示

四块的活儿分得很清楚:

Zabbix 监控硬件的能力很强,这是它在传统机房里的立足点。

Zabbix 和 Prometheus 怎么选

选型我就看这两张图,直接放上来。

Prometheus 和 Zabbix 在发行时间、开发语言、性能、社区支持、容器支持、部署难度上的逐项对比
结论:物理机环境用 Zabbix,云环境优先 Prometheus

一句话结论:物理机用 Zabbix,上云用 Prometheus。

如果监控的是物理机,Zabbix 在传统监控、尤其是服务器相关监控上占绝对优势,环境变动不频繁的情况下比 Prometheus 好使。但如果是云环境,除非把 Zabbix 玩得很溜、能做各种定制,否则还是 Prometheus 吧——毕竟人家本来就是干这个的,现在已经是容器监控的标配,未来可见的时间内也会被广泛应用。刚上监控系统、没什么历史包袱的话不用犹豫,Prometheus 准没错。


三、安装前准备

1. 三台机器的分工

三个节点的小集群,规划如下:

三台节点上 zabbix-agent、zabbix-server、MySQL、zabbix-web 的分布

zabbix-agent 三台都装,zabbix-server、MySQL、zabbix-web 都落在 hadoop102 这一台上。

2. 关防火墙和 SELinux

下面这段本来是给 hadoop 集群做准备的(算大数据那边的东西,不是主要内容),但装 Zabbix 一样要先过这一关,顺手记在这儿:

# 需要关掉机器的防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service


# 搭建hadoop需要先关闭防护机制
# 关闭SELinux(CentOS / RHEL)红帽系默认安全机制
sudo vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled

# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

# 重启服务器
sudo reboot


# ubuntu的操作系统一般不需要关闭,如果有权限问题再关闭
# 关闭AppArmor(Ubuntu / Debian)

# 查看 AppArmor 状态
sudo aa-status

# 临时禁用某个服务的 AppArmor 配置(不建议全局禁用)
sudo ln -s /etc/apparmor.d/usr.sbin.xxx /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.xxx

两个提醒:

3. 配 zabbix 的 yum 源(CentOS / RHEL 7 路线)

这一段是红帽系的路线,先记下来备查。我后面实际是用 Ubuntu 22.04 + apt 装的(也就是第四章),两条路别混着做。

1)安装 zabbix 软件仓库配置

这个包里面就是 yum(软件包管理器)的配置文件:

sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
rpm -U -v -h 三个参数分别是什么意思

-Uvh 就是升级安装、显示详细信息、显示进度条:-U 已装就升级没装就装,-v 让你看到安装过程,-h 用 # 表示安装进度。

2)安装 Software Collections 仓库

sudo yum install -y centos-release-scl
sudo yum install -y centos-release-scl
sudo yum install -y centos-release-scl

4. 改 zabbix 仓库配置

1)先看一眼原始的 zabbix.repo 文件

sudo cat /etc/yum.repos.d/zabbix.repo

[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

[zabbix-frontend] # 前端仓库
name=Zabbix Official Repository frontend - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/frontend
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

[zabbix-debuginfo]
name=Zabbix Official Repository debuginfo - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/debuginfo/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
gpgcheck=1

[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1

注意到 [zabbix-frontend] 就是前端仓库,默认 enabled=0 是关着的,装 Web 界面之前得打开。

2)把官方镜像换成阿里云的

sudo sed -i 's/http:\/\/repo.zabbix.com/https:\/\/mirrors.aliyun.com\/zabbix/g' /etc/yum.repos.d/zabbix.repo

# 修改之后查看一下
cat /etc/yum.repos.d/zabbix.repo

3)打开前端仓库

[zabbix-frontend] # 前端仓库
enabled=1 # 改为 1
gpgcheck=1

四、在 Ubuntu 上装 Zabbix Server

参照官方文档在 Ubuntu 上装就行。LTS 版本不同不影响 Zabbix 的监控,不用在这上面纠结。

1. 选版本和组件

在官网下载页(www.zabbix.com/download)挑版本、系统、组件:

在官网下载页选 Zabbix 7.0 LTS + Ubuntu 22.04 + Server/Frontend/Agent + MySQL + Apache

关于右边那三列(组件、数据库、Web 服务器):

各组件的含义:Server、Frontend、Agent、Proxy、Agent 2

最后两列我选的是 MySQL + Apache 的组合,这两个部署最简单。

红框圈出来的就是主监控这台机器要选的:Server / Frontend / Agent + MySQL + Apache

主监控的 Zabbix Server 上要选 Server, Frontend, Agent 这三个:

Agent 是装在被监控服务器上的组件。7.0 LTS 是 Zabbix 的长期支持版本,首选。

官方给的那份安装说明(https://www.zabbix.com/documentation/7.0/manual/installation/install/packages)就三步:sudo -s 提权、装仓库、装包,和下面写的一模一样,照着往下走即可,没什么难的。

2. 安装 zabbix 仓库

cd /tmp
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb
# -P指定也可以
wget -P /tmp https://repo.zabbix.com/.../xxx.deb


dpkg -i zabbix-release_latest_7.0+ubuntu22.04_all.deb
apt update

# 查看包安装的位置
dpkg -L zabbix-release
root@VM-0-12-ubuntu:/tmp# dpkg -L zabbix-release
/.
/etc
/etc/apt
/etc/apt/sources.list.d
/etc/apt/sources.list.d/zabbix-tools.list
/etc/apt/sources.list.d/zabbix.list
/usr
/usr/share
/usr/share/doc
/usr/share/doc/zabbix-release
/usr/share/doc/zabbix-release/README.Debian
/usr/share/doc/zabbix-release/changelog.Debian
/usr/share/doc/zabbix-release/copyright
/usr/share/keyrings
/usr/share/keyrings/zabbix.gpg

3. 装 Server、Frontend、Agent

apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent

4. 准备数据库

数据库得自己单独装,Zabbix 只提供连数据库的软件包。

# 如果没有数据库就得装,zabbix只提供连接数据库的软件包
apt update
apt install -y mysql-server

# 清理干净匿名用户等信息
sudo mysql_secure_installation

# 设置初始密码
mysql -uroot -p 

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit

这里就是 Zabbix 连 MySQL 的核心准备:建一个 zabbix 用户并给它密码和权限,再建一个 zabbix 库存放采集来的数据。

字符集用 utf8mb4,中文、Emoji、各种特殊符号都能存,Zabbix 的监控数据里这些都可能出现。库里放的是主机信息、监控项、历史数据、告警、用户等等。

如果忘了替换 password,可以这样补:

ALTER USER 'zabbix'@'localhost' IDENTIFIED BY '<你的密码>';
FLUSH PRIVILEGES;

5. 导入初始数据

在 Zabbix 服务器主机上导入初始模式和数据,系统会提示输入刚才创建的用户密码:

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

导入完记得把 log_bin_trust_function_creators 关回去:

mysql -uroot -p

mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

6. 配置 DBPassword 并启动服务

编辑 /etc/zabbix/zabbix_server.conf,把数据库密码填上:

DBPassword=<你的密码>

然后启动 Zabbix 服务端和代理进程:

systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2

7. 数据库搞砸了就推倒重来

如果数据库操作那一步报错卡住,可以清空数据库重来:

mysql -uroot -p

drop database if exists zabbix;
create database zabbix character set utf8mb4 collate utf8mb4_bin;
grant all privileges on zabbix.* to 'zabbix'@'localhost';
flush privileges;
quit;
# 重新导入初始数据
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
# 这个过程很久,需要耐心等待,可以再开一个ssh操作

五、打开 Zabbix 的 Web 界面

用 Apache 的时候,Zabbix UI 的默认 URL 是:

http://1.14.137.231/zabbix

先确认服务都正常,再检查前端文件在不在,最后重点核对 Web 服务器的配置。

这里踩了个坑:Zabbix 用 Apache 做 Web 服务要占 80 端口,别的服务占着它就起不来,得先把占用方停掉。

root@VM-0-12-ubuntu:/tmp# lsof -i :80
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx      1250     root    6u  IPv4  21502      0t0  TCP *:http (LISTEN)
nginx   3385982 www-data    6u  IPv4  21502      0t0  TCP *:http (LISTEN)
nginx   3385983 www-data    6u  IPv4  21502      0t0  TCP *:http (LISTEN)
systemctl stop nginx

systemctl start apache2
systemctl enable --now apache2
systemctl status apache2 --no-pager
apache2 起起来了,active (running),6 个子进程

然后访问 http://1.14.137.231/zabbix/setup.php,就能看到 Zabbix 的初始化向导了:

Zabbix 7.0 的安装向导首页,默认语言只有 English

六、装中文语言包

到这一步发现问题:默认语言只有英语。想要中文界面就装语言包,不装也能用。

# 安装中文语言包
sudo apt update
sudo apt install -y language-pack-zh-hans
# 生成 zh_CN.UTF-8 Locale
sudo locale-gen zh_CN.UTF-8

 # 更新系统默认语言
 sudo update-locale LANG=zh_CN.UTF-8
 # 验证
 locale -a | grep zh_CN

 # 重启服务
sudo systemctl restart apache2
sudo systemctl restart php8.1-fpm  # 如果 PHP-FPM 也在运行

如果浏览器里没变化,先强制刷新一下。


七、把 Zabbix 换成 8888 端口

改配置文件 /etc/apache2/ports.conf。云服务器记得放行改后的端口。

root@VM-0-12-ubuntu:/tmp# cat /etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>
	Listen 443
</IfModule>

<IfModule mod_gnutls.c>
	Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

sudo systemctl restart apache2
sudo systemctl status apache2 --no-pager

改成 8888 端口,这样 nginx 和 apache 就能同时跑着了。验证一下:

root@VM-0-12-ubuntu:/tmp# lsof -i :8888
COMMAND     PID     USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
apache2 1557007     root    4u  IPv6 436597192      0t0  TCP *:8888 (LISTEN)
apache2 1557008 www-data    4u  IPv6 436597192      0t0  TCP *:8888 (LISTEN)
apache2 1557009 www-data    4u  IPv6 436597192      0t0  TCP *:8888 (LISTEN)
apache2 1557010 www-data    4u  IPv6 436597192      0t0  TCP *:8888 (LISTEN)
apache2 1557011 www-data    4u  IPv6 436597192      0t0  TCP *:8888 (LISTEN)
apache2 1557012 www-data    4u  IPv6 436597192      0t0  TCP *:8888 (LISTEN)

顺便说一句,改云服务器的防火墙规则要等一会儿才生效。先在本地测:

# 可以先在本地测试一下
# 获取8888的响应头
root@VM-0-12-ubuntu:/tmp# curl -I http://127.0.0.1:8888
HTTP/1.1 200 OK
Date: Mon, 21 Sep 2026 12:09:36 GMT
Server: Apache/2.4.52 (Ubuntu)
Last-Modified: Mon, 27 Apr 2026 15:10:56 GMT
ETag: "2a8-650728579f66d"
Accept-Ranges: bytes
Content-Length: 680
Vary: Accept-Encoding
Content-Type: text/html

本地能返回,浏览器却连不上 8888(注意不是 404 而是连不上),那多半是防火墙的问题:

# 查看防火墙状态
ufw status
# 看到没有放行8888

ufw allow 8888/tcp

后来又碰到一个很奇怪的现象:访问 8888 出来的是 nginx 的默认页,但加上路径就是 Zabbix —— http://1.14.137.231:8888/zabbix 是 Zabbix,lsof 返回的也是 apache。

那就直接访问公网,看 HTTP 头里到底是 nginx 还是 apache:

root@VM-0-12-ubuntu:/tmp# curl -I http://1.14.137.231:8888
HTTP/1.1 200 OK
Date: Mon, 21 Sep 2026 12:15:17 GMT
Server: Apache/2.4.52 (Ubuntu)
Last-Modified: Mon, 27 Apr 2026 15:10:56 GMT
ETag: "2a8-650728579f66d"
Accept-Ranges: bytes
Content-Length: 680
Vary: Accept-Encoding
Content-Type: text/html

返回的是 apache,说明是浏览器那边的问题(多半是缓存),不是服务器的问题。


八、被监控的服务器装 Agent

流程就是在被监控服务器上装 zabbix-agent(同样注意 LTS 版本)。

# 查看zabbix的版本
zabbix_server -V

LTS = Long Term Support,长期支持版。

有人会问:Ubuntu 和 Zabbix 两个 LTS 的版本对不上,还能监控吗? 能。Zabbix 的通信走的是 Zabbix 自己的协议(默认端口 10050/10051),跟你底层是 Ubuntu 20.04 还是 24.04 没关系。Server 和 Agent 之间只关心三件事:

  1. Agent 版本 ≤ Server 版本(向下兼容)
  2. 网络能通
  3. Hostname 配置一致
在下载页给被监控机选 Agent 2,DATABASE 和 WEB SERVER 会自动变成 ---

Agent 服务器这边可以装 Agent 2,因为它是兼容老 Agent 的。

启用 root 用户:

sudo -s

安装 zabbix 仓库:

cd /tmp

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
apt update

# 验证
root@VM-4-16-ubuntu:/tmp# dpkg -L zabbix-release
/.
/etc
/etc/apt
/etc/apt/sources.list.d
/etc/apt/sources.list.d/zabbix-tools.sources
/etc/apt/sources.list.d/zabbix.sources
/usr
/usr/share
/usr/share/doc
/usr/share/doc/zabbix-release
/usr/share/doc/zabbix-release/README.Debian
/usr/share/doc/zabbix-release/changelog.Debian
/usr/share/doc/zabbix-release/copyright
/usr/share/keyrings
/usr/share/keyrings/zabbix.gpg

安装 agent 组件:

apt install zabbix-agent2

安装 agent 的代理插件:

apt install zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql

启动 zabbix 代理 2 进程:

systemctl restart zabbix-agent2
systemctl enable --now zabbix-agent2

九、Server 连数据库与 Web 初始化

补充一点:如果系统里已经装了 MySQL,Zabbix 不会再装一份,直接用现成的。前面做的准备就两件事 —— 建 zabbix 用户(带密码和权限)、建 zabbix 库存数据,这就是 Zabbix 连 MySQL 的核心。

Zabbix Server 服务
   ↓ 读取 /etc/zabbix/zabbix_server.conf
   ↓ 用 zabbix 用户 + 密码,连 localhost 的 MySQL
   ↓ 把采集到的数据写入 zabbix 库
   ↓ Zabbix Web 前端再从 zabbix 库读数据展示

1. 改被监控端的 agent2 配置

两台机器各自要改什么,一张表就够了:

Zabbix Server 改 zabbix_server.conf 里的 DBPassword,被监控端改 zabbix_agent2.conf 里的 Server、ServerActive、Hostname

Server 那边一般不用改配置文件,直接在 Web 界面里配就行。需要动手的是被监控端的 agent:

# 修改三项
Server=10.1.0.12
ServerActive=10.1.0.12:10051
Hostname=agent-02   # 给被监控服务器起个名,在web界面填入

# 防火墙放行(这条在 server 上执行,放行 agent 主动上报的 10051)
ufw allow from 10.1.0.0/16 to any port 10051 proto tcp

# 重启
systemctl restart zabbix-agent2

Hostname 这个名字必须和 Web 界面里填的一模一样。

云服务器的安全组和 ufw 都要放行;如果 agent 和 server 走的是内网,那只管 ufw 就行。

2. ufw 的语法

# 简单语法
ufw [动作] [规则]

# 通用语法
ufw allow [from 来源] [to 目标] [port 端口] [proto 协议]
ufw allow from 10.1.0.0/16 to any port 10051 proto tcp

# 验证
root@VM-0-12-ubuntu:/tmp# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
2222                       ALLOW IN    Anywhere                  
22                         ALLOW IN    Anywhere                  
22/tcp                     ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    10.1.0.0/16               
3306/tcp                   ALLOW IN    Anywhere                  
8888/tcp                   ALLOW IN    Anywhere                  
10051/tcp                  ALLOW IN    10.1.0.0/16               
2222 (v6)                  ALLOW IN    Anywhere (v6)             
22 (v6)                    ALLOW IN    Anywhere (v6)             
22/tcp (v6)                ALLOW IN    Anywhere (v6)             
3306/tcp (v6)              ALLOW IN    Anywhere (v6)             
8888/tcp (v6)              ALLOW IN    Anywhere (v6) 

# ufw会翻译成iptables执行,语法比iptables简单很多
# 如果是iptables的写法
iptables -A INPUT -s 10.1.0.0/16 -p tcp --dport 10051 -j ACCEPT

常用的 ufw 操作:

ufw status、ufw allow、ufw delete allow、ufw reload 这些常用命令

3. 去掉注释后的 agent2 配置

/etc/zabbix/zabbix_agent2.conf
cat zabbix_agent2.conf

PidFile=/run/zabbix/zabbix_agent2.pid

LogFile=/var/log/zabbix/zabbix_agent2.log

LogFileSize=0
# 手动配置的只有三行
Server=10.1.0.12

ServerActive=10.1.0.12:10051

Hostname=agent-02

PluginSocket=/run/zabbix/agent.plugin.sock

ControlSocket=/run/zabbix/agent.sock

Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf

Include=/etc/zabbix/zabbix_agent2.d/*.conf

4. Web 初始化

回到浏览器,向导的第一步是配数据库连接:

Configure DB connection:选 MySQL,填 localhost、3306、库名 zabbix、用户 zabbix 和密码

不放心的话,可以在终端先单独测一下 MySQL 的连通性:

mysql -uzabbix -p -h localhost -P 3306 zabbix
# 密码对的上就能连上

下一步是给这台 Zabbix Server 起个名字并选时区,重点是把时区改成 Asia/Shanghai:

Settings:Zabbix server name 填 server-01,Default time zone 选 (UTC+08:00) Asia/Shanghai

Zabbix 的初始账号是 Admin / zabbix,大小写严格区分。我后来把密码改成了自己常用的。

登录后的 Global view,此时 server 还没起来所以是红的

到这儿 Zabbix Server 端就搭完了,下一页开始把主机接进来、配监控项和告警。