这只是我的延续上一篇文章在使用 rsyslog 配置时,我遇到了许多挑战,并了解了它的许多注意事项,而我的大部分配置在获得许多专业建议后现在正在工作,现在我陷入了两难境地,我想丢弃一些消息我过滤的消息。
我当前的 rsyslog.conf 配置文件:
[root@hos1-loghost ~]# cat /etc/rsyslog.conf
##########################################################################################
# rsyslog configuration file For PCC & LPC
##########################################################################################
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$ModLoad imudp # Provides UDP syslog reception
$UDPServerRun 514 # Provides UDP syslog reception
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$template system-logs, "/data/SYSTEMS/%HOSTNAME%/messages.log"
$template dpc-nets,"/scratch/rsyslog/network/%HOSTNAME%/messages.log"
$template dpc-firewalls,"/scratch/rsyslog/firewall/%HOSTNAME%/messages.log"
#################################################
#### GLOBAL DIRECTIVES ####
#################################################
$WorkDirectory /var/lib/rsyslog # Where to place auxiliary files
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # Use default timestamp format
$IncludeConfig /etc/rsyslog.d/*.conf # Include all config files in /etc/rsyslog.d/
$OmitLocalLogging on # local messages are retrieved through imjournal now.
$IMJournalStateFile imjournal.state # File to store the position in the journal
############ RULES #########################################
# Log anything (except mail) of level info or higher #######
# Don't log private authentication messages! ########
############################################################
mail.none;authpriv.none;cron.none ?system-logs
*.* ?system-logs
#####################################################################
# Custom conditional Forwarding of messages to the syslog Directory #
###################################################################
if $fromhost startswith "wc" then {
*.crit,*.err,*.emerg,*.alert,*.panic,mail.none,authpriv.none,cron.none,news.none,uucp.none,kern.none ?system-logs
& stop
}
if $fromhost startswith "sj-" then {
*.crit,*.err,*.emerg,*.alert,*.panic,mail.none,authpriv.none,cron.none,news.none,uucp.none,kern.none ?system-logs
& stop
}
if $fromhost startswith "vlsj-" then {
*.crit,*.err,*.emerg,*.alert,*.panic,mail.none,authpriv.none,cron.none,news.none,uucp.none,kern.none ?system-logs
& stop
}
在上面的配置中,我有多个 if 条件来过滤主机名,并仅选择所需的设施级别并丢弃其他设施级别。
现在我遇到一种情况,我必须忽略/丢弃包含特定字符串的消息。
消息集示例
Feb 8 08:07:01 my-ezure CROND[10487]: (root) CMD (/grid/it/sbin/plugins/new_toplevelmap.sh)
Feb 8 08:08:01 my-ezure CROND[10587]: (root) CMD (/grid/it/sbin/plugins/ps-rem)
Feb 8 08:01:01 my-ezure run-parts(/etc/cron.hourly)[9812 starting mcelog.cron
Feb 8 08:01:01 my-ezure run-parts(/etc/cron.hourly)[9841 finished mcelog.cron
Feb 8 08:08:01 my-ezure CROND[10588]: (root) CMD (/grid/it/sbin/plugins/new_toplevelmap.sh)
从上面的消息中,我需要丢弃包含的消息 CROND
,我尝试在 rsyslog.conf 的末尾附加以下行,但没有成功。
如果 $programname == ' CROND' 则停止
如果 $rawmsg 包含 'CROND' 那么 ~
如果 $syslogfacility-text == ' CROND' 那么 ~
我有 rsyslog 版本:rsyslogd 7.4.7
我想丢弃来自所有在线客户端主机的所有不需要的消息,以便仅将所需的消息写入我的 rsyslog 服务器。