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
...
これどうやってするの?
これは、動的ファイルテンプレートを使用して実行できます。 property replacor を使用して、%timestamp%
プロパティの一部、特にオプションdate-day
とdate-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
ログ行がスニペットが示唆するように整形式であると仮定すると、これは出発点になります。
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 >>
に変更できます。