Documents/Kernel netoops howto

出自淘宝内核组

跳转到: 导航, 搜索

目录

netoops使用方法

假设本机的ip为192.168.1.2,接收oops消息的机器(即启动syslog-ng的机器)的ip为192.168.1.6且mac地址为00:26:6C:F9:48:88

本机的操作

#挂载 configfs
mount -t configfs configfs /sys/kernel/config/

#设置netoops
mkdir /sys/kernel/config/netoops/target1
cd /sys/kernel/config/netoops/target1/
echo "192.168.1.2" > local_ip
echo "192.168.1.6" > remote_ip
echo "00:26:6C:F9:48:88" > remote_mac
echo "520" > remote_port


#注意:如果接受日志和发送日志的服务器不在同一网段,则remote_mac中的MAC地址为发送日志服务器对应网关的MAC地址。

#启动netoops
echo "1" > enabled
#如果还需要监控 OOM 的输出信息 则
#echo "1" > /sys/kernel/netoops/netoops_record_oom

常见问题:

echo 1 > enabled 的时候出现“write error: No such device" 或 “write error: Device or resource busy"

原因:

netoops默认用eth0做为发出消息的网络设备,但是有的机器出口设备不是eth0(比如,是em1)

解决方法:

先修改 dev_name:

echo "em1" > dev_name

再 echo "1" > enabled

日志机器的操作

打开 /etc/syslog-ng/syslog-ng.conf,在最后添加:

source netoops {
        udp(port(520));
};

destination oopslog {
        file("/var/log/oops");
};

log {
        source(netoops);
        destination(oopslog);
};

service syslog-ng restart重启syslog-ng服务,则以后收到的oops消息将记在/var/log/oops里

测试

可在被监控机上用

echo "y" > /proc/sysrq-trigger

然后在日志接收机器上查看/var/log/oops日志是否更新了

即可测试netoops是否有效

自动部署脚本

#load_netoops.sh脚本,放在被监控的机器上,脚本后跟的参数为:
# $1 syslog-ng机器的ip地址
# $2 syslog-ng机器的mac地址
if [ -d "/sys/kernel/config/netoops/target1" ]; then
	rmdir /sys/kernel/config/netoops/target1
fi
	
mkdir /sys/kernel/config/netoops/target1
cd /sys/kernel/config/netoops/target1/
echo `/sbin/ifconfig |grep "inet addr"|grep -v "127.0.0.1"|head -1|awk '{print $2}'|awk -F":" '{print $2}'` > local_ip
echo $1 > remote_ip
echo $2 > remote_mac
echo "520" > remote_port
echo "1" > enabled
cd -

然后从监控机器(即启动syslog-ng服务的机器)上运行:

ssh root@192.168.1.2 "sh /root/load_netoops.sh 192.168.1.6 00:26:6C:F9:48:88"

netoops的输出信息

如果一台服务器(已经配好了netoops)发生了kernel oops或panic,其dmesg的buffer里的所有信息 (包括oops或panic信息)将会用UDP发往log服务器,并且,是发三遍,所以日志服务器上的/var/log/oops里看到的是重复三遍的dmesg的信息。

由于oops日志里的是直接采用udp包格式,不太方便查看,可以使用如下工具:

文件:Voops.sh

使用方法:

1. 下载 Voops.sh

2. chmod a+x Vops.sh

4. ./Voops.sh /var/log/oops 即可将日志转化为方便阅读的格式

个人工具