监控系统理论与实践:从认知到Zabbix入门
监控系统理论与实践:从认知到Zabbix入门
一、 全面认识监控系统
1. 监控的核心目的
- 实时观测与可视化:将抽象的数值数据转化为直观的图表,便于人类快速理解系统状态。
- 主动告警与故障定位:在故障发生前或发生时立即通知运维人员,并通过监控数据快速定位问题根源,缩短平均修复时间(MTTR)。
- 性能分析与容量规划:通过分析历史趋势数据,为系统优化、架构升级和未来资源采购(如是否需要增加服务器、带宽)提供科学依据。
- 数据驱动决策:用数据代替感觉,为技术决策提供支持。
2. 监控的核心目标
在Linux系统中,监控系统地体现在以下四个层面:
-
资源层监控:关注底层硬件和操作系统的健康度。
- CPU:负载、使用率、用户/系统/IO等待时间、上下文切换次数。
- 内存:使用量、剩余量、Swap使用率、页交换活动。
- 磁盘:空间使用率、读写IOPS、吞吐量、读写延迟。
- 网络:带宽使用率、数据包数量、错包/丢包率、TCP连接状态。
-
应用与服务层监控:关注跑在系统上的业务程序是否正常。
- 服务状态:进程是否存在、监听端口是否活跃。
- 应用性能:响应时间、并发连接数、请求成功率、错误日志。
- 关键业务指标:如电商网站的订单创建速率、支付成功率等。
-
客户端监控:从终端用户的角度评估体验。
- Web前端性能:页面加载时间、白屏时间、AJAX请求成功率。
- 移动端APP性能:崩溃率、卡顿率、网络请求耗时。
-
日志监控:作为所有监控的补充,用于深度排查和审计。
- 集中收集:将分散的日志统一汇总。
- 关键信息提取:实时扫描日志中的
ERROR
、Exception
等关键字。 - 链路追踪:在微服务架构中,追踪一个请求经过的所有服务。
3. 主流的开源监控平台介绍
监控平台 | 特点与定位 | 备注 |
---|---|---|
MRTG, Cacti | 流量与性能绘图工具。基于SNMP和RRDtool,专注于网络设备流量和服务器性能指标的可视化。 | 监控领域的元老,配置相对复杂,告警功能较弱。 |
Nagios, Centreon | 服务状态监控器。其核心是检查服务是否"活着",告警功能极其强大和灵活。 | Nagios是告警时代的标杆,Centreon是其企业级分布式封装。 |
Zabbix | 全能型企业级监控方案。集数据采集、自动发现、绘图、告警、权限管理于一身,开箱即用。 | 用户基数巨大,社区活跃,文档完善,是许多公司的首选。 |
Ganglia | 分布式集群监控工具。采用分层设计,专门为监控大型集群(如Hadoop集群)而设计,资源消耗极低。 | 适合海量节点的基础指标收集,但告警和灵活性不如Zabbix。 |
Prometheus | 云原生时代的监控系统。基于拉取模式和多维度数据模型,与Kubernetes等容器编排平台无缝集成。 | 当前增长最快的监控系统,是云原生生态的事实标准。常与Grafana搭配绘图。 |
Open-Falcon | 企业级分布式监控。由小米开源,在设计上解决了大规模监控的痛点,性能和高可用性很好。 | 在国内有一定用户群体,但国际社区影响力相对较小。 |
二、Zabbix 监控系统详解
2.1 Zabbix 简介
Zabbix是一个企业级的开源监控解决方案,能够实时监控各种网络设备、服务器和应用程序的状态。它是一个24小时不休息的IT管家,时刻关注系统健康状况,一旦发现问题就会立即通知管理员。
2.2 Zabbix 核心特性
数据采集
- 主动采集:Zabbix Agent定期收集设备的各项指标数据
- 监控指标涵盖硬件资源、网络状态、应用性能和业务数据
智能告警
- 支持多条件触发告警
- 提供多通道通知:邮件、短信、微信、钉钉等
- 支持告警升级机制
数据存储
- 使用时序数据库高效存储海量监控数据
- 支持灵活的数据保留策略
- 提供快速的数据查询和分析能力
数据可视化
- 实时仪表盘和自定义监控视图
- 历史数据趋势分析图表
- 网络拓扑可视化展示
- 定期性能报告生成
2.3 Zabbix 系统架构
核心组件
Zabbix Server
- 数据处理中心:收集、分析、存储监控数据
- 告警引擎:判断是否触发告警条件
- 任务调度:管理监控任务的执行时序
- 通知分发:向指定人员发送告警信息
Zabbix Database
- 存储配置信息:监控项、触发器、用户权限等
- 存储监控数据:性能指标数据
- 维护历史记录:告警事件、用户操作日志
Zabbix Web Interface
- 提供跨平台Web访问界面
- 图形化配置管理
- 响应式设计,支持多设备访问
- 基于角色的权限控制系统
Zabbix Proxy(可选组件)
- 分布式监控代理
- 负载分担和性能扩展
- 数据缓存和网络隔离
Zabbix Agent
- 部署在被监控设备上的数据采集器
- 支持被动模式和主动模式
- 支持自定义监控脚本
2.4 Zabbix 核心概念
主机与主机群组
- 主机:被监控的实体,通常用IP或主机名标识
- 主机群组:逻辑分组,便于权限管理和批量操作
监控项
- Zabbix中最基本的概念,代表一个具体的监控指标
- 关键属性:键值(Key)、数据类型、更新间隔、历史数据保留时间
- 示例:system.cpu.load[avg1]、vfs.fs.size[/,pused]
触发器
- 基于监控项数据定义异常规则
- 逻辑表达式结果为"真"时状态变为PROBLEM,为"假"时变为OK
- 示例:{Web-Server:system.cpu.load[avg1].last()}>5
图形与模板
- 图形:将监控项数据可视化展示
- 模板:监控项、触发器、图形等的预定义集合,提高部署效率
自动发现
- 网络发现:自动发现网络中的设备
- 自动注册:新Agent主动向Server注册
- 低级别发现:自动发现主机上的实体并创建监控项
三、 Zabbix 安装与配置实践
系统环境:RHEL 9
1. 系统基础配置
# 安装必要工具包:文件传输、压缩、网络工具、时间同步服务
[root@server ~]# yum -y install lrzsz tar net-tools chrony# 启动时间同步服务并设置开机自启(确保监控数据时间准确)
[root@server ~]# systemctl restart chronyd
[root@server ~]# systemctl enable chronyd
2. 安装Zabbix软件源
#提前准备好官方的yum源
[root@server ~]# ls
zabbix-release-7.0-2.el9.noarch.rpm# 安装Zabbix官方提供的yum源
[root@server ~]# rpm -Uvh zabbix-release-7.0-2.el9.noarch.rpm # 验证源是否安装成功
[root@server ~]# ls /etc/yum.repos.d/
redhat.repo server.repo zabbix.repo
配置国内镜像源加速下载:
# 将Zabbix官方源替换为阿里云镜像,提高下载速度
[root@zabbix-server ~]# cat /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/7.0/rocky/9/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-B5333005[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/9/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-08EFA7DD
gpgcheck=1[zabbix-sources]
name=Zabbix Official Repository source code - $basearch
baseurl=https://repo.zabbix.com/zabbix/7.0/rocky/9/SRPMS
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-B5333005
gpgcheck=1
3. 安装Zabbix核心组件
# 安装Zabbix服务器、Web界面、Nginx配置、数据库脚本等全套组件
[root@server ~]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent -y
4. 数据库安装与配置
# 安装MariaDB数据库
[root@server ~]# yum install -y mariadb mariadb-server# 启动数据库服务
[root@server ~]# systemctl restart mariadb
[root@server ~]# systemctl enable mariadb
数据库安全初始化:
# 运行安全配置脚本,设置root密码、移除匿名用户、测试数据库等
[root@server ~]# mysql_secure_installation# 1. 密码策略说明
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDBSERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!# 2. 输入当前root密码(新安装直接回车)
Enter current password for root (enter for none):
# 直接回车,因为新安装还没有设置密码# 3. 启用Unix socket认证(增强安全性)
Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..... Success!# 4. 设置root用户新密码
Change the root password? [Y/n] y
New password: [输入密码:3edc4rfv]
Re-enter new password: [确认密码:3edc4rfv]
Password updated successfully!
Reloading privilege tables..... Success!# 5. 移除匿名用户(重要安全步骤)
Remove anonymous users? [Y/n] y... Success!
# 移除默认安装时创建的匿名用户账户,防止未授权访问# 6. 禁止root用户远程登录
Disallow root login remotely? [Y/n] n... skipping.
# 此处选择n,允许root远程登录(根据实际需求选择)
# 生产环境建议选择y,禁止root远程登录,通过普通用户+sudo提权# 7. 移除测试数据库
Remove test database and access to it? [Y/n] y- Dropping test database...... Success!- Removing privileges on test database...... Success!
# 移除默认的test数据库,减少潜在的安全风险# 8. 重新加载权限表使所有更改生效
Reload privilege tables now? [Y/n] y... Success!# 9. 完成提示
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
创建Zabbix数据库和用户:
-- 连接到MySQL数据库
[root@server ~]# mysql -uroot -p3edc4rfv-- 创建专门用于Zabbix的数据库,使用utf8mb4字符集
MariaDB [(none)]> create database zabbix character set utf8mb4 collate utf8mb4_bin;-- 创建zabbix用户并设置密码
MariaDB [(none)]> create user zabbix@localhost identified by '3edc4rfv';-- 授予zabbix用户对zabbix数据库的所有权限
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;-- 临时允许创建函数(导入数据库架构需要)
MariaDB [(none)]> set global log_bin_trust_function_creators = 1;-- 刷新权限使设置生效
MariaDB [(none)]> flush privileges;
导入Zabbix数据库架构:
# 导入Zabbix预定义的数据库表结构、数据等
[root@server ~]# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p3edc4rfv zabbix
恢复数据库安全设置:
-- 导入完成后,恢复安全设置
MariaDB [(none)]> set global log_bin_trust_function_creators = 0;
MariaDB [(none)]> flush privileges;
5. Zabbix服务器配置
# 编辑Zabbix服务器主配置文件
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf# 需要修改的关键配置项:
ListenPort=10051 # 监听端口
DBHost=localhost # 数据库主机
DBName=zabbix # 数据库名
DBUser=zabbix # 数据库用户
DBPassword=3edc4rfv # 数据库密码
DBSocket=/var/lib/mysql/mysql.sock # MySQL socket文件路径
ListenIP=0.0.0.0 # 监听所有IP
6. Web服务配置
# 配置Nginx监听端口
[root@server ~]# vim /etc/nginx/conf.d/zabbix.conf
# 修改监听端口为8080(避免与系统其他服务冲突)
listen 8080;
server_name example.com;
7. 启动所有服务
# 启动Zabbix相关服务
[root@server ~]# systemctl restart zabbix-server zabbix-agent.service nginx.service php-fpm.service # 设置服务开机自启
[root@server ~]# systemctl enable zabbix-server zabbix-agent.service nginx.service php-fpm.service
8. 访问Zabbix Web界面
在浏览器中访问:http://服务器IP:8080
9. 系统语言配置(如果没有中文)
# 安装中文语言包
[root@server ~]# yum -y install langpacks-zh_CN.noarch# 安装基础语言支持
[root@server ~]# yum -y install glibc-common# 检查系统中可用的中文locale
[root@server ~]# locale -a | grep zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8
10. 完成Web安装向导
预检测检查页面:
数据库连接配置:
时区设置:
选择亚洲/上海时区
安装完成:
登录系统:
默认账号:Admin
,默认密码:zabbix
Zabbix主仪表盘:
四、 监控远程Linux服务器
1. 在被监控服务器上安装Zabbix Agent
# 添加Zabbix软件源(这里以RHEL 7为例,根据实际系统版本调整)
[root@agent ~]# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/7/x86_64/zabbix-release-latest-7.0.el7.noarch.rpm# 安装Zabbix Agent
[root@agent ~]# yum install zabbix-agent# 配置Agent
[root@agent ~]# vim /etc/zabbix/zabbix_agentd.conf # 关键配置项修改:
Server=192.168.100.40 # Zabbix服务器的IP,用于被动监控模式
ServerActive=192.168.100.40 # Zabbix服务器的IP,用于主动监控模式
Hostname=zabbix-agent # 本机在Zabbix中显示的主机名# 启动Agent服务
[root@agent ~]# systemctl restart zabbix-agent.service
[root@agent ~]# systemctl enable zabbix-agent.service
2. 在Zabbix Web界面添加主机
导航到主机页面:
创建新主机:
配置主机信息:
- 主机名称:
zabbix-agent
- 可见的主机名:
zabbix-agent
- 群组:选择或创建主机群组(如"Linux Servers")
- Agent接口:添加Agent的IP地址和端口(10050)
添加监控模板:
选择 Templates/Operating systems
→ Linux by Zabbix agent
完整主机配置:
监控状态验证:
等待几分钟后,可用性指示灯变为绿色表示监控成功
五、 解决中文乱码问题
字体替换步骤
# 1. 从Windows系统获取中文字体文件
# 路径:C:\Windows\Fonts\simkai.ttf (简体楷体常规)# 2. 上传字体文件到Zabbix服务器
# 使用rz命令或其他文件传输工具将simkai.ttf上传到服务器# 3. 替换Zabbix默认字体
[root@server ~]# cd /usr/share/zabbix/assets/fonts
[root@server fonts]# mv simkai.ttf graphfont.ttf # 4. 重启Web服务使更改生效
[root@server fonts]# systemctl restart nginx php-fpm
说明:此操作将Zabbix图表中的默认字体替换为中文字体,解决图表中中文显示为乱码或方框的问题。
六、Zabbix工作流程
6.1 完整监控流程
- 配置监控项:定义要监控的指标
- 数据采集:Agent按间隔收集数据
- 数据传输:发送到Server处理
- 阈值判断:触发器评估数据状态
- 告警触发:满足条件时生成告警
- 通知发送:通过配置的渠道通知用户
- 问题处理:用户响应并解决问题
- 状态恢复:问题解决后系统自动更新状态
6.2 数据流向
被监控设备 → Zabbix Agent → Zabbix Proxy(可选) → Zabbix Server → Database↓Web Interface → 用户
通过以上完整的安装和配置流程,我们已经成功搭建了一个功能完善的Zabbix监控系统,并实现了对远程Linux服务器的基本监控。这个系统为后续的监控项配置、告警设置和性能分析奠定了坚实的基础。