すべてのLinuxサーバー用に集中型サーバーを構成しました。すべてのシステムログとOracleデータベース監査ログを中央サーバーに転送できます。しかし、私の問題は、すべてのシステムログとデータベースログが1つのファイルに書き込まれることです。私の要件は、データベースログを別のファイルに記録し、システムログを中央の場所の他のファイルに記録することです。以下のスクリプトを見つけてください。
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つのログファイルに書き込まれました。スクリーンショットも添付しておきました。
今の要件は、これら2つのファイルを分離することです。これを達成する方法を案内してください。
答え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ログなど)を1つのファイルに書き込んだり、残りを別のファイルに書き込むこともできます。たとえば、次のようになります。
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
メッセージが複数のログファイルに表示されることがあります。