我有许多带有 Ubuntu armhf 的 Pandaboard 和一台通过 Wi-Fi 联网的 PC 服务器。在每个嵌入式板上,我都有一个不断运行的实时应用程序。
我不知道如何合理维护日志,因为我需要监控很多东西:
- 系统故障(文件系统、过热和其他)
- 设备驱动程序故障(wi-fi 和 USB)
- 应用程序关闭(崩溃和预期的崩溃)
到目前为止我的想法:
- 通过过滤系统日志查找相关系统故障,例如严重级别0-3。这个怎么做?
- 设备驱动程序问题也应该从系统日志中找到。
- 目前我正在将 cout 和 cerr 记录到单独的文件中。如果应用程序崩溃,这没有帮助。我猜想在调试模式下运行需要太多的处理能力,并且系统将不再是实时的。
- 我宁愿在每次计算机启动时都使用一个系统日志,或者直到日志太大为止,而不是每天轮换日志。另外,我更愿意在每次应用程序启动时轮换应用程序日志。
- 所有严重问题都可以通过管道传输到一个可以从服务器轻松读取的文件中。
欢迎任何有效维护错误日志记录的想法。目前,我正在使用 Fabric python 库在服务器 PC 和 Pandaboard 之间传输诊断信息和更新。
答案1
系统记录器被称为syslog
,尽管您的 Ubuntu 可能会也可能不会使用名为 的更复杂的变体rsyslog
。最简单的判断方法是通过ls /etc | grep syslog
.它们都有自己的主配置文件,可能还有一个.d
从中获取进一步配置的目录。您可以从应用程序中向系统记录器提供信息(例如,请参阅man logger
和man 3 syslog
),不过除非您想要大量令人尴尬的混乱,否则最好保留这种方法来处理重大错误。
有很多介绍和系统日志教程在线的。 Rsyslog 旨在与 syslog 兼容,并且可以通过以下方式获取其他文档他们的网站。默认配置通常将消息过滤到/var/log
基于以下内容的各种文件中:设施和严重程度。可能还有一个文件收集所有所有消息的副本(例如/var/log/syslog
),并且也可能存在其他形式的重叠。 Rsyslog 提供了根据内容过滤消息的进一步功能(例如,您可以与通常为特定应用程序附加的标签进行匹配)。
WRT 到日志轮换,相关应用程序是logrotate
(请参阅 参考资料man logrotate
),它通常由以下程序运行cron
——它不是守护程序。控制频率等,应该通过其配置(通常/etc/logrotate.conf
来自 中的其他文件/etc/logrotate.d
)和 cron 来完成。请注意,它logrotate
不使用默认的配置文件,因此您可能想看看它是如何在相关的 crontab 中调用的。