netconsole 重定向kernel日志到远程服务器

linux netconsole 内核模块可以通过配置转发规则讲内核日志通过 udp 发送到远程服务器。通用的Linux发行版内核都已编译 netconsole 模块, 直接使用即可。

如自定义内核启用netconsole只需将以下内核选项打开即可(编译为模块).

CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y


此文为之前的netconsole博文的更新版本.

配置

netconsole 模块加载语法

modprobe netconsole netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]src-port 源端口
src-ip   源ip
dev      指定发送数据网卡设备
tgt-port 目的端口
tgt-ip   目的ip
tgt-macaddr 目的MAC地址,一般为当前设备网关; 统一个网关内可直接指定目的ip的MAC

日志服务器在同一内网, 直接通过ping获取服务器目的MAC:

$ ping -c 1 192.168.1.103 > /dev/null
$ arp -n 192.168.1.103Address                  HWtype  HWaddress           Flags Mask            Iface192.168.1.103            ether   08:00:46:d4:1d:82   C                     eth0

日志服务器不在同一内网, 获取网关目的MAC:

$ netstat -rn | grep ^0.0.0.00.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
$ ping -c 1 192.168.1.1 > /dev/null
$ arp -n 192.168.1.1Address                  HWtype  HWaddress           Flags Mask            Iface192.168.1.1              ether   00:0f:66:5b:2a:3c   C                     eth0

加载netconsole:

echo options netconsole netconsole=6666@192.168.1.102/eth0,6666@192.168.1.103/08:00:46:d4:1d:82 > /etc/modprobe.d/netconsole.conf
modprobe netconsole
or
modprobe netconsole netconsole=6666@192.168.1.102/eth0,6666@192.168.1.103/08:00:46:d4:1d:82

以下为自动化配置脚本, 用于非同网段使用。
自动获取当前默认路由网卡ip及网关ip&MAC地址加载netconsole模块脚本,只需指定syslogd服务器目的地址REMOTE_IP即可.

REMOTE_IP=1.1.1.1
DEVNAME=`ip r |grep default |cut -d' ' -f5`
REMOTE_PORT=6666
LOCAL_IP=`ifconfig $DEVNAME |grep "inet addr"|cut -f2 -d':'|cut -d' ' -f1`
LOCAL_PORT=${LOCAL_IP##*.}VIA=`ip r |grep default |awk '{print $3}'`
VIAHW=`ping -c 1 $VIA  > /dev/null 2>&1; /sbin/arp -an |grep $VIA | awk '{print $4}'`
modprobe netconsole netconsole=$LOCAL_PORT@$LOCAL_IP/$DEVNAME,$REMOTE_PORT@$REMOTE_IP/$VIAHW

netconsole 动态配置

netconsole 使用 configfs 接口实现动态配置, CentOS/RHEL/Fedora/Ubuntu 启动默认都已自动 mount configfs:

mount |grep configfs

如未mount, 执行以下命令:

mount -t configfs configfs /sys/kernel/config

动态配置命令:

modprobe netconsole
cd /sys/kernel/config/netconsole
# 新建一条规则
mkdir 103
cd 103
ls -l
total 0
-rw-r--r-- 1 root root 4096 Mar 11 01:17 dev_name
-rw-r--r-- 1 root root 4096 Mar 11 01:17 enabled
-rw-r--r-- 1 root root 4096 Mar 11 01:17 extended
-rw-r--r-- 1 root root 4096 Mar 11 01:17 local_ip
-r--r--r-- 1 root root 4096 Mar 11 01:17 local_mac
-rw-r--r-- 1 root root 4096 Mar 11 01:17 local_port
-rw-r--r-- 1 root root 4096 Mar 11 01:17 remote_ip
-rw-r--r-- 1 root root 4096 Mar 11 01:17 remote_mac
-rw-r--r-- 1 root root 4096 Mar 11 01:17 remote_port
# 配置与命令行参数一致
echo eth0 > dev_name
echo 6666 > local_port
echo 192.168.1.102 > local_ip
echo 192.168.1.103 > remote_ip
echo 6666 > remote_port
echo 08:00:46:d4:1d:82 > remote_mac
# 启用规则
echo 1 > enabled
# 禁用规则
echo 0 > enabled

删除规则

cd
rmdir /sys/kernel/config/netconsole/103

取消netconsole只需卸载模块即可:

rmmod netconsole

rsyslog

/etc/rsyslog.conf 添加UDP 6666端口监听:

module(load="imudp")
input(type="imudp" port="6666")

重启rsyslog 服务:

systemctl  restart rsyslog

:
防火墙需开放6666端口.

firewall-cmd --zone=$(firewall-cmd --get-default-zone) --add-port=6666/udp --permanent

netcat

在没有syslogd在运行的主机上可以使用 netcat/socat 接收来自远程主机的消息:

nc -u -l -p <port> / nc -u -l <port>
netcat -u -l -p <port> / netcat -u -l <port>
socat udp-recv:<port> -

示例:

nc -l -u 192.168.1.103 6666 | tee ~/netconsole.log

dmesg

-n/--console-level 控制kernel message console 输出级别, 设置输出level为debug(-n 8):

dmesg -n 8

参考:
Documentation/networking/netconsole.txt

netconsole 重定向kernel日志到远程服务器相关推荐

  1. python processpoolexector 释放内存_一起看看python 中日志异步发送到远程服务器

    在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数 ...

  2. cmd中的进度如何捕捉到输出内容_python 中日志异步发送到远程服务器

    在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数 ...

  3. 文件拷贝命令至服务器,远程服务器拷贝文件命令

    远程服务器拷贝文件命令 内容精选 换一换 在IntelliJ上选择"项目",找到".idea"文件夹,单击右键选择"新建>文件", 输 ...

  4. 怎样访问远程服务器文件夹,访问远程服务器文件夹

    访问远程服务器文件夹 内容精选 换一换 /home/ubuntu为用户文件夹.此后,可以通过Windows的远程桌面访问到该华为鲲鹏920处理器所在服务器图形桌面,使用root帐号登录. 为加强对系统 ...

  5. python web 服务器实时监控 websocket_python websocket网页实时显示远程服务器日志信息...

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  6. 通过Xshell登录远程服务器实时查看log日志

    主要想总结以下几点: 1.如何使用生成密钥的方式来登录Xshell连接远端服务器 2.在远程服务器上如何上传和下载文件(下载log文件到本地) 3.如何实时查看log,提取错误信息 一.  使用生成密 ...

  7. linux讲日志暂停,linux – Rsyslog在日志轮换后停止向远程服务器发送数据

    在我的配置中,我有rsyslog负责使用imfile跟踪/home/user/my_app/shared/log/unicorn.stderr.log的更改.使用TCP将内容发送到另一个远程日志记录服 ...

  8. ESXi与Linux主机配置syslog日志上传远程服务器

    ESXi与Linux主机配置syslog日志上传远程服务器 https://www.conum.cn/cloud/vmware/148.html 前言 最近很多客户遇到等级保护监测,需要搭建日志服务器 ...

  9. log4j中将SocketAppender将日志内容发送到远程服务器

    1.服务端配置 1)服务端配置文件log4j-server.properties #Define a narrow log category. A category like debug will p ...

  10. 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序

    最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享. PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI ...

最新文章

  1. spring Ioc本质
  2. patch成为了ALL You Need?挑战ViT、MLP-Mixer的简单模型来了
  3. 测试晶面间距软件_【干货】高分辨TEM晶面间距的测量与标定丨DM软件
  4. UA PHYS515A 电磁理论IV 时变电磁场理论2 Helmholtz方程与含时的Green函数
  5. 小车主板哪家强?PS2手柄4路电机输出..火魔童主板了解一下?
  6. ArcEngine10.0三维开发
  7. window.onload与$(document).ready()的区别
  8. 软件工程博客---团队项目---个人设计2(算法)
  9. mysql语句获取当前时间,系列篇
  10. CUDA里面GRID, BLOCK 边界检测
  11. 3分钟tips:什么是特征向量?什么是特征值?
  12. 无需第三方app,清理Mac缓存垃圾
  13. (附源码)Springboot校园万能跑系统 毕业设计 160934
  14. 数据仓库多维数据模型设计
  15. jqwidgets简单技术
  16. 推断车祸事件论文matlab,预测模型论文,关于基于优化GM(1,1)模型的水上交通事故预测相关参考文献资料-免费论文范文...
  17. 心率检测--异常可能
  18. html零基础学习入门,nlp网站例:HTML零基础入门-HTML学习大纲.doc
  19. 摄影师陈景河教你5个简单技巧 加强照片冲击力
  20. 【吴恩达深度学习】05_week2_quiz Natural Language Processing Word Embeddings

热门文章

  1. 深度学习:神经风格转移
  2. BZOJ3675[APIO2014] 序列分割
  3. js基础-23-websocket和ajax的区别
  4. free 显示系统内存的使用情况
  5. php获取当前文件夹下所有图片大小,PHP获取文件夹大小函数用法实例
  6. linux jsp mysql_Linux JSP连接MySQL数据库
  7. mac vi快速删除_Mac下Vim编辑快捷键小结
  8. wordpresd免登录发布接口php_实现wordpress的ajax接口请求学会admin-ajax.php的利用
  9. linux系统的总父目录,Linux虚拟文件系统-资料路径名的解析(2)-回退父目录
  10. 枚举类比较和工具方法