web-dev-qa-db-ja.com

特定のプログラムからリモートサーバー上の特定の場所にファイルを送信するようにrsyslogを構成する方法

私は、クライアントのすべてのログが1か所に保存されるように、中央サーバーでrsyslogを設定したいのですが、私が抱えている問題は、 httpd」などを別のファイル、つまり「/var/log/httpd.log」に保存します。リモートサーバーにログを送信している間、ファイルは「/ var/log/ip-address of Host/httpd」のように保存する必要があります。 .log 'この2つの問題があります

  1. ログはプログラムごとに作成する必要があります
  2. ログはリモートサーバーに送信されますが、プログラムごとにホストごとに異なるディレクトリに保存する必要があります。

私の質問を明確にしたいと思います。助けてください。

プログラムに基づいてログを作成するには、クライアント側のようなものを使用する必要があると思います

 if $programname == 'httpd' and $syslogseverity <= '6' then /var/log/httpd.log

 if $programname == 'httpd' and $syslogseverity <= '6' then ~

私もこの質問を見つけましたが、それは私の問題を完全に解決しません

rsyslogの設定方法

6
Tarun

まず、クライアントからメッセージを受信できるようにrsyslogサーバーを構成する必要があります

サーバーのrsyslog構成ファイルを編集し、次の行が存在することを作成または確認します。

$ModLoad imuxsock 
$ModLoad imklog
# provides UDP syslog reception. For TCP, load imtcp. For TCP use InputServerRun 514
$ModLoad imudp
# This will save the log file is a separate directory for each client's IP
$template FILENAME,"/var/log/%fromhost-ip%/syslog.log"
#Create a rule for each application you need to filter, ie: httpd messages
$template HTTPD,"/var/log/%fromhost-ip%/httpd.log"

#Create a separate log rule for the specific application
if $programname == 'httpd' then ?HTTPD
&~

#Dump all remaining messages that do not match the filters created into one file
*.* ?FILENAME

その後、各クライアントに移動して、rsyslog.confファイルに次の行を追加する必要があります。

$ModLoad imuxsock
$ModLoad imklog
# Provides UDP forwarding. For TCP use @@server_ip
*.* @server_ip:514

そして、あなたは準備ができているはずです。クライアントがサーバーに送信するものはすべて、作成したルールでフィルタリングされ、サーバー側で作成したテンプレートに従って、各クライアントのIPアドレスフォルダーのファイルにメッセージが保存されます。

3
Bruno Pereira