了解Linux上的常规日志记录/ logrotation?


13

假设,除了Apache Web服务器日志外,我在任何操作系统上都从未接触过任何种类的(专业)日志。因此,尽管我了解一些基本知识,但记录日志是一个相当新的话题。目前,充分了解该主题的投入似乎是巨大的,但我什至还不知道,是否值得了解更多最抽象的概念。

您会建议在这种情况下的某人应该使用哪些资源(教程,手册页,书籍)来学习日志记录?

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

普通* nix用户和软件开发人员应如何了解这些日志?

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


您是否介意(或您)将标题编辑为“在linux上”而不是“在ubuntu上”,因为这些本质上是相同的问题(请参阅我的答案)?这样,我们不太可能直到结束封闭重复的“学习上拱日志”,“在CentOS学习记录”等问题
金发姑娘

我不介意这种变化,只要答案是好的:)
erikbwork

Answers:


18

[这是在系统化系统上广泛采用日记系统之前写的,并且没有涉及它。目前(晚2018) journald和(R)系统日志,如下所述,是在发行版比如Debian使用。在其他情况下,如果要与rsyslog一起使用,则可能必须安装rsyslog,但是与journald的集成非常简单。

我不会特别讨论关于ubuntu的日志记录,因为该主题通常是针对linux的标准化的(而且我相信我要说的大多数内容或所有内容对于任何风味* nix都是正确的,但实际上不是相信我)。除了回答这个问题,我也不会对“如何阅读日志”说太多:

是为人类可读性而编写的假设还是正确的,还是通常由其他工具进行评估和使用?

我想这取决于应用程序,但是总的来说,至少对于syslog中的内容(请参阅下文),它们应该是人类可读的。“对我有意义”是另一个问题,哈哈。但是,它们的结构也可以简化为特定目的而使用标准工具(grep,awk等)进行解析的方式。

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

系统日志

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

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特定的,如果您安装了该可选doc软件包,则可以在中找到有关它们的指南rsyslog_conf_global.html

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

日志旋转

旋转原木的标准方法是通过称为的工具logrotate(有man logrotate)。使用logrotate的规范方法是通过cron守护进程进行的,尽管不必那样做(例如,如果您倾向于每天关闭桌面,则最好在启动syslog之前在启动时执行一次,但是,显然,在挂载文件系统后rw)。

有一个很好的介绍logrotate的位置。请注意,logrotate不仅用于syslog,还可以与任何文件一起使用。基本配置文件是/etc/logrotate.conf,但是由于配置具有“ include”指令,因此通常大多数东西都放入目录中的单个文件中/etc/logrotate.d(这里d是目录而不是守护程序; logrotate不是守护程序)。

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


2
如果您也提到syslog-ng,您将在linux-logging上写下所有要说的内容。极好的答案。
Nils

我学到了很多东西,还有更多的阅读资源。谢谢!顺便说一句。为什么使用Apache的系统日志记录会很糟糕?我应该阅读哪些日志?
erikbwork

@ erikb85 1)主要是因为apache产生了大量输出。我不必长时间配置apache,因此我不记得将WRT发送特定内容到syslog的灵活性(但我想非常灵活)2)您想阅读的WRT日志,请看一下按照你的逻辑/etc/rsyslog.conf。例如:通常会加入高于特定优先级的内容/var/log/messages,而低于此优先级的内容则会进入/var/log/notice。我也希望有一个包含所有内容的日志,该日志包含双重和三重重叠部分,但是如果您将它们旋转,则没什么大不了的。
goldilocks 2013年

只是为了确认一下,rsyslog是不是守护程序包装器logrotate,对吗?为什么这样 ?
2014年

@Thomas它们执行不同的目的,尽管(r)syslog可以实现轮换以免除logrotate的需要。但是,将它们分开意味着您可以对syslog文件以外的东西使用logrotate。
goldilocks
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.