相对于rsyslog,内核环形缓冲区位于何处?


9

是否rsyslog只是在内核环缓冲区之上的抽象层?还是内核环缓冲区是它自己的实体,并且其rsyslog交互就像其他任何“应用程序”一样?

logs  syslog  dmesg 

Answers:


6

尽管各种文档(包括man dmesg)都将其称为“内核环形缓冲区”,但最好将其称为内核日志缓冲区,因为“环形缓冲区”是一个通用术语,我相信内核也使用ring各种完全不相关的事物的缓冲区。在用于写入它的内核空间函数之后,“ printk缓冲区”也是合适的。

无论如何,它驻留在内核空间中,通过提供读接口,通过提供/proc/kmsg读写接口/dev/kmsg。因此,如果您是root用户,请执行以下操作:

echo "Hello Kernel!" > /dev/ksmg

如果这样的话,您会看到的cat /dev/ksmg(但是,您可能不会在任何日志中看到它的出现,但是,出于可能的原因,请参阅下面的Matthew Phipps的评论)。这是原始输出,与您dmesg在日志文件中或日志文件中看到的内容完全不一样。有一个小文件的位这个提供的内核源代码。如果(r)syslog正在运行,建议从/proc/kmsg(不同于/dev/ksmg)进行读取。

Rsyslog是Linux上常用的许多syslog实现之一。这些是userland应用程序,它们/proc/ksmg通过套接字从其他userland进程获取内核消息和来自其他userland进程的消息/dev/log


2
我要指出,rsyslog默认情况下关闭$ KLogPermitNonKernelFacility,这就是为什么除非您打开该选项,否则rsyslog将忽略/ proc / kmsg的非内核消息。实际上,这确实会造成混乱,因为例如Upstart使用非内核功能登录到/ proc / kmsg。
Vanessa Phipps 2014年
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.