Linux:logwatch(8)太吵了。如何控制噪音水平?


30

我们的Linux系统默认运行logwatch(8)实用程序。在RedHat / CentOS / SL系统上,/etc/cron.daily/cronjob 调用Logwatch ,然后cronjob每天发送一封包含结果的电子邮件。这些电子邮件的主题如下:

Subject: Logwatch for $HOSTNAME

问题是默认情况下,这些日常电子邮件过于嘈杂,并且包含许多已经由其他服务(Nagios,Cacti,中央系统日志等)监视的多余信息(HTTP错误,日常磁盘使用情况等)。对于100个系统,电子邮件负载无法承受。人们会忽略电子邮件,这意味着我们可能会错过Logwatch发现的问题。

如何减少Logwatch产生的噪音,但仍然使用Logwatch通知我们重大问题?

我将在下面发布自己的答案,但我想看看其他人做了什么。

注意:关于FreeBSD,我有一个类似的问题,在FreeBSD上:periodic(8)太吵了。如何控制噪音水平?

Answers:


39

总体而言,Logwatch的可用文档缺乏足够的解释,而且往往过于模糊。我整理了一些有用的示例,并将Logwatch的噪音降低了95%以上。

这就是我所发现的。

请记住,您可以在找到一些Logwatch文档/usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch,其中包含一些有用的示例。

  1. 在RHEL / CentOS / SL上,默认日志监视配置位于 /usr/share/logwatch/default.conf/logwatch.conf

    通过将本地配置放在下,可以覆盖这些设置/etc/logwatch/conf/logwatch.conf。将以下内容放在该文件中,以告诉Logwatch完全忽略“ httpd”等服务和每日磁盘使用情况检查:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. 有时,我不想完全禁用特定服务的logwatch,而只是想微调结果以减少噪音。/usr/share/logwatch/default.conf/services/*.conf包含服务的默认配置。通过将本地配置放在下,可以覆盖这些参数/etc/logwatch/conf/services/$SERVICE.conf。不幸的是,这里的logwatch功能是有限的,并且许多logwatch可执行文件都充满了未记录的Perl。您的选择是将可执行文件替换为其他文件,或尝试使用覆盖某些设置/etc/logwatch/conf/services

    例如,我有一个安全扫描程序,它可以在网络上运行扫描。在测试运行期间,安全扫描程序在应用程序日志中生成许多错误消息。我希望logwatch忽略安全扫描程序中的错误,但仍将其他主机的攻击通知我。在Logwatch中将对此进行更详细的介绍:是否忽略某些IP用于SSH和PAM检查?。为此,我将以下内容放置在/etc/logwatch/conf/services/sshd.conf

    # Ignore these hosts
    *Remove = 192.168.100.1
    *Remove = X.Y.123.123
    # Ignore these usernames
    *Remove = testuser
    # Ignore other noise. Note that we need to escape the ()
    *Remove = "pam_succeed_if\(sshd:auth\): error retrieving information about user netscan.*
    

  3. logwatch还允许您通过在中放置正则表达式来去除logwatch电子邮件中的输出/etc/logwatch/conf/ignore.conf。HOWTO-Customize-LogWatch说:

    ignore.conf:此文件指定正则表达式,当与logwatch的输出匹配时,无论执行哪个服务,该匹配都会抑制匹配行。

    但是,我对此不太幸运。我的需求需要一条条件语句,例如“如果由于我的安全扫描器而出现安全警告,则不要打印输出。但是,如果我的安全扫描仪某些坏人发出了安全警告,请打印出有用的部分-标有“失败的登录来源:”的标头,是不良主机的IP,而不是扫描仪的IP。

  4. 在源处将其压缩(如@ user48838所建议)。这些消息是由某个应用程序生成的,然后Logwatch很高兴将结果发送给您。在这些情况下,您可以修改应用程序以减少日志记录。

    这并不总是可取的,因为有时您希望将完整的日志发送到某个地方(到中央syslog服务器,中央IDS服务器,Splunk,Nagios等),但是您不希望Logwatch通过以下方式向您发送电子邮件每台服务器,每天。


这正是我所做的,但是,如果我没记错的话,有些服务(我认为与电子邮件拒绝有关)是无法从日志中正确解析的,因此被列在“其他”类别中,并且日志中的所有内容都是通过电子邮件发送的。这太吵了。因此,我只是编辑了logwatch源代码,并添加/更改了相应的过滤器,并为每封电子邮件削减了20kb。这是几年前的事,因此我确定自那时以来,logwatch已有所改进,但是我没有更新我的版本以防万一。
迈克,

5

是的-Logwatch通常太吵了。您已经提到完全禁用检查。

如果您不想这样做,则必须阻止某些事件出现。例如-如果nagios通过ssh连接到DMZ系统,这并不有趣。但是,如果通过ssh进行其他登录,则很有趣。

我们使用rsyslog代替ksyslogd(首先安装rsyslog,然后删除ksyslogd)。使用rsyslog,您可以微调记录到日志的内容和不记录日志的内容(例如,构建一个表达式,将sshd中的消息丢弃,并保留“ nagios已连接”)。这样,logwatch将仅报告有用的信息。

xinetd可能是另一种情况-我不想知道成功的连接-可以在xinetd itselv中进行配置-而不禁用xinetd的logwatch-check。


3

有意思的是,我按照选项2提出了Stefan Lasiewski的答案,但出于我的目的,我只想包含特定的行,而不是排除所有我不想要的噪音。

我配置vsftpd的,所以我创建/etc/logwatch/conf/services/vsftpd.conf和使用,而不是像*Remove = testuser其删除行,其中包括文字testuser我用线*OnlyContains = "testuser"只返回行包括文本。

这两个脚本使用grep和非常基本地工作grep -v

不同之处在于,您可以随意使用*Remove多次,但*OnlyContains如果需要其他东西,则必须使用一次。因此,对于多个值,您可以*OnlyContains = "testuser|testuser2|testuser3"


1

您是否考虑过将电子邮件状态消息传递到列表服务器,也许可以根据大小和/或持续时间/年龄的可编程属性提供摘要?该方法不会减少通过电子邮件发送的日志记录的数量,但可以通过批量控制来减少电子邮件发送的频率,从而控制单个电子邮件的数量。


我有。我们还考虑了仅采用syslog的解决方案,其中可以滤除一些噪声。但是,为简单起见,我们想看看是否有可能在源头上控制这些东西。
Stefan Lasiewski 2011年

1
如果您想从源头上“压缩”日志,并最大程度地减少这样做的麻烦,那么您可以考虑限制调整日志级别(如果可用)的努力。
user48838 2011年

0

我最近需要使sshd服务的输出安静下来。有些部分很长,无法通过设置详细程度来控制。

这不是理想的解决方案,但是我通过从此处复制到此处来结束覆盖sshd 脚本/usr/share/logwatch/scripts/services/sshd/etc/logwatch/scripts/services/sshd

当然,您现在必须跟上该脚本文件的所有更新,但是它确实使您可以很好地控制输出内容。另外,我想您可以logwatch通过类似的工具将的输出通过管道传送出去,awk或者sed去除您不想要的东西,但是对我来说,这似乎很难。


0

我在UNIX&Linux Stackexchange上也有同样的问题,这是我为我解决的答案:

您可以通过更改您的中的Range参数,使logwatch观察7天而不是1天logwatch.conf

Range = between -7 days and -1 days

您可以logwatch通过将其从每周cron目录移动到每日cron目录来告知每周运行,而不是每天运行:

mv /etc/cron.daily/00logwatch /etc/cron.weekly/

感谢@JeffSchaller

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.