Linux は毎日修正ログを収集します。
/var/log/
毎日ディレクトリからログファイルを収集したいと思います。
私のスクリプトは、ディレクトリ内のすべてのファイルを圧縮して個別に保存します。しかし、問題は、毎日すべてのログファイルを圧縮してファイルサイズを増やすことです。
それでは、毎日修正されたファイルのみ(修正されたコンテンツのみ)圧縮する方法は何ですか?
特定の時点以降にファイルの変更内容を取得する方法。つまり、初めてログ全体を収集できます。
翌日から、その日のログのみを収集する必要があります。
翌日....
....
答え1
要件を満たす場合、簡単なアプローチは、毎日交換される特定のログファイルを持つことです。まず、/etc/(r)syslog.conf
ロギング後に何かを削除するルールがある場合は、おそらく上部の近くに追加します。
*.* -/var/log/daily.log
これは受け取るみんなつまり、別のログ内のすべての内容がこのログに保存されます。
その後、cronを介して実行できるスクリプトが必要です。使用できますが、logrotate
この場合はあまり意味がありません。
#!/bin/sh
gzip /var/log/daily.log
# Do whatever with the gzipped file
touch /var/log/daily.log
kill -s HUP `pidof syslogd` # see below
最後のステップは、syslogdを再起動して再度開くようにすることです/var/log/daily.log
。そうでなければ、後で何も見ることができません。 rsyslogを使用している場合は、代わりにrsyslogを使用してくださいpidof rsyslogd
。pidof
どれを先にテストしてみるか。
最後に/etc/crontab
:
0 0 * * * root /path/to/rotationscript
私は毎日真夜中にこれをします。
答え2
使用を検討しましたか?ログの回転?
Logrotateは、スケジュールされた間隔でログファイルを回転させるユーティリティです。インストールが完了したら、以下のセクションを使用して設定します。
/var/log/*.log /var/log/auth /var/log/messages {
daily
rotate 5
copytruncate
compress
dateext
}
パッケージマネージャはインストール時にすでに追加しておく必要があるため、/etc/cron.daily
他の作業を行う必要はありません。
これにより、次のログが生成されます/var/log/auth.20140420.gz
。それらを収集したい場合は、ファイルを検索するだけです.gz
。
重要事項:
私の例では、意図的にこれをやっていません/var/log/*
。もともとの質問では、すべてのログを回転したいと言っていましたが/var/log
。これは、一部のコンテンツ/var/log
(たとえば、utmp
およびwtmp
)が通常のログファイルではないため、循環してはいけません。
ログを回転させる方法は2つあります。ログの名前を変更してから、作成したプログラムにログファイルを再度開くように指示するか、ログファイルの内容を新しい名前にコピーしてからソースファイルを切り取ることができます。
移動方法は優れていますが、一部のアプリケーションではログを再度開くように指示する方法がないため、コピー/切り取りの方が安全です。
このcopytruncate
オプションはこの動作を制御します。移動方法を使用するには、その方法を削除してセクションに入れますpostrotate
(マンページを参照)。