syslog记录history历史

将history记录到syslog上面,并实时的传送到了远端的日志集中服务器上。

方法:使用bash4.1的新功能:历史命令保存到syslog!然后使用syslog-ng构建集中型日志服务器收集主机日志。

1、下载bash:

#wget http://ftp.gnu.org/gnu/bash/bash-4.1.tar.gz
#tar zxvf bash-4.1.tar.gz –C /tmp/bash-4.1
#cd /tmp/bash-4.1

2、修改源码

(根据个人需要,我只保留了pid,uid,sid等,参数请看目录下的shell.c中):
文件bashhist.c大约708行的位置开始,修改成以下一段:

1syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d PPID=%d SID=%d  User=%s CMD=%s", getpid(), getppid(), getsid(getpid()),  current_user.user_name, line);
2else
3{
4strncpy (trunc, line, SYSLOG_MAXLEN);
5trunc[SYSLOG_MAXLEN - 1] = '\0';
6syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED): PID=%d  PPID=%d SID=%d User=%s CMD=%s", getpid(), getppid(), getsid(getpid()),  current_user.user_name, trunc);
7}

注:
ppid:跟踪sh切换后的用户
Sid: 跟踪 su 切换后的用户
第二段代表log长度超过600后使用的语句
修改config-top.h文件

1/*#define SYSLOG_HISTORY*/
2修改为
3#define SYSLOG_HISTORY

编译安装
# ./configure –prefix=/usr/local/bash_4.1 && make && make install
修改用户配置:
将用户的bash换成现在的bash4.1
# vi /etc/passwd
linkboy:x:501:501::/home/linkboy:/usr/local/bash_4.1/bin/bash
这样日志就会记在/var/log/messages
结果类似这样:

Dec 23 17:40:28 server -bash: HISTORY: PID=4089 PPID=4088 SID=4089 User=linkboy CMD=exit
Dec 23 17:41:47 server -bash: HISTORY: PID=4282 PPID=4278 SID=4282 User=root CMD=exit

……
在整个环境布置了记录功能,就能方便的查出来谁-在何时,用什么账号,做了什么操作…

3、主机syslog配置(添加日志服务器的地址)

# vi /etc/syslog.conf

在最后添加一列:

1*.* @syslog.com
<think>首先,用户的问题是关于Linux dmesg命令的,具体是:"我想查看或分析内核环形缓冲区的历史记录 请问Linux dmesg 命令查看内核日志历史记录"。用户想使用dmesg命令来查看或分析内核环形缓冲区的历史记录。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 参考提供的引用: - 引用[1]: 关于dmesg命令的基本信息,包括权限问题。 - 引用[2]: dmesg日志存储在/var/log/dmesg文件中,记录系统启动过程中的内核日志。 - 引用[3]: dmesg访问内核环形缓冲区,通过读取/dev/kmsg或/proc/kmsg。 用户的核心需求是查看历史记录。dmesg默认显示当前缓冲区的内容,但缓冲区是循环的,新日志会覆盖旧的。所以,要查看历史记录,可能需要结合其他方法。 关键点: - dmesg命令本身显示当前内核环形缓冲区的内容。 - 要查看历史记录,可以查看/var/log/dmesg文件,因为系统通常会将启动日志保存到这个文件。 - 也可以使用其他工具如journalctl或检查/var/log/syslog。 基于引用: - 引用[2]提到:日志文件/var/log/dmesg中记录了系统启动过程中的内核日志信息。 - 引用[3]提到:dmesg通过读取/dev/kmsg或/proc/kmsg访问缓冲区。 所以,回答应该包括: 1. 解释dmesg命令的基本用法。 2. 如何查看历史记录:建议查看/var/log/dmesg文件。 3. 可能使用其他方法如保存dmesg输出或结合journalctl。 逐步回答: - 介绍dmesg命令。 - 解释如何查看当前缓冲区。 - 讨论如何访问历史记录。 - 提供命令示例。 - 生成相关问题。 结构回答: - 清晰的结构:例如,使用标题或分段。 - 使用中文。 - 在末尾添加引用标识。 生成相关问题: - 在回答结束后,添加"§§相关问题§§"部分,列出相关问题。 确保回答真实可靠: - 基于标准Linux知识。 - 使用提供的引用作为支持。 最终回答结构: 1. 解释dmesg命令。 2. 如何查看当前内核日志。 3. 如何查看历史记录。 4. 命令示例。 5. 相关问题。</think>### Linux dmesg 命令查看内核日志历史记录 在Linux系统中,`dmesg`命令用于访问内核环形缓冲区(ring buffer),该缓冲区记录内核启动和运行过程中的事件,如硬件检测、驱动初始化和错误消息。由于缓冲区是循环的(大小固定,新日志会覆盖旧内容),直接使用`dmesg`只能显示当前缓冲区中的最新日志。要查看或分析历史记录,需要结合其他方法。下面我将逐步解释如何操作,确保您能有效获取所需信息。 #### 1. **理解内核环形缓冲区** - 内核环形缓冲区是内存中的一块区域,用于临时存储内核日志。新日志会覆盖旧日志,因此默认情况下`dmesg`只显示当前内容,无法回溯太早的历史[^3]。 - 系统启动时,内核日志通常会被保存到文件(如`/var/log/dmesg`),这提供了持久化的历史记录[^2]。 #### 2. **查看当前内核日志(实时内容)** 使用`dmesg`命令直接输出当前缓冲区内容: ```bash dmesg ``` - 添加选项可过滤或格式化输出: - `dmesg -T`:显示人类可读的时间戳(需系统支持)。 - `dmesg --level=err`:仅显示错误级别日志。 - `dmesg | grep "error"`:搜索包含"error"的日志行。 #### 3. **查看和分析历史记录** 由于`dmesg`缓冲区易被覆盖,历史记录需通过持久化日志文件获取: - **方法1: 查看系统启动日志文件** 系统在启动过程中会将内核日志保存到`/var/log/dmesg`文件中: ```bash cat /var/log/dmesg # 查看完整启动日志 less /var/log/dmesg # 分页查看,支持搜索(按`/`键输入关键词) ``` 此文件记录了从开机开始的内核事件,适合分析启动问题或早期错误[^2]。 - **方法2: 使用`dmesg`保存当前日志到文件** 定期运行`dmesg`并将输出重定向到文件,可创建自定义历史记录: ```bash dmesg > dmesg_history.txt # 保存当前缓冲区到文件 ``` 您可以将此命令添加到定时任务(cron job)中,例如每小时运行一次,以积累历史数据。 - **方法3: 结合`journalctl`查看系统日志** `journalctl`工具可访问更全面的系统日志(包括内核日志),支持时间范围查询: ```bash journalctl -k # 仅显示内核日志 journalctl -k --since "2023-10-01" --until "2023-10-05" # 按时间范围过滤 ``` 与`dmesg`相比,`journalctl`提供更持久的历史记录,但依赖于系统日志服务(如`systemd-journald`)是否启用[^1]。 #### 4. **常见问题与技巧** - **权限问题**:如果命令提示权限不足,使用`sudo`: ```bash sudo dmesg # 需要管理员权限 sudo chmod +r /var/log/dmesg # 确保日志文件可读 ``` - **缓冲区大小限制**:默认缓冲区较小(通常几十KB),可通过内核参数调整(如`log_buf_len=1M`),但这需要重启系统且不保证长期历史。 - **实时监控**:使用`watch`命令动态跟踪日志变化: ```bash watch -n 5 "dmesg | tail -n 20" # 每5秒刷新显示最后20行 ``` #### 5. **总结建议** - 对于实时查看:直接用`dmesg`。 - 对于历史分析:优先检查`/var/log/dmesg`或使用`journalctl`。 - 如果日志被覆盖且`/var/log/dmesg`不完整,考虑设置日志轮转(logrotate)或使用外部监控工具。 通过上述方法,您可以有效查看和分析内核日志的历史记录。如果您遇到具体错误或需要更深入的调试,请提供更多细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值