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

Ste*_*ski 31 linux monitoring syslog logwatch

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

Subject: Logwatch for $HOSTNAME
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ste*_*ski 41

总的来说,Logwatch 的可用文档缺乏足够的解释,而且通常过于模糊。我拼凑了一些有用的例子,并将 Logwatch 噪音降低了 95% 以上。

这是我发现的。

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

  1. 在 RHEL/CentOS/SL 上,默认的 logwatch 配置在 /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"
    
    Run Code Online (Sandbox Code Playgroud)
  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.*
    
    Run Code Online (Sandbox Code Playgroud)

  3. logwatch 还允许您通过将正则表达式放在/etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch 说:

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

    但是,我在这方面运气不佳。我的要求需要一个条件语句,类似于“如果由于我的安全扫描器而出现安全警告,则不要打印输出”。但是如果我的安全扫描器一些坏人有安全警告,那么打印有用的部分——标有“登录失败:”的标题,坏主机的 IP,但不是扫描仪的 IP。

  4. 从源头上扼杀它(如@user48838 所建议)。这些消息是由某个应用程序生成的,然后 Logwatch 很高兴地向您发送结果。在这些情况下,您可以修改应用程序以减少日志记录。

    这并不总是可取的,因为有时您希望将完整日志发送到某个地方(到中央 syslog 服务器、中央 IDS 服务器、Splunk、Nagios 等),但您不希望 logwatch 从每台服务器,每一天。


Nil*_*ils 5

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

如果您不想这样做,则必须阻止某些事件的出现。例如 - 如果 nagios 通过 ssh 连接到 DMZ 系统,那就没什么意思了。但是,如果有其他通过 ssh 登录的用户,那就很有趣了。

我们使用 rsyslog 而不是 ksyslogd(首先安装 rsyslog,然后删除 ksyslogd)。使用 rsyslog,您可以微调哪些内容会进入日志,哪些不会(例如,构建一个表达式,从包含“nagios connected”的 sshd 中删除消息)。这样 logwatch 将只报告有用的信息。

另一种情况可能是 xinetd - 我不想得到有关成功连接的通知 - 这可以在 xinetd 本身中进行配置 - 无需禁用 xinetd 的日志监视检查。