Zabbix全方位监控系统
- 起源
1998 年,拉脱维亚系统管理员 Alexei Vladishev 为自动化日常巡检写下第一行代码;2001 年放出 1.0 Alpha,2004 年发布 1.0 正式版,宣告项目公开 - 产品定位
采用 AGPL-3.0 许可证 100% 开源,提供企业级分布式监控,可采集网络、服务器、虚拟化、应用、云及物联网设备的性能与可用性数据,具备灵活告警、可视化、API 集成和大规模水平扩展能力 - 组织与生态
2005 年在拉脱维亚成立 Zabbix SIA,负责全球商业支持与版本维护;同时建立中国、日本、美国等多地社区,每年举办官方峰会与培训,形成“开源软件+商业服务”的可持续模式
监控知识基本概述
Zabbix监控作用
Zabbix是一套能对系统不间断进行监视,并能根据事先的配置来自动化的提醒或报警的服务。分为服务端和客户端。要监控的机器上需要安装客户端并与服务端建立连接后即可实现自动化监控。
为什么需要监控
监控是运维,乃至整个产品声明周期中,最为重要的一环
- 监控能做到事前及时预警发现故障,便于事后提供详实的数据用于追踪
- 以图形化方式呈现当前集群状态,便于分析或评估集群当前状态,方便判断是否需要升级等事务。
- 当出现某些特定故障时,可自动化完成故障处理,也叫故障自愈。
- 将集群的报警汇总到一台机器上集中化管理。以免使用脚本在每台机器上进行部署消耗不必要的运算资源。
单机查看系统指标的指令
监控CPU
通常监控CPU的使用率、以及CPU的饱和度;
监控CPU使用率: w、top、htop、glances
监控CPU饱和度:判断当前的系统负载,是否大于CPU核心数的2倍;
通常监控CPU的使用率、以及CPU的饱和度;
监控CPU使用率: w、top、htop、glances
[root@zabbix-server01 ~]# yum -y install htop
[root@zabbix-server01 ~]# htop
监控CPU饱和度:判断当前的系统负载,是否大于CPU核心数的2倍;
1、监控 CPU 使用率
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
#us 用户态: 跟用户的操作有关 35%
#sy 系统态: 跟内核的处理有关 60%
#id CPU空闲:
2、监控CPU饱和度使用率,先获取当前1分钟的负载,然后除以CPU核心数的2倍,然后乘以100转为百分比
[root@zabbix-server01 ~]# uptime
14:37:54 up 1:09, 2 users, load average: 0.00, 0.00, 0.02
[root@zabbix-server01 ~]# uptime | awk -F ',' '{print $3}' | awk '{print $NF}'
0.00
# 获取CPU核心数
[root@zabbix-server01 ~]# nproc
2
# 计算当前CPU的饱和度
[root@zabbix-server01 ~]# yum -y install stress
[root@zabbix-server01 ~]# stress --cpu 3 # 模拟压力测试
[root@zabbix-server01 ~]# np=$(echo $[ $(nproc) * 2 ])
[root@zabbix-server01 ~]# uptime | awk -F ',' '{print $3}' | awk -v core=$np '{print $NF / core * 100"%" }'
48.75%
监控内存
通常监控内存的使用率、以及内存的饱和度;
监控内存使用率: free
监控内存饱和度:当内存使用率高于80%,并且Swap使用超过5%
内存监控命令: free
[root@zabbix-server01 ~]# free -m
total used free shared buff/cache available
Mem: 1935 413 1347 6 328 1522
Swap: 4095 0 4095
# total:表示总内存
# user: 表示已经使用的内存
# free: 表示的是当前完全没有被程序使用的内存
# buffer/cache: 表示缓冲和缓存使用的内存,在内存不够时,可以释放该内存供新的应用程序使用
# available: 表示系统目前能提供给新应用程序使用的内存
计算内存的使用率,公式:内存使用率 =( 总内存 - 可用内存 / 总内存 * 100 )
[root@zabbix-server01 ~]# free -m | awk '/^Mem/{print ($2-$NF)/$2*100}'
9.44359
[root@zabbix-server01 ~]# free -m | awk '/^Mem/{print ($2-$NF)/$2*100"%"}'
20.6718%
监控磁盘
通常监控磁盘的使用率、以及磁盘IO吞吐、IOPS;
- 监控磁盘的使用率: df -h 、df -i
- 监控磁盘每秒的IO吞吐、IOPS: iostat、iotop (使用Prometheus会更加的方便)
1、监控磁盘的使用率
2、监控磁盘的IO吞吐、IOPS
[root@zabbix-server01 ~]# ls /dev/mapper/ -l
总用量 0
crw-------. 1 root root 10, 236 10月 20 13:28 control
lrwxrwxrwx. 1 root root 7 10月 20 13:28 rl_rocky9-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 10月 20 13:28 rl_rocky9-swap -> ../dm-1
[root@zabbix-server01 ~]# dnf -y install sysstat
[root@zabbix-server01 ~]# iostat
Linux 5.14.0-427.13.1.el9_4.x86_64 (rocky9) 2025年10月20日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.71 0.08 1.47 0.06 0.00 96.68
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
dm-0 4.60 82.69 101.14 0.00 219766 268784 0
dm-1 0.04 0.84 0.00 0.00 2220 0 0
nvme0n1 5.28 86.89 101.91 0.00 230922 270832 0
sr0 0.02 0.79 0.00 0.00 2096 0 0
# tps: 每秒传输次数,即IOPS(输入/输出操作每秒),它反映了设备的I/O负载。
# kB_read/s: 每秒从设备读取的数据量,单位KB,千字节。
# kB_wrtn/s: 每秒向设备写入的数据量,单位KB,千字节。
# kB_dscd/s: 每秒丢弃的数据量,单位KB,千字节。(通常是0,因为绝大部分情况下不会丢弃数据)。
# kB_read: 自系统启动后从设备读取的总数据量,单位KB,千字节。
# kB_wrtn: 自系统启动后向设备写入的总数据量,单位KB,千字节。
# kB_dscd: 自系统启动后丢弃的总数据量,单位KB,千字节。
监控网络
通常监控网络的每秒传输的带宽: iftop -i eth0、ifconfig、glances
[root@zabbix-server01 ~]# dnf -y install glances
[root@zabbix-server01 ~]# glances
[root@ZabbixServer ~]# iftop
ops.net:https => 101.200.101.219:57456 0b 9.53Kb 6.11Kb
<=
ops.net:https => 101.200.101.207:65254 0b 3.37Kb 1.12Kb
#中间的<= =>这两个左右箭头,表示的是流量的方向。
TX: cum: 170KB #发送流量
RX: 37.1KB #接收流量
TOTAL: 208KB #总的流量
#如果单位为Mbps,换算为MB需要除以8,比如:100Mbps = 12MB
监控TCP
[root@zabbix-server01 ~]# netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 10.0.0.9:22 10.0.0.128:4859 ESTABLISHED
tcp 0 0 10.0.0.9:41682 222.139.215.198:443 TIME_WAIT
tcp 0 0 10.0.0.9:45352 1.92.76.132:80 TIME_WAIT
tcp 0 0 10.0.0.9:48602 210.28.130.3:80 TIME_WAIT
tcp 0 248 10.0.0.9:22 10.0.0.128:4999 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
监控脚本示例
监控当前登录系统的在线用户数量,如果超过4则触发报警
- 1.如何提取用户数量
- 2.根据提取用户数量进行比对
- 3.如果比对成立,则触发警告,如果失败则进如下一轮监控
[root@ZabbixServer ~]# check_user_login.sh
for ip in {7..9}
do
users=$(ssh root@172.16.1.$ip "who|wc -l")
if [ $users -ge 3 ];then
echo "报警通知 172.16.1.$ip"
fi
done
常见的监控方案
Cacti
主要通过SNMP对网络流量进行监控与分析,常用于在数据中心监控网络设备;
Nagios
主要用来监控系统,也可以自定义Shell脚本来监控服务,可通过Web页面显示对象状态、日志、告警信息;
但对于自定义监控、分层告警、分布式等支持相对较薄弱;
Zabbix
目前在传统环境下使用较多的开源监控软件,可横向扩展、自定义监控项、支持多种监控方式、可监控网络与服务等。
Prometheus
目前最为流行的监控方案,能监控节点、应用组件、业务组件、网络设备、网站响应时间、其次有专门的自动发现组件来自动监控Kubernetes的Pod、Service、Ingress等。且支持在服务端进行聚合、分析,展示等。
例如:计算CPU使用率的公式: (1 - CPU 空闲率) * 100 = CPU 使用率
语法: (1- avg(irate(node_cpu_seconds_total{mode=“idle”}[1m])) by (instance) ) * 100
商业监控方案
监控宝:https://www.jiankongbao.com/
Zabbix系统概述
zabbix应用场景
Zabbix是企业级开源监控解决方案,支持实习监控数万台服务器、虚拟机和网络设备,采集百万级监控指标,Zabbix完全开源免费。

zabbix发布频率

- Zabbix LTS (⻓期支持版本) 。Zabbix LTS版本在五年内为Zabbix用户提供支持服务,包括三年的全面支持(基础的、紧急的以及安全性上的问题)和两年的最低限度支持(仅限紧急的和安全性上的问题)。Zabbix LTS版本的发布将体现在版本号第一位数字的变动上。
- Zabbix 标准版本发布(试用版)。 Zabbix标准版本将在全面支持(基础的、紧急的以及安全性上的问题)的六个⽉内为Zabbix用户提供支持服务,直到下一个Zabbix稳定版本发布。Zabbix标准版本会变动第二个版本号。
zabbix版本特性
Zabbix5.0
1、支持监控项预测试功能,及添加完监控项之后,可以立即获取监控项的取值结果;
2、在低级自动发现过程中可以过滤掉一些监控项、触发器、主机和图形等;
3、监控项键值限制提高,监控项键值的最大⻓度从256个字符增加到2048个字符;
4、使用ZabbixAgent2来替代ZabbixAgent
(1、降低TCP连接数量 2、使用go语言开发,集成了Agent所有的功能,并提供第三方的扩展插件)
Zabbix6.0
1、原生支持高可用,可直接开箱即用,⽆需借助第三方软件实现
2、原生支持对Kubernetes集群的监控
3、原生支持TLS/SSL网站证书监控、原生支持对域名的监控
4、支持定制前端UI展示公司信息
5、提升了ZabbixAgent2的性能,并优化了ZabbixAgent监控
6、引入了更多的基础模板对系统进行监控
7、SNMP发现和采集性能大幅度提升
Zabbix7.0 在Zabbix6.0基础上引入了多项新特性,主要提升Zabbix的整体性能以及兼容性
1、将最低支持的 PHP 版本设置为 8.0
2、将 MySQL 最大支持版本增加至 8.2
3、将 MariaDB 最大支持版本增加到 11.0
4、改进了数据采集流程,减少了系统资源的消耗,提高了数据处理的效率
5、对数据库交互进行了优化,减少了查询延迟,增强了大数据量处理的能力
6、 在Kubernetes 集群状态模板中添加了用于 Kubelet 发现的节点标签和注释的过滤器
7、引入了更多通用的模板,方便对各种系统和服务进行快速监控部署
zabbix功能组件
Zabbix 由⼏个主要的功能组件组成,其职责如下所示:
1、 ZabbixAgent :通常是部署在被监控的主机上,用于监控本地应用程序指标,并将到的指标发送给 Zabbix Server。
2、 ZabbixServer : 是 Zabbix agent 向其报告可用性、系统完整性信息的核心组件;要用于存储所有配置信息、统计信息和操作信息的核心存储库。
3、 Database :所有配置信息以及 Zabbix 收集到的数据都被存储在数据库中。
4、 ZabbixWeb :基于Web界面操作ZabbixServer,该界面是 ZabbixServer 的一部分,通常(但不一定)和 ZabbixServer 运行在同一台主机上。
5、 ZabbixProxy :可以替 ZabbixServer收集Agent的指标数据,降低ZabbixServer压力,但它属于可选部分;
Zabbix逻辑架构
- ZabbixAgent (数据采集)–> ZabbixServer (数据分析|报警)–> 数据库(数据存储)<-- ZabbixWeb (数据展示)
- ZabbixWeb 创建主机–>写入数据库<-- ZabbixServer 获取要监控的指标信息–>指挥 ZabbixAgent 获取数据

Zabbix7.x监控安装
(注:生产环境使用时一定要选择长期支持版LTS部署!)
| 安装大小 | 监控指标数 | CPU核心数 | 内存 |
|---|---|---|---|
| 小 | 1000 | 2 | 8 |
| 中 | 1万 | 4 | 16 |
| 大 | 10万 | 16 | 64 |
| 非常大 | 100万 | 32 | 96 |
配置YUM仓库
1、配置RockyLinux为国内的yum源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.huaweicloud.com/rockylinux|g' \
-i /etc/yum.repos.d/rocky*.repo
yum makecache
2、如果已安装扩展(epel)源,则需要禁用扩展源中提供的Zabbix包,编辑配置文件 /etc/yum.repos.d/epel.repo ,并添加以下内容
# ⼿动修改
[root@zabbix-server01 ~]# vi /etc/yum.repos.d/epel.repo
[epel]
...
excludepkgs=zabbix*
# sed修改(可选)
[root@zabbix-server01 ~]# sed -i '/^\[epel\]/a excludepkgs=zabbix*' /etc/yum.repos.d/epel.repo
3、下载zabbix源
[root@zabbix-server01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
[root@zabbix-server01 ~]# sed -i 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#g' /etc/yum.repos.d/zabbix.repo
[root@zabbix-server01 ~]# yum makecache
安装zabbix Server
安装Zabbix Server,Web前端,agent
[root@zabbix-server01 ~]# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent gcc -y
安装并初始化数据库
1、安装MySQL8.x数据库
[root@zabbix-server01 ~]# dnf install mysql mysql-server -y
2、启动MySQL并加入开机自启动
[root@zabbix-server01 ~]# systemctl enable mysqld --now
3、创建Zabbix库,用户名、密码以及访问权限
[root@zabbix-server01 ~]# mysql
MariaDB [(none)]>
MariaDB [(none)]> create database zabbix character set utf8mb4 collate utf8mb4_bin;
MariaDB [(none)]> create user zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
MariaDB [(none)]> set global log_bin_trust_function_creators = 1;
MariaDB [(none)]> quit;
4、导入初始架构和数据,系统将提示您输入新创建的密码
[root@zabbix-server01 ~]# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 zabbix -uzabbix -pzabbix
5、导入数据库架构后禁用log_bin_trust_function_creators选项
[root@zabbix-server01 ~]# mysql
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
配置Zabbix-Server
1、配置Zabbix-Server连接指定的数据库
[root@zabbix-server01 ~]# grep "^DB" /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
2、配置Zabbix-Server前端访问域名,编辑配置文件 vim /etc/nginx/conf.d/zabbix.conf
[root@zabbix-server01 ~]# vim /etc/nginx/conf.d/zabbix.conf
# 替换为自⼰公司的域名
server {
...
listen 80;
server_name zabbix.ops.net;
...
}
启动Zabbix server和agent
[root@zabbix-server01 ~]# systemctl enable zabbix-server zabbix-agent nginx php-fpm
[root@zabbix-server01 ~]# systemctl restart zabbix-server zabbix-agent nginx php-fpm
#关闭防火墙
[root@zabbix-server01 ~]# setenforce 0
[root@zabbix-server01 ~]# systemctl stop firewalld
zabbixWeb前端,进行初始化向导后
1、需要在用户设置中将语言改为中文。
2、在**/usr/share/fonts/dejavu-sans-fonts**路径中,将DejaVuSans.ttf字体替换成其它字体。(一定要注意字体侵权问题)
zabbix-agent2安装
#安装仓库(阿里云)
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/7.0/rocky/9/x86_64/zabbix-agent2-7.0.19-release1.el9.x86_64.rpm
#或(华为云)
rpm -ivh https://mirrors.huaweicloud.com/zabbix/zabbix/7.0/rocky/9/x86_64/zabbix-agent2-7.0.19-release1.el9.x86_64.rpm
配置zabbix-agent2
vim /etc/zabbix/zabbix_agent2.conf
Server=172.16.1.71 # 配置Agent指向Server
systemctl enable zabbix-agent2.service --now
启动服务后,查看发现10050端口出现监听后即完成设置
部署在其它系统
需要部署在其它系统上时,需要去官网上下载不同系统的安装包。官网地址:zabbix客户端下载
windows系统的话,可以在 C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf 中进行配置修改(例如重新指向另一个服务端)
windows的启动可以在服务中找到Zabbix Agent 2服务直接启动
Zabbix工作逻辑
graph LR
agent -->|采集数据| Server -->|存储数据| MySQL
WEB页面 -->|获取数据| MySQL
所有数据存储进MySQL当中,然后经过服务端处理后,WEB页面回显出各种图表