web-dev-qa-db-ja.com

Syslogイベントを取り込むときに、ログを月次、日次、および時間ごとのフォルダーに分割するにはどうすればよいですか?

Rsyslogを介してログファイルを取り込みます。設定は次のようになります。

root@rhel:/etc/rsyslog.d# head mail_prod_logs.conf
if $fromhost-ip=="10.10.10.10" and $programname=="AMP_Logs" then -/var/log/mail_logs/amp.log

私のログはすべて/var/log/mail_logs/amp.logフォルダーに保存されます。

Oct 18 13:29:28 server.com AMP_Logs: Info: Begin Logfile
Oct 18 14:29:28 server.com AMP_Logs: Info: Version: 12.1.0-000 SN: .....
Oct 18 14:29:28 server.com AMP_Logs: Info: Time offset from UTC: -14400 seconds
Oct 18 15:29:23 server.com AMP_Logs: Info: Response received for.....
Oct 18 15:29:23 server.com AMP_Logs: Info: File reputation query.....
Oct 19 13:29:23 server.com AMP_Logs: Info: Response received for fil....
Oct 19 13:29:58 server.com AMP_Logs: Info: File reputation query ....
Oct 19 13:29:58 server.com AMP_Logs: Info: File reputation query ....

ログのdatetime部分を使用して、mail_prod_logs.confを編集することにより、データが受信されている間、月内の日次フォルダー内の時間別フォルダーにこれらを配置したいと思います。

したがって、次のようになります。

/var/log/mail_logs/Sep/30/23.log
/var/log/mail_logs/Oct/01/00.log
/var/log/mail_logs/Oct/01/01.log
/var/log/mail_logs/Oct/01/02.log
...

これどうやってするの?

2
sectechguy

これは、動的ファイルテンプレートを使用して実行できます。 property replacor を使用して、%timestamp%プロパティの一部、特にオプションdate-daydate-hourおよびdate-rfc3164の文字1〜3を選択します(これは「Oct909:47:08」のような文字列です)。通常、例では、テンプレートはDynFileと呼ばれます。

$template DynFile,"/var/log/mail_logs/%timestamp:1:3:date-rfc3164%/%timestamp:::date-day%/%timestamp:::date-hour%.log"

テンプレートを使用するには、...then -/var/log/mail_logs/amp.log...then -?DynFileに置き換えます

扱いやすくするために、3文字の月(1月、2月、...)を2桁の月に置き換えることを検討する場合は、代わりに使用してください。

$template DynFile,"/var/log/mail_logs/%timestamp:::date-month%/%timestamp:::date-day%/%timestamp:::date-hour%.log
1
meuh

ログ行がスニペットが示唆するように整形式であると仮定すると、これは出発点になります。

awk '{
      dir=$1 "/" $2; log_file=dir "/" substr($3, 1, 2) ".log"
      if (!exists[dir]++) {system("mkdir -p " dir)}; 
      print > log_file
}' amp.log

これは/var/log/mail_logs/で実行します。

外部のsystemコマンドへのmkdir呼び出しは、日付固有のディレクトリが存在しない場合は作成します。 -pを渡すと、必要に応じて親が作成されます(したがって、mkdir -p /Oct/01が10月を初めて使用するときに、ディレクトリOctが作成されます)。また、-pは、ディレクトリがすでに存在する場合にmkdirがエラーを報告しないようにします。

printの呼び出しは、ログ時間コンポーネントから作成された名前のファイルにログ行を書き込みます。新しいログファイルはそれぞれ、コマンドの存続期間中に最初に書き込まれ、追加されたときに作成されます。

前回のawk実行からの日時ベースのログファイルが上書きされるのではなく追加される場合は、print >print >>に変更できます。

1
iruvar