系统日志

系统日志

假设,除了 Apache Web 服务器日志之外,我从未接触过任何操作系统上的任何类型(专业)日志。因此,虽然我了解一些基础知识,但日志记录总体来说是一个相当新的主题。目前,充分了解这个主题的投资似乎相当巨大,但我什至还不知道它是否值得了解比最抽象的概念更多的知识。

如果处于这种情况的人使用哪些资源(教程、手册页、书籍)来了解日志记录,您会建议他们使用哪些资源?

普通 Linux 用户应该每天/每月阅读哪些日志?它们是为了人类可读性而编写的假设是否正确,或者它们通常由其他工具评估和使用?

普通的 *nix 用户和软件开发人员应该了解这些日志的哪些内容?

如果您不希望管理具有大量事件负载的专业 Web 服务器,那么您需要了解有关日志轮换的哪些信息?

答案1

[本文是在 systemd 系统上广泛采用 Journald 之前几年编写的,并未涉及它。目前(2018年底)两个都下文所述的 journald 和 (r)syslog 用于 Debian 等发行版。在其他发行版上,如果要同时使用 rsyslog,则可能必须安装它,但与 journald 的集成非常简单。]

我不会专门讨论有关 ubuntu 的日志记录,因为该主题通常针对 linux 进行了标准化(并且我相信我所说的大部分或全部内容对于任何风格 *nix 来说通常也是正确的,但不要相信我的话)。除了回答这个问题之外,我也不会过多谈论“如何阅读日志”:

它们是为了人类可读性而编写的假设是否正确,或者它们通常由其他工具评估和使用?

我想这取决于应用程序,但总的来说,至少对于系统日志中的内容(见下文),它们应该是人类可读的。 “对我有意义”是另一个问题,哈哈。然而,它们的结构方式也可以使出于特定目的使用标准工具(grep、awk 等)解析它们变得更容易。

无论如何,首先,自己进行日志记录的应用程序和使用系统记录器的应用程序之间存在区别。 Apache 默认情况下是前者,尽管它可以配置为后者(我认为大多数人会认为这是不可取的)。自己进行日志记录的应用程序可以使用文件的任何位置以任何方式进行记录,因此对此没有太多可说的。系统记录器通常称为syslog

系统日志

“Syslog”确实是一个标准这是通过一个实现的守护进程一般称为系统日志(d 代表守护进程!)。目前 Linux(包括 ubuntu)上使用的主要 syslog 守护进程是rsyslogd. Rsyslogd 可以做很多事情,但在大多数发行版上开箱即用的配置它模拟传统的 syslog,它将内容分类到/var/log.您可能会在中找到它的文档/usr/share/doc/rsyslog-doc-[version](请注意,还有一个/usr/share/doc/rsyslog-[version],但这只是来自源包的通知,例如NEWSChangeLog)。如果存在,则它是 html,但 Stack Exchange 不允许嵌入本地文件链接:

file://usr/share/doc/rsyslog-doc/index.html

所以你可以尝试复制粘贴。如果不存在,则它可能是未安装的单独软件包的一部分。查询您的包装系统(例如,apt-cache search rsyslog | grep doc)。

配置位于/etc/rsyslog.conf,其中有一个手册页,man rsyslog.conf虽然手册页提供了很好的参考,但作为介绍可能不太容易理解。幸运的是,股票 rsyslog.conf 的基本原理与传统 syslog.conf 一致,对此有很多介绍和教程。 这个, 例如;在查看本地 rsyslog.conf 时,您想要从中得到的是对设施优先事项(“优先级”有时被称为日志级别),因为它们是上述 syslog 标准的一部分。该标准之所以重要,是因为 rsyslog 实际上是通过内核获取其内容的,而内核实现的就是该标准。

关于$rsyslog.conf 中的指令,这些指令是 rsyslog 特定的,如果您安装该可选文档包,您将在 中找到它们的指南rsyslog_conf_global.html

玩得开心...如果您对应用程序如何使用系统记录器感到好奇,请查看man loggerman 3 syslog

日志轮转

旋转日志的标准方法是通过一个名为logrotate(并且有一个man logrotate)的工具。使用 logrotate 的规范方法是通过cron 守护进程,尽管不必这样做(例如,如果您倾向于每天关闭桌面,那么您不妨在启动时执行一次在系统日志开始之前但是,显然,在文件系统挂载后(rw)。

logrotate 有一个很好的介绍这里。注意logrotate 不仅仅是用于 syslog 的东西,它可以与任何文件一起使用。基本配置文件是/etc/logrotate.conf,但由于配置有一个“include”指令,通常大多数内容都会进入/etc/logrotate.d目录中的各个文件(这里 d 代表目录,而不是守护进程;logrotate 不是守护进程)。

使用 logrotate 时需要考虑的一个重要事项是应用程序在其日志文件“旋转”时将如何反应 - 换句话说,搬家了-- 当应用程序运行时。 WRT (r)syslogd,它只会停止写入该日志(我认为这样做有安全理由)。处理这个问题的通常方法是告诉 syslog 重新启动(并重新打开其所有文件),这就是为什么您会postrotate在 logrotate conf 文件中看到一条指令,将 SIGHUP 发送到 syslog 守护进程。

相关内容