问题背景: 一个线上系统,需要将系统运行的日志打印到本地磁盘中(没有将日志上传到某个日志系统的技术),日志包括诊断日志( INFO,WARN,ERROR )和访问日志( accesslog )。我们希望日志的输出既能方便问题的分析,也不能影响系统的长期稳定运行,系统在正常运作的过程中,尽可能“免维护”。
我们假定日志输出的内容是规范的,我们已经实现输出“不多不少”的日志(即不会输出没用的日志,我们这里不讨论应该输出怎样的日志内容)。
由于日志只能打印到本地磁盘,本地磁盘空间是有限的,因此我们需要用日志轮替的方式来控制历史日志的数量。
按日期轮替: 按日期轮替即把日志按天分割,保留一周或两周的日志。 优点:采用该轮替方案,可以很方便问题的分析和查找(例如客户说某天系统出问题了,可以根据日期查找),而且对于日志的保留可以更符合业务要求(如业务要求保留过去两周的操作记录)。 缺点:采用该轮替方案,万一日志量过大,或者磁盘过小,或者由于某种程序错误导致大量的 ERROR 日志产生,容易造成日志文件过大,消耗完了磁盘空间,最终导致系统不可用。
按大小轮替: 按大小轮替即把日志按照固定大小分割,例如限定一个日志文件最大为 100M,当日志写满 100M 时,会分割出一个文件。可以控制保留日志文件的数量来控制日志量。 优点:采用该轮替方案,控制很好控制系统消耗的磁盘大小,例如我们设定日志文件最大 100M,保留 10 个文件时,我们可以预知系统最多占用 1G 的磁盘空间。 缺点:采用该轮替方案,对问题分析不友好,需要逐个文件打开分析。对业务不友好,日志量多时,可能几天前的日志就被冲掉了。
这里希望跟大家讨论一下,如何采取正确的策略,考虑哪些因素,可以分类讨论。 第一次发表,请多多包涵,多谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.