监控 dmesg 输出

监控 dmesg 输出

我发现,当我的一台 Linux 服务器上出现低级错误时,我可以在内核环形缓冲区。可以使用命令行查看这些内容消息命令。

我想知道是否有一种简单的方法可以让我的服务器每当有新内容添加时,请给我发电子邮件到内核​​环形缓冲区?

现在我有一个每小时运行一次的脚本,复制 dmesg 的输出并运行差异对比前一小时的文件。不幸的是,这种方法效果不太好,因为随着行被附加到 dmesg 输出的末尾,其他行会从开头截断。此外,如果我有很多相同的消息,它就会完全停止通知我。

  • 有没有更好的方法呢?

  • 还有人认为当这些消息发生时查看它们很重要吗?

添加

  • 消息命令是否与其中一个日志文件中的命令相同?(如果是这样,那么解决方案比我想象的要简单)

答案1

有许多工具可用于收集这些信息并定期报告。

我发现 Lire 工具(来自日志报告系统)是一个很好的报告工具,但你可能也感兴趣日志检查日志监视。 全部是免费软件并且可以直接从大多数主要的 GNU/Linux 软件包存储库安装。

答案2

这是一个快速而肮脏的解决方案。你可能会得到很多邮件。我建议添加一些grep和/或grep -v命令。当然,您也可以将此技术用于其他日志文件。将此命令添加到您的/etc/rc.d/rc.local或系统的等效项中(在从命令行对其进行测试之后)。

sudo tail -F /var/log/messages | while read line ; do echo "$line"|mail -s Subject recipient; done &

编辑:改为大写 F,使尾部按名称跟随文件,从而能够处理日志轮换。

答案3

以下脚本将把 /var/log/kern.log 中的任何新条目发送给 root 用户。
将其放入/etc/cron.hourly将每小时发送一封电子邮件,但前提是存在新的内核消息。

#!/bin/bash

MAILTO=root
LOG=/var/log/kern.log

OFFSET_FILE=$0.offset
if [ ! -f $OFFSET_FILE ]; then echo 0 > $OFFSET_FILE; fi
OFFSET=`cat $OFFSET_FILE`
FILESIZE=`cat $LOG|wc -c`

# Check if log has been rotated
if [ "$OFFSET" -gt "$FILESIZE" ]; then
  OFFSET=0
  echo 0 > $OFFSET_FILE
fi
if [ "$FILESIZE" -gt "$OFFSET" ]; then
  tail -c+$OFFSET $LOG|sed "s/^/  /"|mail $MAILTO -s "new kernel alerts"
  echo $FILESIZE > $OFFSET_FILE
fi

答案4

如果你没有 kern.log 并且想要创建并保留一个,请编辑 /etc/syslog.conf 并添加以下内容

kern.* -/var/log/kern.log

如果您需要更多有关配置 syslogd 的帮助,请尝试“man 5 syslog.conf”。

还有样品(http://sourceforge.net/projects/swatch/) 是另一个可以轻松配置来查看日志文件的工具。

相关内容