[转]messages日志中频繁出现的Session信息过滤方法

本文介绍如何在Redhat Linux7中过滤/var/log/messages中的systemd会话和切片相关日志,通过配置rsyslog并重启服务,有效减少无关紧要的日志输出,提高日常诊断效率。

Redhat Linux 7的日志文件/var/log/messages中有频繁的“Started Session”,“New session”,"Removed session"等日志出现,如下所示:
在这里插入图片描述

如果觉得这些无关紧要的日志影响日常诊断,可以执行以下命令过滤掉这类日志:

echo 'if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg cont
<think> 我们正在处理用户的问题:如何通过日志判断Linux系统是否因异常断电导致关机或重启。 根据引用[1]和[2],我们了解到Linux正常关机和重启的命令,以及断电后重启时init进程的行为。 引用[3]提供了一个异常关机的日志片段,其中显示了rsyslogd在信号15下退出。正常关机通常发送信号15(SIGTERM)来终止进程,所以仅凭这个日志不能判断是否为异常断电。 异常断电(即突然断电)通常不会经过正常的关机流程,因此不会记录正常的关机事件。但是,系统重新上电启动时,会记录启动日志,并且可能会留下异常关机的痕迹。 通常,我们可以通过以下方法来判断: 1. 检查系统启动日志:如果系统上次是异常断电,那么重新启动时,在日志中不会有关机记录,而是直接出现系统启动的记录。另外,可能会看到文件系统检查(fsck)的记录,因为异常断电可能导致文件系统损坏,系统启动时会自动进行修复。 2. 查看上一次的关机记录:正常关机在日志中会有明确的关机命令执行记录(如shutdown, reboot等)或者显示由init进程正常结束。而异常断电则不会有这些记录。 3. 查看内核日志(dmesg)或者系统日志(/var/log/messages, /var/log/syslog等)中是否有关于电源中断(如ACPI事件)或者文件系统需要修复的记录。 具体步骤: - 使用命令`last -x`可以查看关机(shutdown)和重启(reboot)的历史记录。异常断电不会在这里留下记录。 - 检查/var/log/messages或/var/log/syslog(具体路径取决于发行版和配置),寻找关机前后的日志。如果没有正常的关机流程记录(比如没有运行关机脚本、没有发送关机信号等),而在重启后突然出现系统启动的记录,则可能是异常断电。 - 查看/var/log/boot.log,系统启动日志,如果上一次启动时进行了文件系统检查,则说明可能上次是异常关机。 - 检查/var/log/kern.log,看是否有类似“Unexpected power off”或“File system needs check”之类的错误。 另外,引用[2]提到init进程会侦测电源失效信号,但异常断电可能来不及记录。不过,现代Linux系统通常会在启动时记录上一次关机的异常情况。 一个更直接的方法是查看系统启动时的日志,通常会记录关机原因。例如: - 在系统日志中寻找包含“Power loss”或“AC power lost”的条目。 - 使用`journalctl`命令(对于使用systemd的系统)查看系统日志过滤关机相关事件: journalctl -b -1 -p err..alert # 查看上一次启动的严重错误 journalctl --list-boots # 列出启动序号,然后选择上一次的启动日志 - 或者使用`dmesg`命令查看内核日志,寻找有关断电或异常关机的信息。 但是,异常断电可能不会在日志中明确记录,因此我们通常通过间接证据(如没有正常关机记录、启动时进行了文件系统检查等)来判断。 步骤总结: 1. 检查关机记录:`last -x | grep shutdown` 或 `last -x | grep reboot`,如果没有正常关机记录,且系统重新启动了,则可能是异常断电。 2. 检查系统日志:在/var/log/syslog或/var/log/messages中,查找上一次关机时间附近的日志。如果有正常关机,会显示“system halted”或“power down”等。如果没有,而在重启后的日志中出现了文件系统检查(fsck)的记录,则可以推断是异常断电。 3. 使用journalctl(针对systemd系统): journalctl --list-boots # 显示启动索引,记下上一次启动的索引(比如-1表示上一次启动) journalctl -b -1 # 查看上一次启动时的日志,重点看启动初期的日志,是否有关于文件系统修复、意外断电等信息。 注意:异常断电后重启,系统可能会在启动时自动进行文件系统检查,并记录在日志中。例如,可能会看到“EXT4-fs (sda1): recovery complete”这样的信息,表明文件系统进行了恢复。 举例: 在系统日志中,正常关机可能会看到: systemd[1]: Received SIGINT. systemd[1]: Stopping Session c1 of user root. systemd[1]: Stopped target Graphical Interface. systemd[1]: Shutting down. 而异常断电后,启动日志可能会显示: systemd[1]: Starting File System Check on /dev/sda1... fsck[1234]: /dev/sda1: clean, 12345/456789 files, 67890/456789 blocks 或者如果文件系统有损坏,会显示修复过程: fsck[1234]: /dev/sda1 contains a file system with errors, check forced. fsck[1234]: /dev/sda1: Inodes that were part of a corrupted orphan linked list found. 因此,我们可以通过以下特征判断: - 没有正常的关机日志(如shutdown命令执行、systemd开始关机流程等) - 在启动日志中出现了文件系统检查(fsck)的记录,特别是如果检查不是按计划进行的(比如在非正常时间检查) - 日志中可能有内核记录的“Unexpected interrupt”或类似的电源异常事件 另外,一些服务器有硬件监控(如UPS),可以记录电源故障,这些日志也可能在系统日志中体现。 根据引用[3]的日志示例,我们看到的是正常关机(signal 15)的记录。如果异常断电,则不会有这样的记录。 因此,我们可以这样回答用户: 在Linux系统下,可以通过以下方法日志判断是否为异常断电导致的关机或重启: 1. **查看关机记录**:使用`last -x`命令查看关机历史。正常关机会有`shutdown`或`reboot`记录,而异常断电则不会有。 例如:`last -x | grep shutdown` 2. **检查系统日志**:查看系统日志文件(如`/var/log/messages`、`/var/log/syslog`),定位到上一次关机前后的时间段: - 正常关机:会显示系统开始关闭的日志,例如(以systemd系统为例): systemd-logind: System is powering down. systemd[1]: Shutting down. - 异常断电:在日志中你可能找不到关机过程的记录,而是直接看到下一次启动的日志。 3. **检查启动日志**:查看系统启动时的日志,特别是文件系统检查的记录: - 使用命令:`grep -i fsck /var/log/syslog` 或 `dmesg | grep -i fsck` - 如果在启动时出现了文件系统检查,并且不是按计划进行的(比如非正常关机后的启动),则可能是异常断电导致的。 4. **使用journalctl(针对systemd系统)**: - 列出所有启动:`journalctl --list-boots` - 查看上一次启动的日志:`journalctl -b -1 | grep -E 'fsck|shutdown|power'` - 注意寻找是否有文件系统修复的记录,或者有关电源异常的记录。 5. **检查内核日志**:`dmesg`命令的输出中,启动时的内核日志可能会有线索,比如: [ 0.000000] ACPI: PM: Power button event [ 1.234567] EXT4-fs (sda1): recovery complete 如果看到文件系统恢复(recovery)的记录,通常意味着上次关机是异常的。 6. **查找电源事件**:在日志中搜索与电源相关的关键字,如`power off`, `ACPI`, `power loss`等。 综合以上方法,如果: - 没有正常关机的日志记录 - 在启动日志中发现了文件系统检查或修复的记录 - 或者有电源异常的内核日志 则可以推断上次关机或重启是由于异常断电导致的。 注意:不同发行版的日志路径和内容可能略有不同,以上方法需要结合具体情况分析。 例子: 正常关机日志片段(systemd): May 10 12:00:00 hostname systemd[1]: Stopping target Multi-User System. May 10 12:00:00 hostname systemd[1]: Stopped target Graphical Interface. May 10 12:00:00 hostname systemd[1]: Stopping Session c2 of user root. May 10 12:00:01 hostname systemd[1]: Shutting down. 异常断电后重启的日志片段(启动时): May 10 12:05:00 hostname kernel: [ 0.000000] ACPI: PM: Power button event May 10 12:05:00 hostname kernel: [ 1.234567] EXT4-fs (sda1): recovery complete May 10 12:05:00 hostname systemd-fsck[567]: /dev/sda1: clean, 123456/789012 files, 3456789/4567890 blocks 因此,通过对比关机日志和启动日志,可以判断是否为异常断电。 另外,如果系统配置了kexec(快速重启)或者使用了休眠(hibernate),则情况会复杂一些,需要排除这些情况。 参考文献: [^1] 提供了正常关机命令的信息,有助于我们了解正常关机的过程。 [^2] 提到init进程会侦测电源失效信号,但异常断电可能来不及记录,因此我们主要依赖启动时的日志。 [^3] 给出了一个正常关机的日志示例(信号15),这有助于我们区分正常关机与异常断电。 如果用户需要更详细的日志分析,可以建议用户提供具体的日志片段。 现在,我们为用户生成相关问题。 </think> 在Linux系统中,可以通过分析系统日志判断是否为异常断电导致的关机或重启,以下是具体方法及步骤: --- ### **判断方法** #### 1. **检查关机原因记录** - 使用命令查看关机日志: ```bash journalctl -b -1 | grep "Shutting down\|power off" ``` - **正常关机**:会显示`systemd[1]: Shutting down`或`Initiated power off`等明确记录(如引用[1]提到的`shutdown`命令触发)[^1] - **异常断电**:日志中**无任何关机记录**,直接跳到下次启动日志(如引用[2]所述,异常断电不会触发正常关机流程)[^2] #### 2. **分析内核日志中的电源信号** - 检查内核日志的关键字段: ```bash journalctl -b -1 -k | grep -i "power\|acpi" ``` - **正常关机**:显示`ACPI: Preparing to enter system sleep state`(ACPI睡眠状态准备) - **异常断电**:出现`Kernel: Power button event`(物理断电按钮事件)或`ACPI: Critical trip point`(电源临界事件),且无后续关机流程记录[^2] #### 3. **查看文件系统日志** - 检查文件系统异常标记: ```bash journalctl -b | grep "fsck\|EXT4-fs error" ``` - **异常断电特征**: - 显示`EXT4-fs (sda1): recovery complete`(文件系统强制恢复) - `fsck`非计划性启动(如引用[3]中日志缺失正常卸载记录)[^3] #### 4. **对比系统运行时间** - 检查上次运行时长是否异常: ```bash last -x | grep "shutdown\|reboot" # 查看正常关机记录 uptime -s # 当前系统启动时间 ``` - 若系统运行时间远低于日常平均值(如从数天变为几分钟),可能因异常断电导致频繁重启。 --- ### **关键日志示例** - **异常断电的典型日志链**: ```log Jun 15 03:00:00 host kernel: ACPI: Critical trip point # 电源异常信号 Jun 15 03:00:02 host systemd-fsck[1011]: /dev/sda1: clean, 1024/65536 files # 强制文件系统检查 Jun 15 03:00:05 host systemd[1]: Startup finished in 15s # 无前次关机记录直接启动 ``` - **正常关机的典型日志**: ```log Jun 14 22:00:00 host systemd[1]: Received SIGTERM # 收到关机信号 Jun 14 22:00:01 host systemd[1]: Shutting down. # 关机流程启动 Jun 14 22:00:03 host kernel: Power down. # 电源关闭 ``` --- ### **操作步骤总结** 1. **定位日志时间**: ```bash journalctl --list-boots # 列出所有启动记录 journalctl -b -1 # 查看上一次启动的完整日志 ``` 2. **筛选关键事件**: ```bash journalctl -b -1 -p 3..7 # 过滤警告级以上日志 ``` 3. **综合验证**: - 无正常关机记录 + 文件系统恢复日志 + 电源异常信号 → **确认异常断电** > 💡 **提示**:若日志被覆盖,可检查`/var/log/syslog`或`/var/log/messages`的历史归档(引用[3]的日志存储在`rsyslog`中)[^3]。 --- ### **相关问题** 1. 如何诊断Linux系统启动时的文件系统错误? 2. 除了日志分析,还有哪些方法可以检测服务器异常断电? 3. 如何配置Linux日志服务(如`rsyslog`)以确保关键关机事件不被覆盖? [^1]: Linux正常关机需执行`sync`和`shutdown`等命令,确保数据安全写入硬盘 [^2]: 异常断电时`init`进程无法捕获信号,导致日志缺失正常关机流程 [^3]: 系统日志(如`/var/log/messages`)记录服务退出信号,异常关机通常无信号记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值