☰
轻量级工业物联网平台UNIHH-IOT:架构拆解与实操避坑指南
2026/10/15 16:06:49 网站建设 项目流程

1. 工业物联网平台选型的核心逻辑与整体架构拆解

工业数字化转型喊了这么多年,真正落到车间产线层面,最头疼的往往不是算法不够先进,而是数据上不来、设备连不通、系统太笨重。很多团队一开始就奔着大厂那套重型物联网中台去,结果部署周期三个月起步,光中间件就七八个,运维成本比设备本身还高。UNIHH-IOT这个项目走的是另一条路——轻量级、高性能、前后端全开源,目标很明确:让中小型制造企业或者内部创新团队,用最低的硬件和人力成本,把设备数据真正管起来、用起来。

这个平台解决的核心问题有三个层面。第一层是设备接入的碎片化,车间里既有新买的PLC,也有十年前的串口仪表,协议五花八门,传统做法是每个设备写一个采集程序,维护起来简直是噩梦。第二层是数据实时性与吞吐的平衡,工业场景下有些数据要求毫秒级响应,有些只需要分钟级上报,用同一套消息队列硬扛所有流量,要么浪费资源要么延迟爆炸。第三层是部署与二次开发的灵活性,很多平台功能大而全,但想改一个字段或者加一个告警规则,得翻遍文档改底层代码,团队根本耗不起。

适合看这篇内容的人,我大致分三类。一类是工业自动化背景的工程师,想从PLC编程往上层数据平台延伸,需要一个能快速上手、代码可读性强的参考项目。第二类是物联网方向的开发者,手里有硬件但缺一套完整的前后端实现,想找一个能直接跑起来、方便二次开发的底座。第三类是技术负责人或架构师,在评估轻量级物联网方案,需要了解这类平台在协议适配、消息流转、数据存储上的典型设计取舍。不管你属于哪一类,下面我会把 UNIHH-IOT 的整体思路、关键细节、实操要点和踩坑经验拆开来讲,尽量让不同基础的人都能找到能直接抄作业的部分。

1.1 为什么选择轻量级架构而不是重型中台

先说说架构选型这件事。工业物联网平台从技术栈上大致分两派:一派是基于微服务+消息中间件+时序数据库的重型架构,典型特征是组件多、依赖重、扩展性强但部署复杂;另一派是单体或模块化单体+轻量消息队列+嵌入式数据库的轻量架构,牺牲了一部分横向扩展能力,换来了部署简单、资源占用低、代码路径短。

UNIHH-IOT 明显属于后者。我推测它的设计初衷是面向边缘侧或厂区级部署,而不是跨地域的集团级平台。这个判断基于几个信号:前后端全开源意味着代码要足够简洁,否则没人愿意读;轻量级高性能这个定位说明它要在有限资源下跑出可接受的吞吐;工业数字化转型这个场景决定了它必须能离线运行、不能强依赖公有云。

这种选型的优势很直接。部署成本低,一台工控机或者低配服务器就能跑起来,不需要专门的运维团队。调试链路短,从设备上报到页面展示,中间经过的组件少,出问题容易定位。二次开发门槛低,代码结构清晰,改一个采集协议或者加一个数据看板,不需要理解整个微服务治理体系。当然代价也有,比如水平扩展能力有限,当设备数量从几百台涨到几万台时,可能需要做架构升级;高可用方案相对简单,不像重型中台那样有完善的故障转移机制。但对于大多数中小规模工业场景来说,这些代价完全可以接受,毕竟先跑起来比什么都重要。

1.2 前后端全开源带来的实际价值

前后端全开源这件事,在工业物联网领域其实挺难得的。很多平台只开源采集端或者只开源前端,核心的数据处理逻辑藏着掖着,导致你想改一个数据流转规则都无从下手。UNIHH-IOT 把前后端都放出来,意味着整个数据链路是透明的,从设备连接、协议解析、消息路由、数据落库到前端展示,每一环你都能看到实现细节。

这对不同角色的价值不一样。对开发者来说,这是一个完整的学习样本,可以研究工业场景下 WebSocket 长连接怎么管理、时序数据怎么高效写入、告警规则引擎怎么设计。对集成商来说,这是一个可定制的底座,客户要加一个私有协议,直接照着现有协议适配器的结构写一个就行,不用等官方支持。对企业技术团队来说,这是一个可控的资产,不用担心平台方停止维护或者突然收费,代码在自己手里,想怎么改就怎么改。

我特别想强调一点:开源不等于免费,但开源意味着可审计。工业场景对数据安全很敏感,闭源平台你只能选择信任,开源平台你可以自己审查每一行代码,确认没有后门、没有多余的数据外传。这个价值在涉及生产数据的时候,比省下的授权费重要得多。

2. 核心模块拆解与关键技术细节解析

把整体架构讲清楚之后,我们深入到各个核心模块。UNIHH-IOT 作为一个完整的物联网平台,至少包含设备接入、协议解析、消息处理、数据存储、规则引擎、前端展示这几个部分。每一块都有它的设计难点和实操要点,我结合常见工业物联网平台的实现方式,把最可能采用的技术方案和背后的考量讲透。

2.1 设备接入层:多协议适配与连接管理

设备接入层是整个平台的第一道关口,也是最脏最累的活。工业现场的设备协议可以用“百花齐放”来形容,Modbus RTU/TCP、OPC UA、MQTT、HTTP、自定义串口协议,甚至还有通过网关转换后的私有格式。UNIHH-IOT 要做的第一件事,就是把这些异构协议统一成内部可处理的消息格式。

我推测它的接入层采用了适配器模式,每种协议对应一个适配器实现,适配器负责三件事:建立连接、解析报文、转换成平台内部的标准消息结构。这个标准消息结构通常包含设备ID、时间戳、指标键值对、质量码等字段。这样做的好处是,上层的数据处理和存储不需要关心底层是什么协议,只需要处理统一格式的消息。

连接管理是另一个关键点。工业设备数量多、网络不稳定,连接层必须处理好断线重连、心跳保活、连接复用这些问题。以 MQTT 接入为例,平台需要维护一个连接池,每个设备对应一个会话,设备离线时保留会话状态,上线后恢复订阅关系。如果设备数量大,还要考虑连接数上限和内存占用的平衡,通常会用 Netty 这类高性能网络框架来做底层通信。

注意:设备接入层最容易踩的坑是时间戳处理。很多工业设备上报的数据不带时间戳,或者时间戳格式不统一,平台如果直接用服务器接收时间,会导致数据时序错乱。建议在适配器层强制要求设备上报时间戳,如果设备不支持,则在网关侧打时间戳,并记录采集延迟。

2.2 消息流转与规则引擎:数据从哪来到哪去

设备数据接入之后,需要经过一系列处理才能变成有用的信息。UNIHH-IOT 的消息流转大致会经过这几个环节:接入层解析 -> 消息队列缓冲 -> 规则引擎处理 -> 数据分发。消息队列的作用是削峰填谷,工业场景下数据上报往往有突发性,比如某个工序启动时几十台设备同时上报,没有缓冲的话后端处理不过来。

规则引擎是平台智能化的核心。它要支持用户定义各种规则,比如“温度超过80度触发告警”、“每5分钟计算一次平均值”、“设备离线超过30秒标记为故障”。规则引擎的设计难点在于表达能力和性能的平衡。用 Drools 这类重型规则引擎,功能强大但启动慢、内存占用高;自己写一个轻量级的规则解析器,性能好但功能受限。我猜测 UNIHH-IOT 会选择后者,用 JSON 或 YAML 定义规则,内部实现一个简单的条件匹配和动作执行引擎。

规则触发后的动作通常包括:写入数据库、发送告警通知、调用外部接口、转发到其他消息队列。这里要注意动作执行的异步化,如果规则动作是同步执行,一条慢查询就可能阻塞整个消息处理链路。常见的做法是把动作封装成任务,丢到线程池或者另一个消息队列里异步执行。

2.3 数据存储:时序数据与关系数据的分离

工业物联网的数据分两类:一类是时序数据,比如温度、压力、转速这些按时间采集的指标,特点是写入量大、查询模式固定(按时间范围查某个设备的某个指标);另一类是关系数据,比如设备档案、用户信息、告警记录,特点是数据量小但关系复杂。

UNIHH-IOT 作为轻量级平台,在存储选型上大概率会采用混合存储方案。时序数据用专门的时序数据库,比如 TDengine、InfluxDB 或者 TimescaleDB,它们对时间范围查询和聚合计算有专门优化,压缩率也高。关系数据用传统的关系型数据库,比如 MySQL 或 PostgreSQL,保证事务和关联查询能力。

如果追求极致轻量,也可能用时序数据库同时存关系数据,或者用嵌入式数据库如 SQLite 存配置类数据。但不管怎么选,数据保留策略是必须考虑的。工业数据量增长很快,如果不做清理,磁盘很快就会被写满。常见的策略是按时间分区,比如只保留最近3个月的原始数据,更早的数据降采样后归档。

数据类型推荐存储典型查询模式注意事项
设备时序指标TDengine/InfluxDB按设备+时间范围聚合注意标签设计,避免高基数
设备档案MySQL/PostgreSQL按设备ID精确查询做好索引,设备ID唯一
告警记录MySQL/PostgreSQL按时间+状态筛选定期归档历史告警
规则配置关系库或配置文件全量加载变更后需热更新

2.4 前端展示:实时性与易用性的平衡

工业物联网平台的前端和普通管理后台不太一样,它有两个特殊需求:实时数据展示和工业场景适配。实时数据展示通常用 WebSocket 或者 SSE 来实现,页面上的仪表盘、曲线图要能随着设备上报实时刷新。工业场景适配则意味着界面要能在车间的大屏、平板甚至手机上正常使用,字体要大、对比度要高、操作要简单。

UNIHH-IOT 的前端我推测会采用主流前端框架+图表库的组合,比如 Vue 或 React 搭配 ECharts。实时数据通过 WebSocket 推送到前端,前端维护一个本地数据缓存,图表组件从缓存中读取数据并渲染。这里的关键是渲染性能,如果每秒推送几百条数据,直接全量重绘图表会卡死,需要用增量更新或者数据抽稀的策略。

另一个容易被忽视的点是离线提示。工业现场网络不稳定,前端要能感知 WebSocket 断开,并给出明确的离线提示,而不是让用户看着一个不再更新的页面干等。恢复连接后,还要能自动重新订阅数据,保证展示的连续性。

3. 从零搭建 UNIHH-IOT 的实操过程与核心环节

理论讲多了容易飘,这一章我们落到实操层面。假设你现在拿到 UNIHH-IOT 的源码,要在一台工控机上把它跑起来,并接入一个模拟设备,完整的流程是什么样的。我会把每一步的操作意图、参数选择依据和可能遇到的问题都讲清楚,让你能照着做一遍。

3.1 环境准备与依赖安装

第一步是确认硬件和系统环境。轻量级平台对资源要求不高,我建议的最低配置是4核CPU、8GB内存、128GB SSD,操作系统用 Ubuntu 20.04 或 22.04 LTS,这两个版本社区支持好,遇到问题容易搜到答案。如果是在 Windows 上做开发验证,用 WSL2 也可以,但生产环境还是建议 Linux。

依赖安装分几块。运行时环境方面,后端如果是 Java 技术栈,需要 JDK 11 或 17;如果是 Go 或 Node.js,对应安装即可。数据库方面,时序数据库和关系数据库都要装,建议用 Docker 来跑,省去配置的麻烦。消息队列如果平台依赖的话,RabbitMQ 或 EMQX 都是常见选择,EMQX 对 MQTT 协议支持更好,如果设备接入以 MQTT 为主,优先选它。

# 以 Ubuntu 为例,安装 Docker 和 Docker Compose sudo apt update sudo apt install -y docker.io docker-compose sudo systemctl enable docker sudo systemctl start docker # 拉取并启动时序数据库(以 TDengine 为例) docker run -d --name tdengine \ -p 6030:6030 -p 6041:6041 \ -v /data/tdengine:/var/lib/taos \ tdengine/tdengine:latest

提示:Docker 数据卷一定要挂载到宿主机目录,否则容器删除后数据就丢了。工业场景的数据虽然可以重新采集,但历史告警和配置数据丢了会很麻烦。

3.2 平台配置与启动

源码拉下来之后,先别急着启动,花十分钟把配置文件过一遍。通常会有几个关键配置项:数据库连接信息、消息队列地址、服务端口、日志级别。数据库连接信息要和你实际部署的地址端口一致,消息队列如果没启用可以暂时注释掉相关配置。

启动顺序也有讲究。一般是先启动数据库和消息队列,再启动后端服务,最后启动前端。后端启动时会去连接数据库和消息队列,如果它们没准备好,后端会报错退出。前端启动后会去请求后端接口,后端没起来的话页面会显示空白或者报错。

# 后端启动示例(假设是 Spring Boot 项目) cd unihh-iot-backend ./mvnw spring-boot:run # 前端启动示例(假设是 Vue 项目) cd unihh-iot-frontend npm install npm run dev

启动之后,打开浏览器访问前端地址,默认通常是http://localhost:8080或http://localhost:3000。用默认管理员账号登录,如果登录不了,去数据库里查一下用户表,看看初始账号有没有正确初始化。

3.3 模拟设备接入与数据验证

平台跑起来之后,最重要的一步是验证设备接入链路是否通畅。如果没有真实设备,可以用脚本模拟一个 MQTT 设备上报数据。下面是一个 Python 示例,模拟一个温度传感器每5秒上报一次数据。

import paho.mqtt.client as mqtt import json import time import random broker = "localhost" port = 1883 topic = "device/thermostat-001/data" client = mqtt.Client(client_id="thermostat-001") client.connect(broker, port, 60) while True: payload = { "deviceId": "thermostat-001", "timestamp": int(time.time() * 1000), "metrics": { "temperature": round(random.uniform(20.0, 35.0), 2), "humidity": round(random.uniform(40.0, 70.0), 2) } } client.publish(topic, json.dumps(payload)) print(f"Published: {payload}") time.sleep(5)

运行这个脚本后,去平台的前端页面查看设备列表,应该能看到thermostat-001这个设备上线了,并且有实时的温度和湿度数据在刷新。如果看不到,按这个顺序排查:设备是否成功连接消息队列 -> 平台是否订阅了正确的主题 -> 数据解析是否报错 -> 数据是否写入了数据库。每一步都可以通过查看日志来确认。

3.4 规则配置与告警测试

数据能正常上报之后,配置一条告警规则来验证规则引擎。比如设置“温度超过30度时触发告警”。规则配置通常包括触发条件、持续时间、告警级别、通知方式几个部分。触发条件就是表达式,持续时间用来避免抖动误报,比如温度超过30度持续10秒才告警。

配置完成后,把模拟脚本里的温度范围调高,让它稳定在32度左右,等十几秒,看平台是否产生了告警记录。如果告警没触发,检查规则是否启用、表达式是否正确、规则引擎是否正常加载了配置。这一步跑通,整个平台的核心链路就算验证完了。

验证环节预期结果常见问题排查方向
设备连接设备列表显示在线设备离线检查MQTT地址、客户端ID冲突
数据上报实时曲线有数据无数据检查主题订阅、解析日志
数据存储历史查询有记录查询为空检查数据库连接、表结构
规则触发告警列表有记录无告警检查规则状态、表达式语法

4. 常见问题排查与独家避坑经验实录

任何平台在实际使用中都会遇到各种各样的问题,有些是配置错误,有些是设计缺陷,有些是环境差异。这一章我整理了几个工业物联网平台最常见的坑,以及对应的排查思路和解决方法。这些经验很多是文档里不会写的,只有真正踩过才知道。

4.1 设备频繁掉线重连怎么破

设备频繁掉线是工业现场最常见的问题之一。表现是设备在平台上一会儿在线一会儿离线,数据上报断断续续。排查这个问题,先分清楚是网络问题还是平台问题。网络问题通常是现场WiFi信号弱、网线接触不良、交换机端口故障,这些需要现场排查。平台问题则可能是心跳超时设置太短、连接数达到上限、消息队列负载过高。

我遇到过一个典型案例:某产线设备每隔几分钟就掉线一次,查了半天发现是 MQTT 的keepalive设置成了 10 秒,而现场网络延迟偶尔超过 10 秒,导致服务端认为设备离线。把keepalive调到 60 秒后问题消失。所以心跳时间要根据现场网络质量来定,不能照搬默认值。另外,如果设备数量多,要检查消息队列的最大连接数配置,EMQX 默认是 100 万,一般够用,但如果是自己搭建的 MQTT Broker,可能默认只有几千。

注意:设备重连时如果使用相同的 Client ID,会导致前一个连接被踢掉,出现“自己踢自己”的情况。确保每个设备有唯一的 Client ID,或者在重连时使用随机后缀。

4.2 时序数据写入性能瓶颈的优化

当时序数据量上来之后,写入性能会成为瓶颈。表现是数据延迟越来越大,前端看到的曲线滞后于实际时间。优化方向有几个:批量写入代替单条写入,调整数据库的写入参数,增加缓存层。

批量写入是最有效的优化手段。TDengine 和 InfluxDB 都支持批量插入,一次写入几百条记录比一条一条写快几十倍。可以在消息处理层做一个缓冲,积累到一定数量或者等待一定时间后批量落库。但要注意批量大小和延迟的平衡,批量太大延迟高,批量太小效果不明显,一般 500 到 1000 条一批比较合适。

数据库参数方面,TDengine 可以调整vgroups和buffer参数,InfluxDB 可以调整cache-max-memory-size和batch-size。这些参数需要根据实际数据量和硬件配置来调,没有万能值。我的经验是先压测再调参,用模拟数据跑一遍,观察写入吞吐和延迟,然后逐步调整参数直到满足要求。

4.3 前端实时刷新卡顿的处理

前端实时刷新卡顿通常发生在设备数量多、数据频率高的场景。页面上的图表如果每秒接收几百个数据点,浏览器渲染压力会很大。解决方法有几个层次:数据抽稀、增量渲染、Web Worker。

数据抽稀是最简单的,比如原始数据每秒10个点,前端只展示每秒1个点,中间的点做聚合或者丢弃。增量渲染是指图表库只更新变化的部分,而不是整个重绘。ECharts 支持appendData模式,适合这种场景。Web Worker 是把数据处理逻辑放到后台线程,避免阻塞 UI 线程,适合计算密集型的场景。

我个人的经验是,先做数据抽稀,再做增量渲染,最后才考虑 Web Worker。因为前两个改动小、见效快,Web Worker 会引入额外的复杂度,不到万不得已不用。

4.4 规则引擎误报和漏报的调优

规则引擎的误报和漏报是让人很头疼的问题。误报是指条件没满足却触发了告警,漏报是指条件满足了却没触发。误报通常是因为数据抖动,比如温度在阈值附近波动,一瞬间超过就告警了。解决方法是在规则里加持续时间条件,比如“温度超过80度持续30秒”才告警。

漏报的原因更复杂,可能是规则没加载、数据没到达规则引擎、表达式写错了。排查漏报,先确认规则是否启用,再看规则引擎的日志有没有处理这条数据,最后检查表达式逻辑。我见过一个漏报案例,规则写的是temperature > 80,但实际数据里的字段名是temp,表达式永远为 false,自然不告警。所以字段名一定要和设备上报的保持一致,最好在规则配置界面提供字段选择功能,避免手写出错。

问题现象可能原因快速排查方法长期解决方案
设备频繁离线心跳太短/网络差查看Broker日志调整keepalive,优化网络
数据写入慢单条写入/参数未调优查看数据库写入延迟批量写入,调整参数
前端卡顿数据量太大打开浏览器性能面板抽稀+增量渲染
规则误报数据抖动查看告警前后数据增加持续时间条件
规则漏报字段名错误/规则未加载检查规则日志字段选择器,规则热加载

4.5 平台安全加固的实操建议

工业物联网平台的安全问题往往被忽视,但一旦出事就是大事。基础的安全加固包括:修改默认密码、限制访问IP、启用TLS加密、定期备份数据。这些看起来简单,但很多团队部署完就直接用默认配置跑,风险很大。

修改默认密码是第一要务,包括数据库密码、消息队列密码、平台管理员密码。限制访问IP是指只允许特定网段访问平台的管理端口,比如只允许办公网访问,生产网只能访问设备接入端口。TLS加密是给 MQTT 和 HTTPS 加上证书,防止数据在传输过程中被窃听。定期备份不用多说,但要注意备份要验证可恢复,不然备份了也白备份。

提示:工业现场经常有多个网段,配置防火墙规则时要理清楚哪些设备需要访问哪些端口。建议画一张网络拓扑图,标注清楚每个组件的访问关系,避免配错规则导致设备连不上。

5. 平台扩展与二次开发的实际路径

UNIHH-IOT 作为一个开源底座,最大的价值在于可以按需扩展。这一章讲讲常见的扩展方向和实践方法,帮助你把平台改造成真正贴合自己业务的样子。

5.1 新增设备协议的适配方法

新增一个设备协议,核心工作是写一个适配器。适配器需要实现平台定义的接口,通常包括connect、disconnect、parse、encode几个方法。connect负责建立连接,disconnect负责释放资源,parse负责把原始报文解析成平台标准消息,encode负责把平台指令编码成设备能识别的报文。

写适配器之前,先研究现有适配器的代码结构,照着葫芦画瓢。重点看消息标准结构的定义,确保解析出来的数据字段和平台期望的一致。如果协议比较复杂,比如 OPC UA,可能需要引入第三方库来简化开发。适配器写完后,用模拟设备或者协议测试工具验证一遍,确保连接、解析、指令下发都正常。

5.2 自定义数据看板的开发流程

平台自带的看板通常比较通用,实际项目里往往需要定制。自定义看板的开发流程大致是:确定数据源 -> 设计图表布局 -> 实现前端组件 -> 联调测试。数据源就是你要展示哪些设备的哪些指标,可以通过平台的 API 获取。图表布局根据业务需求来设计,比如产线监控大屏、设备健康度看板、能耗分析报表。

前端组件开发可以用平台现有的图表库,也可以引入新的库。关键是数据接口要统一,建议平台提供一套标准的数据查询 API,前端组件通过 API 获取数据,而不是直接查数据库。这样前端和后端解耦,后续换数据库或者调整表结构不影响前端。

5.3 与外部系统的集成方式

工业物联网平台很少孤立运行,通常需要和 MES、ERP、SCADA 等系统集成。集成方式主要有三种:API 对接、消息队列订阅、数据库直连。API 对接最规范,但需要双方约定接口格式;消息队列订阅适合实时性要求高的场景,平台把数据推到队列,外部系统订阅;数据库直连最简单但耦合度最高,不推荐在生产环境使用。

我建议优先用 API 对接,平台提供 RESTful 接口,外部系统按需调用。如果实时性要求高,再考虑消息队列。数据库直连只适合临时方案或者内部工具,正式系统不要用。

5.4 性能扩展的几种可行方案

当设备数量和数据量增长到单机扛不住的时候,就需要考虑性能扩展。轻量级平台的扩展路径通常是:垂直扩展 -> 读写分离 -> 水平分片。垂直扩展就是升级硬件,加CPU、加内存、换SSD,这是最简单但成本最高的方式。读写分离是把读操作和写操作分到不同的数据库实例,适合读多写少的场景。水平分片是把数据按设备ID或者时间范围分散到多个数据库实例,适合数据量特别大的场景。

扩展之前先做性能瓶颈分析,确定是CPU瓶颈、内存瓶颈还是IO瓶颈。不同瓶颈的扩展策略不一样。CPU瓶颈可以考虑优化代码或者加机器,内存瓶颈要检查是否有内存泄漏或者缓存配置不合理,IO瓶颈通常换SSD或者做数据分片。

6. 个人实操体会与后续演进思路

这个平台我从头到尾跑了一遍,也试着改了一些代码,整体感受是完成度不错,但离生产级还有距离。设备接入和消息流转的核心链路是通的,规则引擎的基本功能也有,但一些细节还需要打磨,比如错误处理不够完善、日志不够详细、前端交互还有优化空间。

不过话说回来,开源项目能做到这个程度已经很难得了。它的价值不在于开箱即用,而在于提供了一个可理解、可修改、可扩展的底座。你可以基于它快速搭建一个原型,验证业务逻辑,然后再根据实际需求逐步完善。这种渐进式的建设方式,比一开始就上重型平台要务实得多。

后续如果要继续演进,我觉得有几个方向值得考虑。一是增加更多协议适配器,特别是 OPC UA 和 Modbus TCP,这两个在工业现场覆盖率很高。二是完善规则引擎,支持更复杂的表达式和更丰富的动作类型。三是加强可观测性,增加指标监控和链路追踪,方便排查问题。四是优化前端体验,特别是大屏展示和移动端适配。

最后分享一个小技巧:部署的时候,把日志级别调到 DEBUG 跑一遍完整流程,把关键路径的日志都看一遍,这样你对平台的数据流转会有更直观的理解,后续出问题也知道去哪里找线索。等稳定运行后,再把日志级别调回 INFO,避免日志文件增长过快。这个习惯帮我省了很多排查时间,希望对你有用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询