我已经为我的所有 Linux 服务器配置了集中式服务器。我可以将所有系统日志和 Oracle 数据库审计日志转发到集中服务器。但我的问题是所有系统和数据库日志都写入一个文件中。我的要求是将数据库日志写入不同的文件,将系统日志写入集中位置的不同文件。请找到下面的脚本。
192.168.1.150:集中服务器
192.168.1.44:远程服务器
远程服务器配置(192.168.1.44)
$ cat /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp.so
$InputTCPServerRun 514
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#Save oracle rdbms audit trail to oracle_audit.log
local0.info /u01/app/oracle/admin/prod/adump/oracle_audit.log
*.* @192.168.1.150:514
集中服务器配置(192.168.1.150):
$ cat /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp.so
$InputTCPServerRun 514
$template RemoteHost,"/backup/CentralizeLogLocation/Linuxlogs/%HOSTNAME%/%HOSTNAME%-%$YEAR%%$MONTH%%$DAY%.log"
if ($hostname != '') then ?RemoteHost
&~
这些文件以这种格式为集中式服务器 thsc-vmmanager-20160614.log 中的每个主机创建
看起来一切都很好——我得到了我想要的,但是 Oracle 数据库审计日志和系统日志都写在一个日志文件中。我也附上了屏幕截图。
现在的要求是将这两个文件分开。请指导我如何实现这一目标。
答案1
您可以将 syslog 工具添加%syslogfacility-text%
到 RemoteHost 模板,如下所示:
$template RemoteHost,"/backup/CentralizeLogLocation/Linuxlogs/%HOSTNAME%/%HOSTNAME%-%syslogfacility-text%-%$YEAR%%$MONTH%%$DAY%.log"
答案2
在您的集中式服务器中,您已经创建了一个模板,但尚未使用它。尝试在最后添加
if $fromhost-ip startswith 192.168.1.44 then -?RemoteHost
& ~
或者
if $syslogfacility-text isequal 'local0' then -?RemoteHost
& ~
或者您可以将这些结合起来,将您的远程设施 local0(即 oracle 日志)记录到一个文件,并将其余的记录到另一个文件,例如:
if $fromhost-ip == '192.168.1.44' and $syslogfacility-text == 'local0' then /var/log/oracle.log
& ~
*.* /var/log/messages
该& ~
行在上一条命令将 oracle 消息保存到文件后将其删除。if
。看rsyslog.com以获得大量帮助和示例。
行开头的文件名if
可以固定,如/var/log/oracle.log
,或您之前定义的模板,如-?OracleData
。所以你需要添加,例如,
$template OracleData,"/backup/CentralizeLogLocation/Oracle/%HOSTNAME%/%HOSTNAME%-%$YEAR%%$MONTH%%$DAY%.log"
if $syslogfacility-text isequal 'local0' then -?OracleData
& ~
if $fromhost-ip startswith '192.168.1' then -?RemoteHost
& ~
*.* /var/log/messages
由于您的 oracle 日志消息包含单词“Oracle”,您也可以使用以下命令拆分这些消息:
if $msg contains 'Oracle' then -?OracleData
& ~
请注意,这些行的顺序很重要。必须在使用模板之前对其进行定义。这些规则依次应用于每条消息。如果您不将这些& ~
行紧接在这些行之后if
,那么该消息可能会出现在多个日志文件中。