AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 24428
Accepted
Brent
Brent
Asked: 2009-06-12 14:57:21 +0800 CST2009-06-12 14:57:21 +0800 CST 2009-06-12 14:57:21 +0800 CST

监控 dmesg 输出

  • 772

我发现当我的一台 linux 服务器在低级别出现问题时,我可以在kernel ring buffer中看到有关它的消息。这些可以使用dmesg命令从命令行查看。

我想知道是否有一种简单的方法可以让我的服务器在将某些内容添加到内核环形缓冲区时向我发送电子邮件?

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

  • 有没有更好的方法来做到这一点?

  • 有没有其他人认为在这些消息发生时看到这些消息很重要?

添加

  • dmesg命令报告的信息是否与其中一个日志文件中的信息相同?(如果是这样,那么解决方案比我想象的要容易)
linux log-files monitoring dmesg
  • 6 6 个回答
  • 11443 Views

6 个回答

  • Voted
  1. bignose
    2009-06-12T15:12:01+08:002009-06-12T15:12:01+08:00

    有许多工具旨在收集这些信息并定期报告。

    我发现 Lire 工具(来自LogReport系统)是一个很好的报告工具,但您可能也对Logcheck和Logwatch 感兴趣。所有软件都是免费软件,可以直接从大多数主要的 GNU/Linux 软件包存储库安装。

    • 2
  2. Dennis Williamson
    2009-06-12T16:07:11+08:002009-06-12T16:07:11+08:00

    这是一个快速而肮脏的解决方案。你可能会收到很多邮件。我建议添加一些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 以使 tail 按名称跟随文件以便能够处理日志轮换。

    • 2
  3. Best Answer
    Brent
    2009-06-13T11:24:26+08:002009-06-13T11:24:26+08:00

    以下脚本会将任何新条目发送到 /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
    
    • 1
  4. sunny256
    2009-06-12T17:35:34+08:002009-06-12T17:35:34+08:00

    有一个名为 cronolog(1) 的不错的实用程序,它读取流并根据日期模板将其拆分。我的 Apache 配置文件之一的示例:

    CustomLog "|/usr/bin/cronolog -z0 /var/log/apache2/example.org/%Y/%Y-%m-%dZ.access_log" combined
    

    这会将所有 Apache 日志拆分为 example.org/yyyy/yy-mm-ddZ.access_log 格式,这通常会使生活更轻松。

    现在,如何在您的情况下使用它:启动一个记录 /var/log/messages 中发生的所有事情的进程:

    tail -F /var/log/messages | cronolog -z0 /var/log/mylog/dmesg/%Y-%m-%d_%H.log &
    

    这会将输出拆分为文件名格式的文件

    /var/log/mylog/dmesg/yyyy-mm-dd_hh.log
    

    每过一小时两分钟,从 cron 运行一个脚本,检查最后一小时是否生成了日志文件。像这样的东西:

    #!/bin/bash
    
    # This script is executed every XX:02 from cron
    
    LOGDIR=/var/log/mylog/dmesg
    # Get date string five minutes ago
    LOGDATE=$(date -u +"%Y-%m-%d_%H" -d "5 min ago")
    
    if [ -e $LOGDIR/$LOGDATE.log ]; then
        mail -s "dmesg log for $LOGDATE" [email protected] <$LOGDIR/$LOGDATE.log
    fi
    

    如果未找到文件,则不发送邮件。使用此系统,您还将在 $LOGDIR 目录中备份您的日志。

    • 0
  5. StackKrish
    2009-06-24T06:03:34+08:002009-06-24T06:03:34+08:00

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

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

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

    此外,swatch ( http://sourceforge.net/projects/swatch/ ) 是另一种可以轻松配置为查看日志文件的工具。

    • 0
  6. TimDaMan
    2009-06-24T07:14:23+08:002009-06-24T07:14:23+08:00

    StackKrish 在正确的轨道上,但仍然不发送电子邮件。为此,您可以使用 syslog-ng 之类的东西,它允许将命令记录到具有 program() 目标的程序。如果您不想这样做,您可以让常规 syslogd 记录到命名管道/fifo,然后可以将其连接到发送电子邮件的简单脚本。

    • 0

相关问题

  • 更改 PHP 的默认配置设置?

  • 你用什么工具来监控你的服务器?

  • 我应该如何管理每用户带宽?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve