banner
NEWS LETTER

嵌入式 Linux 系列 16:日志、观测和现场问题包

Scroll down

现场问题最怕“设备有问题,但没有日志”。嵌入式设备的观测能力不需要一开始就复杂,但至少要能回答:设备是什么版本、发生过什么、当前状态如何、配置是什么、网络是否正常。

一、日志分层

建议分几类:

1
2
3
4
5
6
system log
app log
boot log
ota log
factory log
crash log

常见目录:

1
/data/log

不要把长期日志写到 tmpfs,也不要无限写入 Flash。

二、日志格式

最小字段:

1
time level module message

更推荐:

1
time level module request_id event result error_code message

示例:

1
2026-06-26 21:53:33 INFO mqtt request_id=abc cmd=set_timezone result=ok

现场排查时,request_id 可以把 MQTT 命令、业务执行和 ack 串起来。

三、日志轮转

基础策略:

1
2
3
app.log
app.log.1
app.log.2

控制:

  • 单文件大小。
  • 最大文件数量。
  • 关键错误单独保存。
  • debug 日志可动态打开。

不要让日志占满 /data,否则配置、OTA 状态都可能写不进去。

四、状态快照

可以提供脚本:

1
/usr/bin/collect_support_bundle

采集:

1
2
3
4
5
6
7
8
9
10
date
uname -a
cat /etc/firmware_version
mount
df -h
ip addr
ip route
dmesg
ps
cat /data/config/device.json

打包:

1
tar czf /tmp/support_bundle.tar.gz /data/log /tmp/system_snapshot.txt

这样现场人员可以一键导出问题包。

五、崩溃信息

如果空间允许,启用 core dump:

1
ulimit -c unlimited

也可以在应用崩溃时记录:

  • 信号。
  • 退出码。
  • 版本。
  • 最近配置。
  • 最近关键日志。

不一定所有设备都适合保存 core,但至少要保存崩溃摘要。

六、观测能力验收

一台异常设备拿回来后,应该能回答:

  • 固件版本是什么。
  • 最近有没有重启。
  • MQTT 是否连接过。
  • 是否发生过 OTA。
  • 当前配置是什么。
  • 存储是否满了。
  • 内核有没有错误日志。

能回答这些问题,排查效率会高很多。

其他文章
目录导航 置顶
  1. 1. 一、日志分层
  2. 2. 二、日志格式
  3. 3. 三、日志轮转
  4. 4. 四、状态快照
  5. 5. 五、崩溃信息
  6. 6. 六、观测能力验收
请输入关键词进行搜索