Moonfire NVR 监控系统故障排查指南
概述
Moonfire NVR 是一款开源的网络视频录像系统,用于管理和存储IP摄像头的监控视频。本文将详细介绍如何排查Moonfire NVR运行中的常见问题,包括日志查看方法、各类错误分析以及解决方案。
日志查看方法
Moonfire NVR运行时会将日志输出到标准错误(stderr),查看方式取决于运行环境:
配置界面运行时
建议将stderr重定向到文本文件:
moonfire-nvr config 2>debug-log
日志将保存在debug-log文件中。
通过systemd运行时
日志会被重定向到journal,使用以下命令查看:
sudo journalctl --unit moonfire-nvr
建议设置MOONFIRE_FORMAT=systemd环境变量以获得更好的日志格式。
日志格式解析
Moonfire NVR的日志格式包含以下关键信息:
- 时间戳(本地时区)
- 日志级别(TRACE/DEBUG/INFO/WARN/ERROR)
- 线程名称
- 上下文信息(spans)
- 目标模块
- 日志消息
- 事件字段
典型日志示例:
2023-02-15T22:45:06.999329 INFO s-courtyard-sub streamer{stream="courtyard-sub"}: moonfire_nvr::streamer: opening input url=rtsp://192.168.5.112/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif
关键线程说明
Moonfire NVR使用多线程架构,主要线程类型包括:
main:主线程,负责初始化和协调s-CAMERA-TYPE:视频流处理线程(每个摄像头一个)sync-DIR_ID:数据同步线程(每个存储目录一个)r-DIR_ID:视频读取线程(每个存储目录一个)tokio-runtime-worker:HTTP请求和RTSP流处理线程
常见日志分析
数据刷新日志
系统定期将数据刷新到SQLite数据库时会记录详细信息,包括:
- 刷新原因
- 新增/删除的录像文件
- 各存储目录的空间变化
示例:
2021-03-08T23:14:18.388000 sync-2 syncer{path=/media/14tb/sample}:flush{...}: moonfire_db::db: flush complete:
/media/6tb/sample: added 98M 864K 842B in 8 recordings...
严重错误(Panic)
表明系统遇到无法恢复的错误,需要重启服务。建议设置RUST_BACKTRACE=1获取详细堆栈信息。
操作延迟警告
当操作耗时超过1秒时会记录警告,频繁出现可能表明性能问题。
摄像头流错误
摄像头连接中断时会记录错误并尝试重连,常见原因包括:
- 摄像头重启
- 网络问题
- 系统处理速度不足
常见问题解决方案
Docker环境问题
配置文件目录错误
错误信息:"/etc/moonfire-nvr.toml" is a directory 解决方案:删除错误创建的目录,创建正确的配置文件。
用户权限问题
错误信息:unable to find user UID: no matching entries in passwd file 解决方案:确保在Docker compose中正确配置用户UID和GID。
时间获取失败
错误信息:clock_gettime(CLOCK_MONOTONIC) failed: EPERM 解决方案:在Docker compose中取消seccomp: unconfined的注释。
临时文件问题
错误信息:VFS is unable to determine a suitable directory for temporary files 解决方案:在Docker compose中将/var/tmp挂载到容器中。
服务器错误
时区配置错误
错误信息:unable to get IANA time zone name 解决方案:检查系统时区配置(/etc/localtime和$TZ环境变量)。
视频帧问题
错误信息:pts not monotonically increasing 可能原因:摄像头输出包含B帧,建议在摄像头设置中禁用B帧。
磁盘空间不足
错误信息:No space left on device 解决方案:
- 清理其他占用空间的文件
- 或重新配置Moonfire NVR使用更少空间
数据库/文件系统损坏
排查步骤:
- 检查内核日志
- 使用
smartctl检查磁盘健康状态 - 运行
fsck检查文件系统 - 停止服务后运行
moonfire-nvr check检查完整性
时间戳错误
原因:系统时间被调整后,正在进行的录像仍使用旧时间戳。 解决方案:确保系统时钟准确,特别是无RTC的设备(如树莓派)应考虑使用NTP服务。
内核日志问题
UAS错误
可能与USB存储设备兼容性有关,建议尝试禁用UAS模式。
文件系统错误
表明存储设备可能存在问题,建议检查磁盘健康状况并考虑更换。
总结
本文详细介绍了Moonfire NVR的日志系统、常见错误及其解决方案。通过合理配置和定期监控,可以确保监控系统稳定运行。遇到无法解决的问题时,建议收集完整的日志信息寻求进一步帮助。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



