Zabbix 企业级分布式监控

目录

简介

一、监控系统基础

1.1 监控的价值

1.2 监控的 5 大类型与 5 大层次

1.3 监控系统的实现原理

二、Zabbix:企业级监控方案

2.1 Zabbix 简介

2.2 Zabbix 核心功能特性

2.3 Zabbix 角色与架构

三、Zabbix 部署案例

3.1 资源清单

3.2 基础环境配置

(1)关闭防火墙

(2)关闭 SELinux

(3)时间同步

(4)修改主机名

3.3 部署 Zabbix Server

(1)添加 Zabbix 源

(2)安装依赖软件

(3)配置 MySQL 数据库

(4)导入 Zabbix 初始数据

(5)配置 Zabbix Server

(6)配置 Nginx(Web 服务)

(7)启动服务并设置自启

3.4 Zabbix Web 界面配置

(1)访问登录页面

(2)语言与许可协议

(3)环境检查

(4)配置数据库连接

(5)设置 Server 名称与时区

(6)完成安装

(7)登录验证

3.5 部署 Zabbix Proxy(分布式监控)

(1)添加 Zabbix 源(同 Server)

(2)安装 Proxy 组件

(3)导入 Proxy 初始数据

(4)配置 Proxy

(5)启动 Proxy 并设置自启

(6)Web 界面添加 Proxy

3.6 部署 Zabbix Agent(被监控节点)

(1)添加 Zabbix 源(同 Server)

(2)安装 Agent

(3)配置 Agent

(4)启动 Agent 并设置自启

(5)Web 界面添加主机

四、常见问题:解决 Zabbix 字体显示乱码

总结


简介

在 IT 运维领域,监控系统如同 “千里眼” 与 “顺风耳”,是保障业务稳定运行的核心支柱。据行业经验,监控工作在运维环节中占比可达 30%,构建一套高效的监控告警系统更是运维工程师的核心能力。本文将从监控系统的基础原理出发,讲解 Zabbix 的功能特性,并完成 Zabbix 企业级分布式监控的部署与配置。

一、监控系统基础

1.1 监控的价值

监控(Monitoring)的本质是 “检测与预防”,通过对 IT 系统全链路的指标采集、分析与告警,提前发现潜在问题,避免故障扩散。在复杂的 IT 架构中,监控需覆盖从底层硬件到上层业务的全栈场景。

1.2 监控的 5 大类型与 5 大层次

  • 5 大监控类型:应用性能监控、业务交易监控、网络性能监控、操作系统监控(文档中列 4 项,实际涵盖全场景)。
  • 5 大逻辑层次(从底层到上层):
  • 基础设施监控:网络设备(交换机、路由器)的流量、丢包率、连接数等,由运维负责,保障底层稳定性。
  • 系统层监控:物理机 / 虚拟机 / 操作系统的 CPU 使用率、内存占用、磁盘 IO、网络带宽等核心指标。
  • 应用层监控:接口响应时间、调用量、错误率、慢 SQL、缓存命中率等服务相关指标。
  • 业务监控:用户登录、下单、支付等核心业务流程数据,为运营决策和战略调整提供数据支撑。
  • 端用户体验监控:用户端(APP、H5、PC)的性能、错误码、地域 / 运营商访问情况等,直接反映用户感知。

1.3 监控系统的实现原理

一个完整的监控系统需包含数据采集数据处理(存储、分析、告警、展示) 两大部分,核心组件与工作模式如下:

  • 采集协议:分为专用客户端(如 Zabbix Agent)和公用协议(SNMP、IPMI、SSH、Telnet 等)。
  • 工作模式
  • 被动模式:服务器主动向客户端采集数据(对服务器开销大,适合小规模场景)。
  • 主动模式:客户端主动向服务器上报数据(对服务器开销小,适合大规模场景)。
  • 代理架构:在大规模 / 跨地域场景中,通过 C/S/P(Client/Proxy/Server)架构分摊服务器压力,支持分布式监控。

二、Zabbix:企业级监控方案

2.1 Zabbix 简介

Zabbix 是一款开源的企业级分布式监控系统,支持从服务器、网络设备到 Web 应用、数据库的全场景监控。其优势在于:

  • 跨平台适配:可运行于 Linux、Windows、AIX 等主流系统。
  • 开源免费:基于 GPLv2 协议,源代码公开可定制。
  • 功能全面:覆盖数据采集、告警、可视化、自动化等全流程。

2.2 Zabbix 核心功能特性

  1. 数据收集:支持 SNMP、IPMI、自定义检测,可按自定义间隔采集数据,包含 Server、Proxy、Agent 三种角色。
  2. 灵活告警:通过 “触发器(trigger)” 定义阈值,支持告警升级、多渠道通知(邮件、短信等),可结合宏变量自定义告警信息,甚至通过远程命令实现自动化修复。
  3. 可视化与报告:内置实时绘图、网络拓扑图、自定义面板,支持生成监控报告,助力数据可视化分析。
  4. 历史数据管理:数据存储于数据库,支持配置保留周期,内置自动清理机制。
  5. 自动化能力:支持网络设备自动发现、Agent 自动注册、模板继承(减少重复配置)。
  6. 高扩展性:通过 API 支持第三方集成,Agent 轻量可扩展,支持大规模分布式部署(Proxy 架构)。

2.3 Zabbix 角色与架构

Zabbix 采用分布式架构,核心角色包括:

  • Zabbix Server:核心组件,负责接收、存储、分析数据,触发告警。
  • Zabbix Proxy:代理节点,用于大规模场景,分摊 Server 压力,支持跨网络监控。
  • Zabbix Agent:部署在被监控节点,负责采集本地数据(主动 / 被动模式)。
  • Zabbix Web:基于 PHP 的 Web 界面,用于配置、管理和查看监控数据。

架构示意图如下:

Client(Agent)<--> Proxy <--> Server(数据存储/分析/告警)<--> Web界面

三、Zabbix 部署案例

3.1 资源清单

本次部署采用 4 台 openEuler 24.03 主机,配置如下:

操作系统

配置

主机名

IP 地址

角色

openEuler 24.03

2C4G

zabbix

192.168.207.137

Zabbix Server

openEuler 24.03

2C4G

proxy

192.168.207.138

Zabbix Proxy

openEuler 24.03

2C4G

server01

192.168.207.139

被监控节点

openEuler 24.03

2C4G

server02

192.168.207.140

被监控节点

3.2 基础环境配置

所有节点需完成以下预处理(以 root 用户操作):

(1)关闭防火墙

防火墙可能拦截 Zabbix 通信,需关闭并禁用自启动:

systemctl stop firewalld  # 临时关闭防火墙
systemctl disable firewalld  # 永久禁用防火墙(生产环境可按需配置规则)
(2)关闭 SELinux

SELinux 可能限制进程权限,临时关闭并永久禁用:

setenforce 0  # 临时关闭(立即生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  # 永久禁用(需重启)
(3)时间同步

确保所有节点时间一致(避免日志与监控数据时间错乱):

timedatectl set-timezone Asia/Shanghai  # 设置时区为上海
chronyc sources -v  # 同步时间(需安装chrony:dnf install -y chrony)
(4)修改主机名

按资源清单设置主机名,便于识别角色:

# 在zabbix节点执行
hostnamectl set-hostname zabbix
# 在proxy节点执行
hostnamectl set-hostname proxy
# 在server01节点执行
hostnamectl set-hostname server01
# 在server02节点执行
hostnamectl set-hostname server02

3.3 部署 Zabbix Server

Zabbix Server 是核心节点,负责数据存储与分析,需关联数据库(本次用 MySQL)。

(1)添加 Zabbix 源

Zabbix 官方源提供稳定版本,适用于 RHEL 系系统(openEuler 兼容):

rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all  # 清理缓存,确保源生效
(2)安装依赖软件

需安装 Zabbix Server、Web 组件、MySQL 及 SNMP 库:

# 安装Zabbix Server核心组件
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
# 安装MySQL数据库(Zabbix 6.4要求MySQL 8.0.30+)
dnf -y install mysql-server-8.0.41 mysql
# 安装SNMP依赖(监控网络设备需用到)
dnf -y install https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm
(3)配置 MySQL 数据库

Zabbix 需数据库存储监控数据,需创建库、用户并授权:

  1. 启动 MySQL 并设置开机自启:
systemctl enable mysqld --now  # --now表示立即启动
  1. 登录 MySQL 并配置(默认无密码,首次登录直接回车):
mysql -uroot
  1. 执行 SQL 语句(设置 root 密码、创建 Zabbix 库和用户):
-- 设置root本地登录密码(示例为123456,生产环境需复杂密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;  # 刷新权限-- 创建Zabbix主数据库(utf8mb4支持中文)
create database zabbix character set utf8mb4 collate utf8mb4_bin;
-- 创建Zabbix用户(本地访问)
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;-- 创建Proxy数据库(若需部署Proxy)
create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
-- 允许Zabbix用户远程访问Proxy库(Proxy需连接Server的数据库)
create user zabbix@'%' identified by 'zabbix';
grant all privileges on zabbix_proxy.* to zabbix@localhost;
grant all privileges on zabbix_proxy.* to zabbix@'%';-- 允许创建存储函数(导入数据时需要)
set global log_bin_trust_function_creators=1;
quit;  # 退出MySQL
(4)导入 Zabbix 初始数据

Zabbix 提供预设 SQL 脚本,需导入主数据库:

# 导入Server初始数据(输入密码zabbix)
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix# 导入完成后关闭存储函数创建权限(安全加固)
mysql -uroot -p  # 输入root密码123456
set global log_bin_trust_function_creators=0;
quit;
(5)配置 Zabbix Server

修改配置文件,关联数据库密码:

vim /etc/zabbix/zabbix_server.conf
# 找到129行左右,取消注释并设置数据库密码
DBPassword=zabbix  # 与之前创建的zabbix用户密码一致
(6)配置 Nginx(Web 服务)

Zabbix Web 通过 Nginx 提供访问,需设置监听端口:

vim /etc/nginx/conf.d/zabbix.conf
# 找到并修改监听端口(避免与其他服务冲突,示例用8080)
listen 8080;
server_name _;  # 保持默认
(7)启动服务并设置自启
# 重启相关服务
systemctl restart zabbix-server zabbix-agent nginx php-fpm
# 设置开机自启
systemctl enable zabbix-server zabbix-agent nginx php-fpm

3.4 Zabbix Web 界面配置

通过 Web 界面完成 Zabbix 初始化,步骤如下:

(1)访问登录页面

在浏览器输入 Server 节点 IP + 端口:​​http://192.168.207.137:8080/​

(2)语言与许可协议

选择 “中文”(支持多语言),同意 GPLv2 许可协议,点击 “下一步”。

(3)环境检查

系统会自动检测依赖(如 PHP 版本、数据库驱动等),全部通过后点击 “下一步”。

(4)配置数据库连接
  • 数据库类型:MySQL
  • 服务器:localhost(数据库与 Server 同机)
  • 端口:3306(MySQL 默认)
  • 数据库名:zabbix
  • 用户名:zabbix
  • 密码:zabbix(与之前配置一致)
    点击 “下一步”。
(5)设置 Server 名称与时区
  • Zabbix 主机名称:保持默认(或自定义)
  • 时区:选择 “Asia/Shanghai”(上海时区)
    点击 “下一步”。
(6)完成安装

确认配置无误后,点击 “下一步”,提示 “Zabbix 前端已配置好” 即完成。

(7)登录验证

默认账号:​​Admin​​​,默认密码:​​zabbix​​(首次登录建议修改密码)。

3.5 部署 Zabbix Proxy(分布式监控)

Proxy 用于分担 Server 压力,适合大规模监控场景,部署步骤如下:

(1)添加 Zabbix 源(同 Server)
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
(2)安装 Proxy 组件
dnf -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql
# 安装SNMP依赖(同Server)
dnf -y install https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm
(3)导入 Proxy 初始数据

Proxy 数据需存储在之前创建的​​zabbix_proxy​​库(在 Proxy 节点执行):

# 输入zabbix用户密码(zabbix)
zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.207.137
(4)配置 Proxy
vim /etc/zabbix/zabbix_proxy.conf
# 修改以下参数:
Server=192.168.207.137  # 指向Zabbix Server的IP
Hostname=Zabbix proxy  # 与Web添加时的名称一致
DBHost=192.168.207.137  # 数据库主机(Server节点IP)
DBPassword=zabbix  # 数据库密码
(5)启动 Proxy 并设置自启
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
(6)Web 界面添加 Proxy
  • 登录 Zabbix Web,进入 “管理”→“Agent 代理程序”→“创建代理”
  • 代理名称:与​​zabbix_proxy.conf​​​中​​Hostname​​一致(Zabbix proxy)
  • 代理类型:主动式(Proxy 主动向 Server 汇报)
  • 点击 “添加”。

3.6 部署 Zabbix Agent(被监控节点)

在被监控节点(server01、server02)部署 Agent,步骤如下:

(1)添加 Zabbix 源(同 Server)
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
(2)安装 Agent
dnf -y install zabbix-agent
(3)配置 Agent
vim /etc/zabbix/zabbix_agentd.conf
# 修改以下参数:
Server=192.168.207.137  # 被动模式:允许哪个节点采集数据(Server或Proxy)
ServerActive=192.168.207.137  # 主动模式:向哪个节点上报数据(与Server一致)
Hostname=server01  # 与Web添加的主机名一致(server01节点用此名,server02改为server02)
(4)启动 Agent 并设置自启
systemctl start zabbix-agent
systemctl enable zabbix-agent
(5)Web 界面添加主机
  • 进入 “数据采集”→“主机”→“创建主机”
  • 主机名称:与 Agent 配置的​​Hostname​​一致(如 server01)
  • 主机群组:选择或创建(如 “Linux 服务器”)
  • 接口:添加 “Agent”,IP 地址填写被监控节点 IP(192.168.207.139)
  • 模板:链接 “Template OS Linux by Zabbix agent”(系统自带模板)
  • (若通过 Proxy 监控)在 “由代理程序监测” 中选择之前创建的 Proxy
  • 点击 “添加”。

四、常见问题:解决 Zabbix 字体显示乱码

默认情况下,Zabbix 图表可能因缺少中文字体导致乱码,解决方法如下:

  1. 查找字体配置
# 查找字体路径定义
grep "ZBX_FONTPATH" /usr/share/zabbix/include/defines.inc.php
# 输出:define('ZBX_FONTPATH', realpath('assets/fonts'));# 查找默认字体名称
grep "ZBX_GRAPH_FONT_NAME" /usr/share/zabbix/include/defines.inc.php
# 输出:define('ZBX_GRAPH_FONT_NAME', 'graphfont');
  1. 替换字体文件
  • 上传中文字体文件(如微软雅黑​​msyh.ttc​​​)到​​/usr/share/zabbix/assets/fonts/​
  • 创建软链接替换默认字体:
cd /usr/share/zabbix/assets/fonts
ln -snf msyh.ttc graphfont.ttf  # 让系统识别为默认字体
  1. 刷新页面:字体生效,中文正常显示。

总结

Zabbix 作为企业级监控方案,凭借灵活的架构、丰富的功能和开源免费的优势,被广泛应用于各行业。本文从原理到实战,详细讲解了 Zabbix 的部署流程,涵盖 Server、Proxy、Agent 全组件。实际生产中,还可结合模板自定义、自动发现、告警升级等功能,进一步提升监控效率。

监控系统的核心价值不仅在于 “发现问题”,更在于 “预防问题”。通过 Zabbix 构建全链路监控体系,可为业务稳定运行提供坚实保障。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92743.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL JOIN 全解析:用 `users` 与 `orders` 表彻底掌握内连接、左连接、右连接

SQL JOIN 全解析&#xff1a;用 users 与 orders 表彻底掌握内连接、左连接、右连接 在日常开发中&#xff0c;SQL 的连接&#xff08;JOIN&#xff09;语句是数据库查询的核心技能。尤其在多表联合查询时&#xff0c;不掌握好 INNER JOIN、LEFT JOIN、RIGHT JOIN&#xff0c;…

(一)从零搭建unity3d机械臂仿真-unity3d导入urdf模型

1.新建工程并加载模型 &#xff08;1&#xff09;unity中新建3d工程 &#xff08;2&#xff09;将机器人模型导入到unity3d中 导入开源Unity-Robotics-Hub的机械臂。 详细操作参考视频 ROS Unity URDF Import Testing Robot Motion 使用 URDF Importer工具 在 Unity 中&#x…

Linux之网络部分-应用层自定义协议与序列化

一、应用层 1.1、理解协议 协议是一种 "约定". socket api 的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的。如果我们要传输一些 "结构化的数据" 怎么办呢? 其实&#xff0c;协议就是双方约定好的结构化的数据。 1.2、网络版计…

机器学习week3-分类、正则化

1. 逻辑回归1.1. 线性回归 vs 逻辑回归对比维度线性回归逻辑回归任务类型回归&#xff08;预测连续值&#xff09;分类&#xff08;预测离散类别&#xff09;输出范围(−∞,∞)[0,1]&#xff08;概率值&#xff09;损失函数均方误差&#xff08;MSE&#xff09;对数损失&#x…

FastAdmin 中生成插件

在 FastAdmin 中生成一个 OCR 发票识别插件&#xff0c;可以按照以下步骤进行开发。这里假设你已经熟悉 FastAdmin 插件开发的基本流程&#xff0c;并会使用 Composer 和 PHP 扩展。1. 创建插件骨架使用 FastAdmin 命令行工具生成插件基础结构&#xff1a;php think addon -a o…

DevExpress WinForms中文教程:Grouping(分组)- 如何自定义分组算法?

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

PHP 与 Vue.js 结合的前后端分离架构

PHP 与 Vue.js 结合是构建现代 Web 应用的流行技术栈&#xff0c;通常采用 前后端分离架构。以下是关键要点和推荐实现方案&#xff1a; 一、技术栈组合 角色技术选项后端 (PHP)Laravel (推荐)、Symfony、CodeIgniter前端 (Vue)Vue 2/3、Vue Router、Pinia/Vuex、Vite通信协议…

XML高效处理类 - 专为Office文档XML处理优化

/**** 提供XML读取、写入、修改、查询等高级功能&#xff0c;支持命名空间和复杂XML结构* * 主要功能&#xff1a;* 1. 复杂路径解析&#xff08;支持属性筛选、索引、通配符&#xff09;* 2. 完整节点类型支持&#xff08;元素、文本、CDATA、注释、PI&#xff09;* 3. 高效元…

星慈光编程虫2号小车讲解第一篇--向前向后

星慈光编程虫2号小车是一款基于微控制器&#xff08;如Arduino&#xff09;的编程教学小车&#xff0c;常用于学习机器人控制和编程基础。本讲解将重点介绍小车的基本运动&#xff1a;前进、后退、左转和右转。这些运动通过控制电机实现&#xff0c;通常涉及调整电机的方向和速…

iOS 加固工具有哪些?快速发布团队的实战方案

在当今快速迭代的 iOS 开发环境中&#xff0c;团队需要在高频上线与应用安全之间找到平衡。快速发布不应牺牲安全性&#xff0c;而安全加固也不应成为阻碍上线的瓶颈。这就要求开发者在加固工具的选型与流程设计上&#xff0c;做到既高效又可靠。 那么&#xff0c;iOS 加固工具…

结构型模式-架构解耦与扩展实践

结构型模式聚焦于对象间的组合关系&#xff0c;通过优化类与对象的装配方式&#xff0c;实现系统的灵活性与可扩展性。在分布式系统中&#xff0c;由于多节点协作、跨网络通信及异构环境集成等特性&#xff0c;传统结构型模式需进行适应性改造&#xff0c;以应对分布式特有的复…

scratch笔记和练习-第三课

角色的大小变化 亮度等特效设置 流程图图形符号 Figma攻略&#xff1a;26个流行流程图符号及其解释 练习 实现在闪动10次后角色缓缓变回原形

Redis MCP 安装与配置完整指南

一、Redis MCP 简介 Redis MCP (Managed Control Plane) 是一个独立于 Redis 服务运行的管理控制平台&#xff0c;用户可通过该平台快速高效地管理和配置 Redis 实例。Redis MCP 可配合开源 Redis 或 Redis Cloud 使用。 二、安装 Redis MCP 服务 Redis MCP 提供多种安装方式&a…

Spring Boot配置文件加载全指南:从基础到Spring Cloud集成

​​​ ​​一、核心概念​ 配置文件默认存在加载顺序优先级主要用途必需依赖bootstrap.yml❌ 无1(最先)最高Spring Cloud上下文初始化spring-cloud-starter-bootstrapbootstrap.properties❌ 无1(略高于.yml)最高同上同上application.yml✅ 自动创建2中等应用核心配置无appl…

Python通关秘籍(六)数据结构——字典

前文复习 五、数据结构 5.1 列表(List) 列表是一种有序的可变数据集合,可以包含不同类型的元素。

自学嵌入式 day33 TCP、HTTP协议(超文本传输协议)

6、黏包问题&#xff08;1&#xff09;、原因&#xff1a;发送方发送数据太快或者接收方接收数据太慢&#xff0c;导致数据在缓冲区缓存。&#xff08;2&#xff09;、解决方法&#xff1a;①发送指定大小数据&#xff08;结构体&#xff09;问题&#xff1a;结构体对齐问题&am…

LinuxShell 的 Here-Document(<< EOF) 笔记250723

LinuxShell 的 Here-Document(<< EOF) 笔记250723 Here-Document(<< EOF) Linux Shell Here Document (<< EOF) 终极指南 Here Document&#xff08;立即文档&#xff09;是 Shell 中用于多行输入重定向的强大功能&#xff0c;其核心语法为 << DELI…

【windows修复】解决windows10,没有【相机] 功能问题

问题: windows10,相机模块,好像是被卸载了,想重新安装 方法简介: 先下载windows store, 然后,在windows store 里面下载 相机功能: 解决: 直接下载官方离线包并手动安装(成功率 90%+) 1 用浏览器打开 https://store.rg-adguard.net 这是微软 CDN 解析站,安…

Python 中字典和 if-else 的选择

一、为什么要写这篇文章&#xff1f; 在 Python 编程中&#xff0c;我们经常需要根据不同的条件做不同的事情。比如&#xff1a; 根据用户等级显示不同的内容根据成绩给出不同的评价根据天气决定穿什么衣服 这时候&#xff0c;我们通常有两种选择&#xff1a; 用 if-else 语句用…

【开源解析】基于HTML5的智能会议室预约系统开发全攻略:从零构建企业级管理平台

&#x1f680; 【开源解析】基于HTML5的智能会议室预约系统开发全攻略&#xff1a;从零构建企业级管理平台 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f4a1; 热爱不止于代码&#xff0c;热情源自每一个灵感闪现的夜晚。愿以开源之火&#xff0c;点亮前行…