嵌入式日志系统可观测性实战手册

📚 共计 30 章节
01
日志系统概述
为什么嵌入式系统需要可观测性?日志的三大支柱(指标、追踪、日志)及核心价值。
可观测性三大支柱
02
日志级别设计
TRACE、DEBUG、INFO、WARN、ERROR、FATAL 的定义与使用场景,如何避免日志泛滥。
级别泛滥控制
03
日志格式规范
结构化日志 vs 非结构化日志,推荐的时间戳、模块名、线程ID等字段设计。
结构化字段设计
04
日志存储策略
环形缓冲区、SD卡存储、远程日志上传,不同场景下的取舍与实现。
环形缓冲SD卡远程
05
日志输出接口
UART、SPI、I2C、USB、以太网,如何根据硬件资源选择输出通道。
UARTSPI以太网
06
日志缓冲机制
双缓冲、循环队列、DMA传输,如何在高频日志下避免丢数据。
双缓冲DMA循环队列
07
日志压缩与加密
LZSS、LZ4压缩算法,AES加密在资源受限MCU上的实现。
LZ4AESMCU
08
日志过滤与分级
运行时动态调整日志级别,基于模块或关键字的过滤机制。
动态过滤模块
09
日志时间戳
RTC硬件时间戳、系统滴答计数、NTP同步,如何保证时间精度。
RTCNTP滴答
10
日志上下文管理
任务ID、函数调用栈、状态机状态,如何自动注入上下文信息。
上下文任务ID
11
日志系统初始化
启动日志、配置加载、硬件初始化,如何保证早期日志不丢失。
启动早期日志
12
日志性能分析
每行日志的CPU开销、内存开销,如何用profiling工具量化。
CPU开销profiling
13
日志与RTOS集成
FreeRTOS、RT-Thread、uC/OS下的日志任务设计,优先级与死锁避免。
FreeRTOS死锁
14
日志可视化工具
串口助手、Python脚本、Grafana、Kibana,如何搭建本地日志看板。
GrafanaKibana
15
日志远程采集
MQTT、HTTP、WebSocket协议,如何实现设备日志上云。
MQTTHTTP上云
16
日志存储管理
日志文件轮转、老化删除、容量预警,避免存储写爆。
轮转老化预警
17
日志断言与故障注入
assert宏、panic处理,如何通过日志快速定位HardFault。
assertHardFault
18
日志与调试接口
JTAG/SWD的ITM、ETM跟踪,硬件调试器如何辅助日志分析。
JTAGITMETM
19
日志安全与隐私
敏感信息脱敏、日志访问控制,防止日志泄露系统密钥。
脱敏访问控制
20
日志自动化测试
单元测试日志模块、压力测试日志吞吐量,如何用CI/CD验证。
单元测试CI/CD
21
日志与状态机
状态迁移日志、事件驱动日志,如何用日志还原系统行为。
状态机事件驱动
22
日志与内存分析
堆栈使用日志、内存泄漏检测,如何通过日志定位内存问题。
内存泄漏堆栈
23
日志与功耗优化
日志对休眠唤醒的影响,低功耗场景下的日志策略。
低功耗休眠
24
日志与多核系统
AMP/SMP架构下的日志同步,跨核日志的时间戳对齐。
AMPSMP时间戳对齐
25
日志与OTA升级
升级过程日志、版本回滚日志,如何保证升级可追溯。
OTA回滚
26
日志与故障恢复
看门狗日志、复位原因记录,如何用日志分析系统重启。
看门狗复位
27
日志与性能基准
启动时间、任务响应时间、中断延迟,如何用日志做性能基线。
性能基线中断延迟
28
日志与协议分析
CAN、Modbus、I2C总线日志,如何解析协议数据包。
CANModbusI2C
29
日志与AI诊断
异常检测、模式识别,如何用机器学习分析日志。
AI异常检测
30
实战案例
从零搭建一个完整的嵌入式日志系统,涵盖设计、编码、测试、部署全流程。
全流程实战