用netconsole从网络上收集Kernel Panic信息详细方法

发布于 2022-07-25 15:57:33 字数 2838 浏览 16 评论 9

背景介绍:
    Netconsole是内核驱动中的一个module,可以将内核中的printk消息封装成UDP数据包发送到指定的的接收服务器上,这样可以大大方便我们对kernel panic情况的跟踪分析。

netconsole的用法:
如果 netconsole 被编译成模块,可以用下面的命令启用 netconsole
=============================================================================
2.4内核语法:

  1. modprobe netconsole dev=srcdev source_port=srcport target_ip=<hex mode of dst ip addr> magic1=<hex> magic2=<hex>
  2.      [target_port=dstport] [
  3.      target_eth_byte0=<dst mac addr hex byte 0>
  4.      target_eth_byte1=<dst mac addr hex byte 1>
  5.      target_eth_byte2=<dst mac addr hex byte 2>
  6.      target_eth_byte3=<dst mac addr hex byte 3>
  7.      target_eth_byte4=<dst mac addr hex byte 4>
  8.      target_eth_byte5=<dst mac addr hex byte 5> ]

复制代码


dev=srcdev: 网络接口(必填);
source_port=srcport: udp 源端口(必填);
target_port=dstport: udp 目标端口(可选),执行时需加上前缀“syslog_”或者“netlog_”;
target_ip=hex mode of dst ip addr: 十六进制表示的目标 ip 地址(必填),执行时需加上前缀“syslog_”或者“netlog_”;
magic1=<hex>: 非零的十六进制数,具体含义不详(必填);
magic2=<hex>: 非零的十六进制数,具体含义不详(必填);
dst mac addr hex byte [0-6]:  十六进制表示的目标 mac 地址的第一到六位(可选);

  1. #modprobe netconsole dev=eth0 source_port=6666 syslog_target_ip=0xc0a86b01 magic1=0x11111111 magic2=0x11111111
  2.       target_eth_byte0=0x00
  3.       target_eth_byte1=0x0D
  4.       target_eth_byte3=0x60
  5.       target_eth_byte4=0x2C
  6.       target_eth_byte0=0x05
  7.       target_eth_byte0=0xB2

复制代码

上面这条命令会将本机的 kernel printk msg 发送到主机 192.168.107.1 的 udp 端口 514 (syslogd 缺省监听的端口),
发送给 mac 地址为00:0D:60:2C:05:B2的接口。

=============================================================================
2.6内核语法:略去,google就有!

如果碰到了如下问题报错信息如下:

  1. netlog: using network device <eth0>
  2. netlog: eth0's network driver does not implement netlogging yet, aborting.

复制代码

请检查include/linux/netdevice.h中是否有这句话:

  1. #define    HAVE_POLL_CONTROLLER

复制代码
如果没有,说明内核不支持。
如果还有上述报错,请检查使用的网卡驱动中是否有与上述宏对应的ifdef,如果没有,说明网卡驱动不支持,请找相应的patch。
至此,你可以在你的target主机上从syslog中查看监控主机的printk了!
:em11:

[ 本帖最后由 platinum 于 2006-8-15 18:37 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

唔猫 2022-07-26 15:00:22

8月份我没怎么来,竟然错过了此贴

netconsole是Ingo Molnar贡献的, 合并到官方内核之前的补丁程序可以在这里找到(mingo的所有补丁,只要没被合并到官方内核里,这里都有):
http://people.redhat.com/mingo/netconsole-patches/

想挽留 2022-07-26 15:00:21

呵呵~~
多谢斑竹支持!
:em11:
patch很好找,我google就得到了,用于2.4 的和2.6的都有。
2.6的更新时间是2003年的,2.4的更新时间是2002年。
redhat 9.0版本提供的内核linux-2.4.20-8就已经包含此patch,在netdevice.h中已经添加了poll_controller回调函数指针,并包含HAVE_POLL_CONTROLLER宏定义,相应的驱动中,e100,eepro100等常用的驱动也都包含此patch。
不过做嵌入式的朋友们要根据自己实际使用的芯片去找相应的patch了,实在不行,可能还要自己改改代码才能搞定吧。
碰到的时候可以一起讨论一下!

:em11:

千年*琉璃梦 2022-07-26 15:00:16

不知道 patch 是否好找,默认的 kernel(2.4) 是没有这个功能的
不错的文章,加个精华:)

心是晴朗的。 2022-07-26 15:00:11

我觉得应该是精华阿~~

乙白 2022-07-26 15:00:07

good!~~

泪之魂 2022-07-26 14:59:57

更新了,希望对有需要的人有用!

热情消退 2022-07-26 12:37:15

看来真的是一个不错的东东
我还没有用过

儭儭莪哋寶赑 2022-07-26 06:38:34

有眉目了!
稍后更新!

三生池水覆流年 2022-07-25 23:54:34

没人帮忙吗?自己顶一下先!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文