用netconsole从网络上收集Kernel Panic信息详细方法
背景介绍:
Netconsole是内核驱动中的一个module,可以将内核中的printk消息封装成UDP数据包发送到指定的的接收服务器上,这样可以大大方便我们对kernel panic情况的跟踪分析。
netconsole的用法:
如果 netconsole 被编译成模块,可以用下面的命令启用 netconsole
=============================================================================
2.4内核语法:
- modprobe netconsole dev=srcdev source_port=srcport target_ip=<hex mode of dst ip addr> magic1=<hex> magic2=<hex>
- [target_port=dstport] [
- target_eth_byte0=<dst mac addr hex byte 0>
- target_eth_byte1=<dst mac addr hex byte 1>
- target_eth_byte2=<dst mac addr hex byte 2>
- target_eth_byte3=<dst mac addr hex byte 3>
- target_eth_byte4=<dst mac addr hex byte 4>
- 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 地址的第一到六位(可选);
- #modprobe netconsole dev=eth0 source_port=6666 syslog_target_ip=0xc0a86b01 magic1=0x11111111 magic2=0x11111111
- target_eth_byte0=0x00
- target_eth_byte1=0x0D
- target_eth_byte3=0x60
- target_eth_byte4=0x2C
- target_eth_byte0=0x05
- target_eth_byte0=0xB2
复制代码
上面这条命令会将本机的 kernel printk msg 发送到主机 192.168.107.1 的 udp 端口 514 (syslogd 缺省监听的端口),
发送给 mac 地址为00:0D:60:2C:05:B2的接口。
=============================================================================
2.6内核语法:略去,google就有!
如果碰到了如下问题报错信息如下:
- netlog: using network device <eth0>
- netlog: eth0's network driver does not implement netlogging yet, aborting.
复制代码
请检查include/linux/netdevice.h中是否有这句话:
- #define HAVE_POLL_CONTROLLER
复制代码
如果没有,说明内核不支持。
如果还有上述报错,请检查使用的网卡驱动中是否有与上述宏对应的ifdef,如果没有,说明网卡驱动不支持,请找相应的patch。
至此,你可以在你的target主机上从syslog中查看监控主机的printk了!
:em11:
[ 本帖最后由 platinum 于 2006-8-15 18:37 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
8月份我没怎么来,竟然错过了此贴
netconsole是Ingo Molnar贡献的, 合并到官方内核之前的补丁程序可以在这里找到(mingo的所有补丁,只要没被合并到官方内核里,这里都有):
http://people.redhat.com/mingo/netconsole-patches/
呵呵~~
多谢斑竹支持!
: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:
不知道 patch 是否好找,默认的 kernel(2.4) 是没有这个功能的
不错的文章,加个精华:)
我觉得应该是精华阿~~
good!~~
更新了,希望对有需要的人有用!
看来真的是一个不错的东东
我还没有用过
有眉目了!
稍后更新!
没人帮忙吗?自己顶一下先!