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
...
どうすればいいですか?
答え1
動的ファイルテンプレートを使用してこれを行うことができます。使う属性チェンジャー%timestamp%
属性部分、特にオプションdate-day
とdate-hour
文字1〜3 date-rfc3164
(「Oct 9 09: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
答え2
ログ行がコードスニペットに示すようにフォーマットされていると仮定すると、次のようになります。
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
必要に応じて親ディレクトリが作成されます(したがって、ディレクトリは10月が最初に起動したときに作成されますOct
)。また、mkdir -p /Oct/01
ディレクトリがすでに存在する場合は、エラーが報告されていないことを-p
確認してください。mkdir
print
ログ時間コンポーネントに基づいて名前が書き込まれるファイルにログ行を書き込むために呼び出されます。各新しいログファイルは、コマンドの存続期間中に最初に記録され、追加されたときに生成されます。
上書きするのではなく、最後の実行の日付/時刻ベースのログファイルを追加するには、に変更できますprint >
。print >>
awk