我们的Linux系统默认运行logwatch(8)工具。 在RedHat / CentOS / SL系统上,Logwatch由/etc/cron.daily/
cronjob调用,然后每天发送一封包含结果的电子邮件。 这些电子邮件有一个主题,如:
Subject: Logwatch for $HOSTNAME
问题是,默认情况下,这些每日邮件太吵了,包含了很多已经被其他服务(Nagios,Cacti,中央系统日志等)监视的多余信息(HTTP错误,每日磁盘使用等)。 对于100个系统,电子邮件负载是无法忍受的。 人们忽略电子邮件,这意味着我们可能会错过logging所挑选的问题。
我怎样才能减lesslogwatch产生的噪音量,但仍然使用logwatch来通知我们重大的问题?
我会在下面发表我自己的回答,但我想看看别人做了什么。
注意 :在FreeBSD上,我有一个关于FreeBSD的类似问题:periodic(8)太吵了。 我怎样才能控制噪音水平?
总体而言,Logwatch的可用文档缺乏足够的解释,通常太模糊。 我汇集了一些有用的例子,并且减less了95%以上的Logwatch噪音。
这是我find的。
请记住,您可以在/usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch
find一些Logwatch文档,它包含一些有用的示例。
在RHEL / CentOS / SL上,缺省的logwatchconfiguration位于/usr/share/logwatch/default.conf/logwatch.conf
通过将您的本地configuration放置在/etc/logwatch/conf/logwatch.conf
下可以覆盖这些设置。 在该文件中放置以下内容来告诉logwatch完全忽略诸如“httpd”之类的服务和每日磁盘使用检查:
# Don't spam about the following Services Service = "-http" Service = "-zz-disk_space"
有时我不想完全停用某个特定服务的logwatch,我只是想微调结果,以减less噪音。 /usr/share/logwatch/default.conf/services/*.conf
包含服务的默认configuration。 通过将您的本地configuration放置在/etc/logwatch/conf/services/$SERVICE.conf
下可以覆盖这些参数。 不幸的是,logwatch在这里的能力是有限的,许多logwatch可执行文件都充满了未logging的Perl。 你的select是用另外的东西replace可执行文件,或者尝试使用/etc/logwatch/conf/services
来覆盖一些设置。
例如,我有一台安全扫描器在networking上运行扫描。 testing运行时,安全扫描程序会在应用程序日志中生成许多错误消息。 我希望logwatch忽略来自我的安全扫描器的错误,但仍然通知我其他主机的攻击。 Logwatch详细介绍了这一点:忽略SSH和PAM检查的某些IP? 。 为此,我将以下内容放在/etc/logwatch/conf/services/sshd.conf
:
# Ignore these hosts *Remove = 192.168.100.1 *Remove = XY123.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.*
“
logwatch还允许您通过在/etc/logwatch/conf/ignore.conf
放置正则expression式来/etc/logwatch/conf/ignore.conf
logwatch电子邮件中的输出。 HOWTO-Customize-LogWatch说:
ignore.conf:这个文件指定正则expression式,当与logwatch的输出相匹配时,不pipe正在执行哪个服务,都会压缩匹配的行。
不过,我没有太多运气。 我的要求需要一个条件语句,就像'如果由于我的安全扫描器有安全警告,那么不要打印输出。 但是,如果我的安全扫描器和一些坏人有安全警告,那么打印有用的部分 – 标题为“失败的login名:”,坏主机的IP,而不是扫描器的IP。
在源代码处理(如@ user48838所示)。 这些消息是由一些应用程序生成的,然后Logwatch高兴地把结果传递给你。 在这些情况下,您可以修改应用程序以减lesslogging。
这并不总是可取的,因为有时候你想要将完整的日志发送到某个地方(中央系统日志服务器,中央IDS服务器,Splunk,Nagios等),但是你不希望logwatch通过电子邮件向你发送电子邮件每一台服务器,每一天。
是的 – logging表通常太吵。 你已经提到完全禁用检查。
如果你不想这样做,你必须防止某些事件出现。 举个例子 – 如果nagios通过ssh连接到一个DMZ系统,这并不是很有意思。 但是,如果有通过SSH的其他login是有趣的。
我们使用rsyslog而不是ksyslogd(首先安装rsyslog,然后删除ksyslogd)。 使用rsyslog,你可以微调什么去日志和什么不(例如build立一个expression式,从sshd cointaining“nagios连接”)丢弃消息。 这样logwatch只会报告有用的信息。
另一种情况可能是xinetd – 我不想获得有关成功连接的信息 – 可以在xinetd itselv中configuration – 不禁用xinetd的logwatch-check。
作为一个兴趣点,我select了Stefan Lasiewski的答案2,但为了我的目的,我只想包括特定的行,而不是排除我不想要的所有噪音。
我正在configurationvsftpd,所以我创build了/etc/logwatch/conf/services/vsftpd.conf
,而不是使用类似*Remove = testuser
东西,它删除了包含文本testuser
的行*OnlyContains = "testuser"
我使用了行*OnlyContains = "testuser"
,它只返回包含该文本的行。
这两个脚本使用grep
和grep -v
非常基本。
不同的是,你可以使用*Remove
多次,但只有*OnlyContains
你必须使用一次,如果你想要的东西或别的东西或别的东西。 因此,对于多个值,您可以*OnlyContains = "testuser|testuser2|testuser3"
你有没有考虑过把邮件状态信息发送到一个列表服务器,也许是一个可以提供基于大小和/或持续时间/年龄的可编程属性的摘要? 这种方法不会减less通过电子邮件发送的日志量,但可以通过批量控制单个邮件的数量来减less电子邮件的发送频率。
我最近需要清除sshd服务的输出。 有些部分很长,不能通过设置细节级别来控制。
这不是一个理想的解决scheme,但是我从这里复制了sshd 脚本 : /usr/share/logwatch/scripts/services/sshd
到这里: /etc/logwatch/scripts/services/sshd
当然,你现在必须跟上脚本文件的任何更新,但是它确实能够很好地控制输出。 或者,我想你可以通过awk
或sed
类的工具来pipe理logwatch
的输出,以logwatch
你不想要的东西,但这对我来说似乎更难。