Netconsole 不工作

Netconsole 不工作

我在一台最近出现各种内核崩溃的服务器上设置了 netconsole,并尝试将内核消息记录到另一台服务器上。在主机服务器上设置好 netconsole 后,我通过启动 netcat 会话并输入一些随机数据位来测试它。这些数据毫无问题地到达了捕获服务器,我能够在我设置的日志文件中查看文本。

但是,dmesg 中记录的任何内容(即内核消息)都没有转发到捕获服务器。我的 printk 设置为 6 1 4 7(我也将其设置为 8 1 4 7),但什么都没有。我尝试使用 modprobe 启用/禁用模块,但没有将任何输出发送到捕获服务器。

任何有关这方面的建议都将不胜感激,因为目前我不确定还需要检查什么,因为一切显然都设置正确。

答案1

您说您已经通过在主机服务器上设置 netconsole 来测试它。您的意思是您在那里设置了一个监听 syslogd,并在客户端上使用 netcat 向它发送消息吗?如果是,那么您似乎并没有真正测试过 netconsole。

您是否已验证 netconsole 设置,且所有 mac 地址均正确?文档非常详细。加载了具有适当属性的模块后,您可以通过以 root 身份写入 /dev/kmsg 来测试它:

# echo my kernel message > /dev/kmsg

或者,使用 sysrq 触发 memdump 或崩溃。Netconsole 应该会获取这些信息并将其发送到您的目标。Tcpdump 非常有助于验证测试期间发送了哪种数据包。类似下面的命令可以帮助您入门(注意 -e,它将包括以太网地址):

# tcpdump -i eth0 -n -e port 514

您提到要捕获恐慌。这些恐慌的性质可能是在 netconsole(或 kexec/kdump)能够执行任何操作之前完全杀死系统(最近的闰秒问题就是这种情况),或者您确实可以获取成功的日志条目。

另外,netconsole 的另一种选择是使用kexec+kdump内核设施。在出现“可管理”的恐慌时,内核将执行启用 kdump 的内核,该内核将加载最小的 initrd,然后将内核转储写入磁盘。然后可以使用以下工具对其进行分析:碰撞

相关内容