모든 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
%syslogfacility-text%
다음과 같이 RemoteHost 템플릿에 syslog 기능을 추가할 수 있습니다 .
$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
메시지가 여러 로그 파일에 나타날 수 있습니다.