一、监控
监控的本质是通过 “感知 - 分析 - 行动” 闭环,解决 IT 系统的 “不可见性” 问题。
作用维度 | 核心目标 | 具体体现 |
---|---|---|
发现问题 | 实时感知异常 | 当系统 / 设备出现指标偏离(如 CPU 使用率突升、网络中断)时,第一时间捕捉异常,避免 “用户先发现故障” 的被动局面 |
解决问题 | 快速定位根因 | 提供异常前后的指标关联数据(如 “内存泄漏导致 CPU 飙升”),帮助运维人员跳过 “排查盲区”,缩短故障恢复时间(MTTR) |
预防问题 | 提前规避风险 | 基于历史数据趋势分析(如 “每周五晚 8 点带宽峰值增长 10%”),预判潜在瓶颈(如带宽不足),提前扩容或优化,避免故障发生 |
实现方式:监控方式的选择取决于监控对象(服务器 / 网络设备 / 应用)、规模(单机 / 集群)和精度需求,按 “自动化程度” 分类主要分为三大类:
1、人工巡检(最低自动化程度)
- 原理:运维人员通过 “登录设备查看命令行”“手动检查日志”“肉眼观察指示灯” 等方式,定期确认设备 / 系统状态。
- 适用场景:
- 小规模环境(如 1-2 台单机服务器);
- 无自动化工具支持的特殊设备(如老旧工业控制器);
- 应急临时检查(如故障后补充确认)。
- 优缺点:
- 优点:无工具依赖、直观感知(如设备物理故障);
- 缺点:效率极低、易漏检(如夜间突发异常)、无法实时监控、人工成本高。
2、巡检脚本(半自动化)
- 原理:通过编写自定义脚本(如 Shell、Python、PowerShell),定时执行 “指标采集命令”(如
top
查 CPU、ping
测连通性),并输出结果(如日志文件、邮件告警)。 - 常见脚本场景:
- 服务器基础指标:
df -h
监控磁盘使用率、free -m
监控内存; - 应用可用性:
curl
检测 Web 服务是否返回 200 状态码、netstat
检查端口是否存活; - 简单告警:脚本判断指标阈值(如磁盘使用率 > 85%),触发邮件 / 短信通知。
- 服务器基础指标:
- 优缺点:
- 优点:灵活(可自定义指标)、轻量(无需安装复杂软件)、低成本;
- 缺点:无统一管理平台(脚本分散)、无法可视化(需手动查日志)、扩展性差(集群环境下难维护)。
3、专业监控软件(全自动化,企业级首选)
当监控对象超过 10 台、或需监控复杂对象(如分布式应用、网络设备)时,专业监控软件是必然选择。你提到的Zabbix和Prometheus是当前最主流的两款,两者定位和特点差异明显:
对比维度 | Zabbix | Prometheus |
---|---|---|
核心定位 | 全能型监控平台(开箱即用) | 云原生时代的指标监控系统(侧重灵活性) |
适用场景 | 传统 IT 环境(物理机、虚拟机、网络设备)、中小规模集群 | 云原生环境(K8s、Docker、微服务)、大规模分布式系统 |
数据存储 | 自带数据库(MySQL/PostgreSQL),适合结构化指标 | 时序数据库(TSDB),适合高并发、高 cardinality 指标(如百万级 Pod 监控) |
易用性 | 有成熟 Web 界面,配置简单(图形化操作),适合运维新手 | 需搭配 Grafana 做可视化,配置偏代码化(YAML),需一定学习成本 |
扩展性 | 支持插件,但定制化需二次开发 | 生态丰富(如 Alertmanager 告警、Exporter 采集),扩展性极强 |
二、Zabbix 监控
(一)数据获取方式
Zabbix 的核心能力之一是 “多协议适配”,可针对不同类型的监控对象,选择最优的数据采集方式,确保采集效率和指标准确性。
1、Zabbix Agent(服务器 / 主机监控首选)
Download Zabbix agents
- 核心定位:用于采集操作系统层指标(如 CPU、内存、磁盘、进程),是 Zabbix 监控服务器(Linux/Windows)的默认方式。
- 工作模式:
- 被动模式(默认):Zabbix Server 主动向 Agent 发送采集请求,Agent 返回数据(适合监控端数量少的场景);
- 主动模式:Agent 主动向 Server 上报数据(适合监控端数量多的场景,减轻 Server 压力)。
- 适用对象:物理机、虚拟机、云服务器(ECS/VMware)。
- 核心监控指标:
- 系统资源:CPU 使用率、内存使用率、磁盘 IO、网络吞吐量;
- 系统状态:开机时长、进程数、登录用户数、文件句柄数;
- 部署注意:需在被监控主机上安装对应系统的 Agent(如
zabbix-agent2
,支持更多指标),并开放端口(默认 10050/TCP)。
2、 SNMP 协议(网络设备监控专属)
- 核心定位:用于采集网络设备层指标,是监控交换机、路由器、防火墙等网络设备的行业标准协议(此类设备通常不支持安装 Agent)。
- 关键信息:
- 端口:默认使用UDP/161(数据采集)、UDP/162( Trap 告警,设备主动上报异常);
- 版本:推荐使用SNMP v2c(稳定、兼容性好),需注意:SNMP v1 安全性差(明文传输),SNMP v3 安全性高(加密 + 认证)但配置复杂,适合对安全性要求极高的场景。
- 适用对象:交换机(华为 / 华三 / Cisco)、路由器、防火墙、IDS/IPS、网络打印机。
- 核心监控指标:
- 设备状态:设备在线状态、端口 UP/DOWN;
- 网络性能:端口带宽使用率、丢包率、延迟、ARP 表项;
3、 IPMI 协议(硬件设备监控专用)
- 核心定位:用于采集服务器硬件层指标,无需依赖操作系统(即使服务器关机 / 系统崩溃,只要通电,仍可采集硬件数据)。
- 原理:基于服务器的 “智能平台管理接口”(如戴尔 iDRAC、惠普 iLO、华为 iBMC),直接与硬件控制器通信。
- 适用对象:物理服务器(需支持 IPMI 协议)、存储设备。
- 核心监控指标:
- 硬件健康:CPU 温度、主板温度、硬盘温度;
- 硬件状态:电源模块状态(是否故障)、风扇转速、内存插槽状态、硬盘 SMART 信息;
- 部署注意:需在服务器 BMC 界面开启 IPMI 功能,并配置 Zabbix Server 的 IP 权限。
4、JMX 协议(Java 应用监控必备)
- 核心定位:用于采集Java 应用 / 虚拟机(JVM)指标,解决 Java 应用 “黑盒监控” 问题(如无法通过 Agent 获取 JVM 内部状态)。
- 原理:通过 Java 的 “Java Management Extensions” 接口,获取 JVM 及 Java 应用的运行数据,需搭配Zabbix Java Gateway(Zabbix 的 Java 代理组件)实现通信。
- 适用对象:Java 应用(如 Tomcat、Jenkins、Spring Boot 服务)、中间件(如 ActiveMQ、Elasticsearch)。
- 核心监控指标:
- JVM 状态:堆内存使用率、非堆内存使用率、GC 次数 / 耗时、线程数(活跃 / 阻塞);
- 应用状态:请求响应时间、请求错误率、连接池状态(如数据库连接数);
- 部署注意:需在 Java 应用启动参数中添加 JMX 配置(如
-Dcom.sun.management.jmxremote
),并确保 Zabbix Java Gateway 可访问应用的 JMX 端口(默认 1099)。
(二)Zabbix Server 部署
1、时间同步配置:确保监控时序准确性
时间同步是监控系统的基础 ——Zabbix 的告警、历史数据记录均依赖精确的时间戳,若服务器时间偏差,会导致监控数据混乱、告警时序错误。
# 配置定时任务,每30分钟同步一次时间(阿里云NTP服务器)
echo "*/30 * * * * /usr/sbin/ntpdate 120.25.115.20 &> /dev/null" >> /var/spool/cron/root
crontab -l
# 120.25.115.20(阿里云公共 NTP 服务器
# 立即执行一次时间同步,验证效果
ntpdate -v 120.25.115.20
2、添加 EPEL 源、安装PHP
Zabbix 部署过程中需要部分第三方依赖包(如编译工具、扩展库),EPEL(Extra Packages for Enterprise Linux)源提供了这些补充包,推荐使用阿里云镜像加速下载。
# 配置阿里云CentOS 7基础源(系统必备)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
vim /etc/yum.repos.d/php74.repo
yum clean all
yum install php
# 验证PHP版本(输出7.4.x即成功)
php -v
mkdir -p /var/run/php-fpm/
chown -R zabbix:zabbix /var/run/php-fpm/
[root@localhost ~] vim /etc/php-fpm.d/zabbix.conf
[zabbix]
user = zabbix
group = zabbix
listen.group = apache
listen.mode = 0660
listen = /var/run/php-fpm/zabbix.sock
;listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1;
[root@localhost ~] ls -l /var/run/php-fpm/zabbix.sock
# srw-rw----. 1 root apache 0 9月 24 18:03 /var/run/php-fpm/zabbix.sock
[root@localhost ~] chown zabbix:apache /var/run/php-fpm/
[root@localhost ~] php-fpm -t
# [24-Sep-2025 18:01:32] NOTICE: configuration file /etc/php-fpm.conf test is successful
[root@localhost ~] systemctl start php-fpm.service
[root@localhost ~] systemctl status php-fpm.service
- “属主 zabbix” 是为了让 PHP-FPM 进程(运行在 zabbix 用户下)能正常管理 Socket 文件,同时限制进程权限,避免安全风险;
- “属组 apache” 是为了让 Apache 进程(运行在 apache 用户下)能通过 “属组权限” 访问 Socket,实现通信需求;
- 若都设为 apache,相当于把 “Web 服务” 和 “脚本运行” 的权限合并,一旦某一环出问题,整个服务的安全边界就会被突破,这在生产环境中是不推荐的。
问题 1:PHP-FPM 启动失败(Zabbix 专用池配置错误)
解决:
- useradd -M -s /sbin/nologin zabbix;
- mkdir -p /var/run/php-fpm/
- chown -R zabbix:zabbix /var/run/php-fpm/
- chmod 755 /var/run/php-fpm/
- 确保 listen.allowed_clients = 127.0.0.1 结尾有分号,注释不兼容的 listen.acl_users。
问题 2:Permission denied(Apache 无权限访问 Socket)
现象:Apache 日志报 (13)Permission denied: AH02454: FCGI: attempt to connect to Unix domain socket ... failed
原因:PHP-FPM 创建的 zabbix.sock 仅允许 zabbix 用户访问,Apache 运行用户(apache)无权限
解决:编辑 Zabbix 池配置 /etc/php-fpm.d/zabbix.conf,添加权限配置:
- listen.group = apache # 让 Socket 属于 apache 组
- listen.mode = 0660 # 组内用户有读写权限
- 重启服务:systemctl restart php-fpm.service && systemctl restart httpd.service;
- 验证权限:ls -l /var/run/php-fpm/zabbix.sock(应显示 zabbix:apache 所属,权限 rw-rw----)。
3、添加 Zabbix 官方仓库:获取稳定版本软件
PHP: Releases
Zabbix Official Repository
https://mirrors.aliyun.com/zabbix/zabbix
操作命令:
Zabbix 4.0 至 6.0 版本Zabbix 官方文档明确指出,其软件包可直接用于 CentOS 7。例如:
- Zabbix 4.0 文档中提到:"Official Zabbix packages are available for RHEL 7, CentOS 7 and Oracle Linux 7."
- Zabbix 5.0 文档说明:"Zabbix 5.0 LTS packages for Red Hat Enterprise Linux, CentOS, and Oracle Linux are available."
4、 安装核心软件包:部署 Zabbix 服务组件
Zabbix Server 依赖数据库存储监控数据,需要 Web 界面供可视化操作,需安装核心组件:
- mariadb-server:替代 MySQL 的开源数据库,兼容 MySQL 语法,用于存储 Zabbix 的监控指标、主机配置等数据;
- zabbix-server-mysql:Zabbix 服务端主程序,负责接收 Agent 数据、处理告警逻辑;
- zabbix-web-mysql:基于 PHP 的 Web 管理界面,提供图形化配置和监控视图。
# 创建Zabbix仓库配置文件
cat > /etc/yum.repos.d/zabbix.repo << EOF
[zabbix]
name=zabbix
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/
enabled=1
gpgcheck=0
EOF
[root@localhost ~] vim /etc/yum.repos.d/zabbix.repo
# Zabbix 官方源将 “前端组件”(Web 相关)单独放在 [zabbix-frontend] 仓库,且默认禁用(enabled=0)
# 清理yum缓存,使仓库生效(可省略)
yum clean all && yum makecache
# 1. 下载与已安装的 php-common 匹配的 ldap 扩展(7.4.33 版本)
wget https://rpms.remirepo.net/enterprise/7/php74/x86_64/php-ldap-7.4.33-15.el7.remi.x86_64.rpm
yum install -y ./php-ldap-7.4.33-15.el7.remi.x86_64.rpm
# 2.安装MariaDB(数据库)、Zabbix Server(服务端)、Zabbix Web(Web界面)
yum install -y mariadb-server zabbix-server-mysql zabbix-web-mysql
# 启动并设置Zabbix服务器开机自启
[root@localhost ~] systemctl enable --now zabbix-server.service
[root@localhost ~] systemctl enable --now mariadb.service
[root@localhost ~] systemctl status zabbix-server.service
[root@localhost ~] systemctl status mariadb.service
5. 数据库初始化:创建 Zabbix 专属库和表
Zabbix 需要专用数据库存储数据,需手动创建数据库、授权用户,并导入初始表结构。
# 1.启动MariaDB并设置开机自启
systemctl enable --now mariadb
# 2. 初始化数据库(设置root密码,按提示操作,默认无密码直接回车)
mysql_secure_installation
# 3. 创建Zabbix数据库和用户(替换[your_password]为你的密码,如123456)
mysql -u root -pSu@548165
MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'zabbix'@'localhost';
exit;
# 4. 安装Zabbix服务端和Web端
yum install -y zabbix-server-mysql zabbix-web-mysql
# 5. 导入Zabbix初始数据
【4/5.0】
[root@localhost ~] cd /usr/share/doc/zabbix-server-mysql-5.0.47/
[root@localhost zabbix-server-mysql-5.0.47] ls
# AUTHORS ChangeLog COPYING create.sql.gz double.sql NEWS README
[root@localhost zabbix-server-mysql-5.0.47] zcat create.sql.gz | mysql -uroot zabbix -p'Su@548165'
[root@localhost ~] mysql -u root -pSu@548165
MariaDB [(none)]> use zabbix;
# Database changed
MariaDB [zabbix]> show tables;
166 rows in set (0.00 sec)
# Zabbix 从 5.4 版本开始调整了数据库脚本的结构和存放路径,将原来的单文件 create.sql.gz 拆分为多个独立脚本,脚本存放路径从调整为 /usr/share/zabbix-mysql/
[root@host-10 ~] ls /usr/share/zabbix-mysql/
# data.sql double.sql history_pk_prepare.sql images.sql schema.sql
# 1. 先导入基础表结构
mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/schema.sql
# 2. 再导入历史数据相关表(可选,针对分区表)
mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/history_pk_prepare.sql
# 3. 导入图像数据
mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/images.sql
# 4. 最后导入初始数据(包含默认用户、模板等)
mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/data.sql
# double.sql 是可选的,用于支持高精度浮点数,根据需要导入
# mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/double.sql
- 数据库字符集选择utf8和collate utf8_bin,确保支持中文且区分大小写(避免表名 / 字段名冲突);
- create.sql.gz包含 Zabbix 所需的所有表结构和初始数据(如默认用户、模板),导入过程可能耗时 1-2 分钟(视服务器性能而定)。
6. 配置 Zabbix Server:关联数据库连接
Zabbix Server 需通过配置文件获取数据库连接信息,才能正常读写数据。
# 编辑Zabbix Server配置文件
vim /etc/zabbix/zabbix_server.conf
# 配置以下参数(确保与数据库设置一致)
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix123
DBSocket=/var/lib/mysql/mysql.sock
- DBHost=localhost:数据库与 Zabbix Server 同机,使用本地连接;
- DBPassword=redhat:需与数据库授权时设置的密码一致;
- DBSocket:指定 MySQL 套接字文件路径,本地连接效率高于 TCP/IP。
7. 启动 Zabbix Server:验证服务运行状态
配置完成后,启动 Zabbix Server 服务并检查端口监听状态,确认服务正常运行。
systemctl start zabbix-server
systemctl enable zabbix-server
[root@localhost ~] tail -20 /var/log/zabbix/zabbix_server.log
# 日志中出现 server #XX started [XXX] 这类信息,代表 Zabbix 的核心工作进程全部启动
[root@localhost ~] netstat -tunlp |grep za
# tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 62321/zabbix_server
- 10051 端口是 Zabbix Server 与 Agent 通信的默认端口,需确保未被防火墙拦截;
- 若服务启动失败,可查看日志排查:
tail -f /var/log/zabbix/zabbix_server.log
(常见问题:数据库连接失败、权限不足)。
8. 配置 Web 界面:初始化 PHP 环境
Zabbix Web 界面基于 PHP 开发,需配置时区确保时间显示正确,并启动 Web 服务器。
[root@localhost ~] rpm -q httpdhttpd-2.4.6-99.el7.centos.1.x86_64
# 安装zabbix时,会被作为依赖自动装上
[root@localhost ~] vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
[root@localhost ~] systemctl restart httpd.service
[root@localhost ~] systemctl enable httpd.service
[root@localhost ~]# netstat -tunlp |grep ht
tcp6 0 0 :::80 :::* LISTEN 62436/httpd
[root@localhost ~] chown :zabbix /etc/zabbix/web/
[root@localhost ~] chmod 755 /etc/zabbix/web/
[root@localhost ~] chmod 644 /etc/zabbix/web/*
[root@localhost ~] systemctl restart php-fpm.service
[root@localhost ~] systemctl restart httpd.service
9. 访问 Zabbix Web UI:完成初始化配置
通过浏览器访问 Web 界面,完成首次配置并登录系统。
操作步骤:
- 访问地址:
http://服务器IP/zabbix
(示例:http://192.168.140.10/zabbix
); - 按引导完成数据库连接测试(默认已配置正确,直接下一步);
- 登录系统:默认用户名
Admin
,密码zabbix
(首次登录建议立即修改密码)。
说明:
- 首次登录后,系统会显示默认仪表盘,包含 Zabbix Server 的基础监控数据;
- 若访问失败,检查 httpd 服务状态(
systemctl status httpd
)和防火墙规则(开放 80 端口)。
# 在 Zabbix Web 目录下创建 test_timezone.php
echo "" > /usr/share/zabbix/test_timezone.php
http://192.168.140.22/zabbix/test_timezone.php
2025-09-24 10:27:00
然后在浏览器访问:http://你的服务器IP/zabbix/test_timezone.php
如果显示当前中国时间(比如 2025-09-24 18:30:00
),说明时区配置正确;如果显示其他时区时间(如 UTC 时间),则检查配置是否写错。
测试完成后可以删除临时文件:
rm -f /usr/share/zabbix/test_timezone.php
Zabbix 默认管理员账号信息是:
- 用户名:
Admin
(首字母必须大写,小写会报错) - 密码:
zabbix
(全小写,默认未修改时)
汉化:
补充:权限问题:
[root@localhost ~] vim /etc/php-fpm.d/zabbix.conf
[zabbix]
user = zabbix
group = zabbix
listen.group = apache
listen.mode = 0660
若user,group是apache
1. PHP-FPM Socket 目录(/var/run/php-fpm/)
chown -R apache:apache /var/run/php-fpm/
chmod 755 /var/run/php-fpm/
2. PHP 会话目录(/var/lib/php/session/)
chown root:apache /var/lib/php/session/
chmod g+w /var/lib/php/session/
3. PHP-FPM 日志文件(若配置了专属日志)
chown apache:apache /var/log/php-fpm/zabbix-pool-error.log
chmod 644 /var/log/php-fpm/zabbix-pool-error.log
✅ 最后:重启服务验证
核心:只关注 3 个目录 + 对应的用户
Zabbix 运行时,只有 apache 用户(Web 界面用)和 zabbix 用户(Server/Agent 服务用)需要目录权限,具体对应关系如下:
目录路径 | 用途 | 需授权的用户 | 作用 |
---|---|---|---|
/etc/zabbix/web/ | 存放 Web 配置文件 zabbix.conf.php | apache(Web 服务运行身份) | 让 Web 界面能读取配置文件,或安装向导能写入配置文件 |
/var/lib/php/session/ | 存放 PHP 会话文件(Web 登录、安装向导需要) | zabbix(PHP-FPM 运行身份) | 让 Zabbix Web 能创建 / 读写会话文件,避免 “无法启动 session” 报错 |
/var/run/php-fpm/ | 存放 PHP-FPM Socket 文件(Web 与 PHP 通信用) | zabbix(PHP-FPM 运行身份) | 让 PHP-FPM 能生成 Socket 文件,Apache 能通过 Socket 调用 PHP |
三、本机监控配置(监控 Zabbix Server 自身)
部署完成后,需配置 Zabbix 监控自身状态(如 CPU、内存使用率),验证监控链路是否通畅。此时监控自身未正确启用。
1. 安装并配置 Zabbix Agent
Zabbix Agent 是部署在被监控主机上的采集组件,负责收集系统指标并发送给 Server。
[root@localhost ~] rpm -q zabbix-agent
#未安装软件包 zabbix-agent
[root@localhost ~] yum install zabbix-agent
# 编辑Agent配置文件
vim /etc/zabbix/zabbix_agentd.conf
# 配置核心参数(指向Zabbix Server)
Server=192.168.140.22 # Zabbix Server的IP地址(本机监控填localhost或本机IP)
ServerActive=192.168.140.22 # 主动模式下Server的地址
Hostname=Zabbix_server # 主机名,需在Web界面唯一标识
# 启动Agent并设置开机自启
systemctl enable --now zabbix-agent
# 检查10050端口(Agent默认端口)监听状态
netstat -tunlp | grep zabbix_agentd
- 工作模式:
- 被动模式(默认):Zabbix Server 主动向 Agent 发送采集请求(
Server
参数指定允许的 Server 地址); - 主动模式:Agent 主动向 Server 上报数据(
ServerActive
参数指定目标 Server 地址);
- 被动模式(默认):Zabbix Server 主动向 Agent 发送采集请求(
Hostname
必须唯一,将在 Web 界面用于识别该主机;- 10050 端口需开放,确保 Server 能正常通信。
//变绿
2. Web 界面配置主机监控
在 Zabbix Web 界面中添加本机为监控对象,关联基础模板实现指标采集。
操作步骤:
(1)登录 Web 界面,进入配置 > 主机 > 创建主机
;
(2)填写主机信息:
- 主机名称:与 Agent 配置的
Hostname
一致(Zabbix_server
); - 可见名称:自定义(如 “Zabbix 服务器”);
- 群组:选择
Linux servers
(或新建群组); - IP 地址:填写本机 IP(如
192.168.140.10
);
(3)切换到 “模板” 标签,搜索并链接Template OS Linux
(Linux 系统基础监控模板);
(4)点击 “添加” 完成配置。
3. 查看监控图形:验证数据采集
配置完成后(约 5-10 分钟),可在 Web 界面查看本机的监控指标图形。
操作步骤:
- 进入
监控 > 图形
;Zabbix 5.0 对图形功能的位置进行了调整,图形选项不再像 Zabbix 4.0 那样直接在 “监测” 菜单下,而是整合到了 “监测”→“主机”→“图形” 中。你可以检查是否找错了位置。 - 选择主机
Zabbix_server
; - 选择需查看的图形(如 “CPU 使用率”“内存使用率”“磁盘 I/O”);
- 查看实时或历史趋势数据,确认指标正常采集。
4. 解决图形中文乱码问题
Zabbix 默认字体不支持中文,导致图形中中文显示为方块,需替换字体文件。
操作命令:
解决办法:1)用英文
2)为zabbix添加字体文件
复制一份传到虚拟机上
[root@localhost ~] mv simkai.ttf /usr/share/zabbix/assets/fonts/
[root@localhost ~] ls /usr/share/zabbix/assets/fonts/
# graphfont.ttf simkai.ttf
[root@localhost ~] vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'simkai'); // 图形字体
define('ZBX_FONT_NAME', 'simkai'); // 全局字体
回去刷新
四、添加监控机
(一)内置监控方法
(二)添加被监控机
[root@host-20 ~] cat > /etc/yum.repos.d/zabbix.repo << EOF
[zabbix]
name=zabbix
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/
enabled=1
gpgcheck=0
EOF
[root@host-20 ~] vim /etc/yum.repos.d/zabbix.repo
[root@host-20 ~] yum install zabbix-agent
[root@host-20 ~] vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.140.22
ServerActive=192.168.140.22
Hostname=za_node01
[root@host-20 ~] systemctl enable --now zabbix-agent.service
[root@host-20 ~] netstat -tunlp|grep za
# tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN
//可以先自己创几个主机组
// 一个监控项对应一份监控数据。新添加的监控项、图形等都是空的。
五、监控数据方法
(一)链接模板
//等一段时间、若能获取数据、启用会变绿
(二)手动创建监控项 -- zabbix、agent内置的key
// 若图形为空白
(1)在 Zabbix Server 上用 zabbix_get
测试该键值:
[root@localhost ~]# zabbix_get -s 192.168.140.20 -p 10050 -k "net.if.in[ens33,bytes]"
- 若返回数字(如1497173),说明监控项正常,问题在图形关联;
- 若返回空或
0
,检查网卡名称是否正确(在 Agent 主机执行ip addr
确认是否为ens33
)。
(2)刷新页面或清除浏览器缓存(有时缓存会导致数据不更新)。
(三)自定义Key做监控
1、确保被监控端已开启自定义参数:
# 在/etc/zabbix/zabbix_agentd.conf中设置
UnsafeUserParameters=1
UserParameter=, # 需要脚本只返回一个结果
① 无参数
② 有参数
- 若参数含特殊字符(如空格),需用引号包裹,如key名称["/data/log files"]
- $$2中的第一个$是转义符,确保 Zabbix 不解析$2,而是传递给(如:awk)作为字段引用
- 命令权限:确保zabbix用户有权限执行命令(如 MySQL 免密配置、目录读权限等),可通过su - zabbix -c "命令"验证。
- 结果唯一性:脚本 / 命令必须返回唯一结果(如单个数字、字符串),避免多行输出。
- 特殊字符处理:命令中若含引号、空格等,需正确转义,例如用单引号包裹命令,内部变量用双引号:
UserParameter=test.key[*],echo '参数是:'"$1" # 正确拼接参数
2、权限
① 所有配置的命令 / 脚本需确保 zabbix 用户有执行权限:
chmod +x [脚本路径]
chown zabbix:zabbix [脚本路径] # 或通过sudo授权
② 源码编译软件的目录读权限(针对非默认路径软件)
若 MySQL、Nginx 等软件是源码编译安装,而非 yum/rpm 默认路径,需额外给zabbix
用户配置目录读权限,否则监控命令会因找不到二进制文件报错。
3、应用监控示例集合
(1)数据库监控(通用 SQL 查询型)
前提:下载mariadb
# 安装MariaDB服务器和客户端
[root@host-20 ~] yum install -y mariadb mariadb-server
# 启动并设置开机自启
[root@host-20 ~] systemctl enable --now mariadb
[root@host-20 ~] systemctl status mariadb
[root@host-20 ~] netstat -tulpn | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5248/mysqld
① 监控连接数量
[root@host-20 ~] vim /etc/zabbix/zabbix_agentd.conf
[root@host-20 ~] systemctl restart zabbix-agent.service
UserParameter=mysql.conn.number,mysql -uroot -e "show processlist" | sed '1d' | wc -l
[root@localhost ~] zabbix_get -s 192.168.140.20 -k mysql.conn.number
# 1
② 监控MySQL用户数
# 监控特定数据库表记录数
(以MySQL为例)
[root@host_21 ~] vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=mysql.user.number,mysql -uroot -e "select count(*) from mysql.user" | sed '1d'
[root@host-20 ~] systemctl restart zabbix-agent.service
[root@localhost ~] zabbix_get -s 192.168.140.20 -k mysql.user.number
# 6
③ MySQL 增删改查数量(mysql.trans.number[*]
)
[root@host_21 ~] vim /etc/zabbix/zabbix_agentd.conf
UserParameter=mysql.operation.number[*],mysqladmin extended-status | awk '$$2=="Com_'$1'"{print $$4}'
[root@host-20 ~] systemctl restart zabbix-agent.service
[root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[select]
[root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[insert]
[root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[delete]
[root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[update]
④ MySQL 复制线程状态(mysql.slave.state[*]
)
[root@lvm__100 ~]# mysql -uroot -pSu@548165
mysql> CREATE USER 'repl'@'192.168.140.20' IDENTIFIED WITH mysql_native_password BY 'Repl@548165';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.140.20';
mysql> FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 | 868 | | | |
+------------------+----------+--------------+------------------+-------------------+
[root@host-20 ~]# vim /etc/my.cnf.d/server.cnf
server-id = 4
relay_log = /var/log/mariadb/relay-bin.log # 中继日志
log_bin = /var/log/mariadb/mariadb-bin.log # 可选,从库也开启binlog(用于级联复制)
read_only = 1 # 从库设为只读(可选,增强安全性)
[root@host-20 ~]# systemctl restart mariadb
[root@host-20 ~]# systemctl status mariadb # 确保显示“active (running)”
[root@host-20 ~]# mysql -uroot
RESET SLAVE ALL;
# 3. 重新执行 CHANGE MASTER TO(这次确保参数正确,尤其是主库IP)
CHANGE MASTER TOMASTER_HOST = '192.168.140.51', # 主库实际IP,不要写错MASTER_USER = 'repl',MASTER_PASSWORD = 'Repl@548165', # 复制用户密码,确保和主库一致MASTER_LOG_FILE = 'mysql-bin.000006', # 主库 SHOW MASTER STATUS 的 File 值MASTER_LOG_POS = 868; # 主库 SHOW MASTER STATUS 的 Position 值
START SLAVE;
# 第一步:先验证脚本本身(在被监控端执行)
[root@host-20 ~]# vim /opt/work/check_mysql_relcation.sh
#!/bin/bash
#
state=$(mysql -uroot -e "show slave status\G" | awk "/Slave_${1}_Running:/{print \$2}")
if [ $state == "Yes" ]; thenecho 1
elseecho 0
fi
[root@host-20 ~]# bash /opt/work/check_mysql_relcation.sh IO # 1
[root@host-20 ~]# bash /opt/work/check_mysql_relcation.sh SQL # 1
[root@host-20 ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=mysql.replcation.state[*],bash /opt/work/check_mysql_relcation.sh $1
[root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.replcation.state[SQL]
[root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.replcation.state[IO]
zabbix对应这个脚本文件权限需要有读权限。
创建监控项
创建图表-查看
通用步骤:在 Web 界面添加监控项和图形
登录 Zabbix Web 界面
进入 "配置" -> "主机",选择 za_node01
点击 "监控项" -> "创建监控项",为每个 key 创建对应的监控项
点击 "图形" -> "创建图形",将相关监控项添加到同一个图形中
设置合适的名称和更新间隔
1)多个机子打开mysql -uroot
2)创建用户
MariaDB [(none)]> create user 'test1'@'localhost' identified by 'test123';
MariaDB [(none)]> create user 'test2'@'localhost' identified by 'test123';
MariaDB [(none)]> create user 'test3'@'localhost' identified by 'test123';
MariaDB [(none)]> flush privileges;
(2)Web 应用监控(以 Nginx 为例)
# 监控Nginx活跃连接数
UserParameter=nginx.active.connections,netstat -anp | grep nginx | grep ESTABLISHED | wc -l
# 监控Nginx请求处理数
UserParameter=nginx.requests.persecond,awk 'END{print $1}' /var/log/nginx/access.log | tail -n1
# 监控4xx错误率
UserParameter=nginx.4xx.rate,awk 'BEGIN{count=0;total=0} $9~/^4/{count++} {total++} END{print count/total*100}' /var/log/nginx/access.log
(3)Java 应用监控(通过 JMXProxy 或命令行)
# 监控Java进程堆内存使用(需要jstat工具)
UserParameter=java.heap.used[*],jstat -gc $1 | awk 'NR==2 {print $3}'
# 监控Java线程数
UserParameter=java.threads.count[*],ps -p $1 -L | wc -l
# 示例:监控特定Java进程(如PID为1234的应用)
# 在server端测试:zabbix_get -s 目标IP -k java.heap.used[1234]
(4) 缓存服务监控(以 Redis 为例)
# 监控Redis已用内存
UserParameter=redis.memory.used,redis-cli info memory | grep used_memory: | cut -d: -f2
# 监控Redis连接数
UserParameter=redis.connections,redis-cli info clients | grep connected_clients: | cut -d: -f2
# 监控Redis键总数
UserParameter=redis.keys.total,redis-cli dbsize
(5) 消息队列监控(以 RabbitMQ 为例)
# 监控队列消息堆积数
UserParameter=rabbitmq.queue.messages[*],rabbitmqctl list_queues name messages | grep $1 | awk '{print $2}'
# 监控消费者数量
UserParameter=rabbitmq.queue.consumers[*],rabbitmqctl list_queues name consumers | grep $1 | awk '{print $2}'
例题:
1. 监控 node01 主机网卡流量及错误包
首先创建流量监控脚本:
cat > /opt/check_network.sh << 'EOF'
#!/bin/bash
# 监控网卡流量及错误包
INTERFACE=$1
METRIC=$2
case $METRIC inin_bytes)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $2}';;out_bytes)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $10}';;total_bytes)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $2 + $10}';;in_errors)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $3}';;out_errors)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $11}';;*)echo "Invalid metric"exit 1;;
esac
EOF
chmod +x /opt/check_network.sh
chown zabbix:zabbix /opt/check_network.sh
在 zabbix_agentd.conf 中添加:
UserParameter=net.traffic[*],/opt/check_network.sh $1 $2
重启 zabbix-agent:
systemctl restart zabbix-agent
测试(以 eth0 为例):
zabbix_get -s 192.168.140.11 -k net.traffic[eth0,in_bytes]
zabbix_get -s 192.168.140.11 -k net.traffic[eth0,out_bytes]
2. 监控 /etc/passwd 文件数据变化
在 zabbix_agentd.conf 中添加:
UserParameter=file.passwd.checksum,md5sum /etc/passwd | awk '{print $1}'
重启 zabbix-agent 后测试:
zabbix_get -s 192.168.140.11 -k file.passwd.checksum
3. 监控 ftp, httpd, mysql 服务状态
创建服务监控脚本:
cat > /opt/check_service.sh << 'EOF'
#!/bin/bash
SERVICE=$1
if systemctl is-active --quiet $SERVICE; thenecho 1 # 服务运行中
elseecho 0 # 服务未运行
fi
EOF
chmod +x /opt/check_service.sh
chown zabbix:zabbix /opt/check_service.sh
在 zabbix_agentd.conf 中添加:
UserParameter=service.status[*],/opt/check_service.sh $1
重启 zabbix-agent 后测试:
zabbix_get -s 192.168.140.11 -k service.status[vsftpd]
zabbix_get -s 192.168.140.11 -k service.status[httpd]
zabbix_get -s 192.168.140.11 -k service.status[mysqld]
4. 监控 /opt/data 分区剩余空间
首先添加硬盘并创建挂载点(如果尚未完成):
# 假设新硬盘为/dev/sdb
fdisk /dev/sdb # 创建200M分区
mkfs.ext4 /dev/sdb1
mkdir -p /opt/data
mount /dev/sdb1 /opt/data
# 添加到fstab确保开机挂载
echo "/dev/sdb1 /opt/data ext4 defaults 0 0" >> /etc/fstab
在 zabbix_agentd.conf 中添加:
UserParameter=disk.opt.data.free,df -P /opt/data | awk 'NR==2 {print $4}'
重启 zabbix-agent 后测试:
zabbix_get -s 192.168.140.11 -k disk.opt.data.free
5. 监控 apache 和 mysql 用户的进程数
在 zabbix_agentd.conf 中添加:
UserParameter=process.count.apache,ps -u apache --no-headers | wc -l
UserParameter=process.count.mysql,ps -u mysql --no-headers | wc -l
重启 zabbix-agent 后测试:
zabbix_get -s 192.168.140.11 -k process.count.apache
zabbix_get -s 192.168.140.11 -k process.count.mysql
6. 监控 httpd 和 mysql 进程的 CPU 和内存使用率
创建资源监控脚本:
cat > /opt/check_process_resources.sh << 'EOF'
#!/bin/bash
PROCESS=$1
METRIC=$2
case $METRIC incpu)ps -C $PROCESS -o %cpu --no-headers | awk '{sum += $1} END {print sum}';;mem)ps -C $PROCESS -o %mem --no-headers | awk '{sum += $1} END {print sum}';;*)echo "Invalid metric"exit 1;;
esac
EOF
chmod +x /opt/check_process_resources.sh
chown zabbix:zabbix /opt/check_process_resources.sh
在 zabbix_agentd.conf 中添加:
UserParameter=process.resource[*],/opt/check_process_resources.sh $1 $2
重启 zabbix-agent 后测试:
zabbix_get -s 192.168.140.11 -k process.resource[httpd,cpu]
zabbix_get -s 192.168.140.11 -k process.resource[mysqld,mem]
7. 监控物理内存剩余量和 buffer/cache 大小
在 zabbix_agentd.conf 中添加:
UserParameter=memory.free,free -b | awk 'NR==2 {print $4}'
UserParameter=memory.buffer,free -b | awk 'NR==2 {print $6}'
UserParameter=memory.cache,free -b | awk 'NR==2 {print $7}'
重启 zabbix-agent 后测试:
zabbix_get -s 192.168.140.11 -k memory.free
zabbix_get -s 192.168.140.11 -k memory.buffer
zabbix_get -s 192.168.140.11 -k memory.cache
8. 监控 MySQL 主从复制状态
使用之前已创建的 /opt/check_mysql_slave.sh 脚本,并添加复制延迟监控:
在 zabbix_agentd.conf 中补充:
UserParameter=mysql.slave.delay,mysql -uroot -e "show slave status\G" | awk '/Seconds_Behind_Master:/{print $2}'
重启 zabbix-agent 后测试:
zabbix_get -s 192.168.140.11 -k mysql.slave.delay