ログが特定のサイズを超えない限り、間隔に基づいてログをローテーションする方法は?


20

logrotateのmanページから:

minsize size
ログファイルは、sizeバイトより大きくなるとローテーションされますが、追加で指定された時間間隔(毎日、毎週、毎月、または毎年)の前ではありません。関連するサイズオプションは似ていますが、時間間隔オプションと相互に排他的であり、最後のローテーション時間に関係なくログファイルがローテーションされる点が異なります。minsizeを使用すると、ログファイルのサイズとタイムスタンプの両方が考慮されます。

size size
ログファイルは、sizeバイトより大きくなるとローテーションされます。サイズの後にkが続く場合、サイズはキロバイト単位であると想定されます。Mが使用されている場合、サイズはメガバイト単位であり、Gが使用されている場合、サイズはギガバイト単位です。したがって、サイズ100、サイズ100k、サイズ100Mおよびサイズ100Gはすべて有効です。

私はセットのサイズを5Mの間隔など毎週のログは週単位で回転になるだろうと、ログのサイズが5Mを超えた場合、追加の回転が起こるだろうとの考え方。しかし、発生するのは、ログが5Mを超えない限りローテーションされないということです。これは、minsizeが行うべきことのようです。

マニュアルを誤って解釈していますか?毎週、および5Mを超える場合にログをローテーションするにはどうすればよいですか?

編集:

次の情報が関連するかどうかはわかりませんが、補足するだけです。

rsyslogを使用して、メッセージ、セキュア、cron、maillog、bootのメインロギングを実行しています。以下は、サイズと間隔が上記のように設定されている最後から2番目のログのローテーション日付とファイルサイズです。

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

ご覧のように、メッセージのみがローテーションされます。

EDIT2:

で確認する必要がありman logrotateます。彼らは実際にmaxsizeオプションでそれをアップグレードしました。これは私が探しているものでなければなりません:

maxsize size
ログファイルは、追加で指定された時間間隔(毎日、毎週、毎月、または毎年)の前でもsizeバイトより大きくなるとローテーションされます。関連するサイズオプションは似ていますが、時間間隔オプションと相互に排他的であり、最後のローテーション時間に関係なくログファイルがローテーションされる点が異なります。maxsizeを使用すると、ログファイルのサイズとタイムスタンプの両方が考慮されます。

回答:


24

ここではいくつかの質問に答えています: logrotate daily and size?

通常logrotate、1日に1回しか実行されないため、サイズ制限は正確に守られません。logrotateのステータスファイルは(おそらく/var/lib/logrotate.status)日付のみを保存し(時間ではない)、より頻繁に使用することを目的としていないため、ファイルをより頻繁にローテーションすることはできません(更新:バージョン3.85は、1時間ごとのサポートを追加し、完全なタイムスタンプを状態ファイルに保存します)

どちらsyslogdを使用しているかはわかりませんが、rsyslogsyslog-ngは自己管理のサイズベースの回転をサポートしているため、サイズlogrotateごとに回転させ、毎週回転させる必要があります(ただし、同時ファイルローテーションが誤って何かを削除しないようにするためのファイルの命名)。

もう1つのオプションは、Apacheと同様にパイプログを使用することです。実際、Apache-2.4 rotatelogs はこの機能を完全にサポートしています(以前のバージョンでは、サイズまたは時間のみを個別にサポートしていました)。ログの生成元はわかりませんが、パイプまたはfifoにログを記録し、rotatelogsサポートされている場合はを使用できる場合があります。

logrotate<= v3.8.0サポートされる3つのシナリオは以下のとおりです。

  1. サイズ は、経過時間に関係なく、最大で1日1回、サイズごとにローテーションします
  2. timeperiod は、サイズに関係なく、timeperiodによって無条件に回転します
  3. ログファイルのサイズがminsizeを超える場合は、minsizetimeperiod 一般的な使用法は「最小サイズ1」です。これは、0バイトのログがローテーションされないことを意味し、混乱を最小限に抑えます。

logrotate-3.8.1 追加:

  1. maxsizetimeperiodは 、いずれかのサイズがmaxsizeを超えた場合、または経過時間の後に回転します。logrotateこの場合、デフォルトより1日1回多く実行する必要があります。

logrotate-3.8.5 追加:

  1. 1時間ごとにサポートし、状態ファイルに完全なタイムスタンプを保存します。これにはlogrotate(少なくとも)1時間ごとに実行する必要があります。

リンクをありがとう、私の更新を参照してください。いくつかのスクリプトが必要なようです?minsizeはあまり役に立たないようですが、なぜmaxsizeの代わりにminsizeを持っているのでしょうか。
質問オーバーフロー

1
そう、maxsizeオプションが利用可能になりました。ケースクローズ:)
質問オーバーフロー

私はあなたの更新を読む前にドキュメントでそれを見つけました...答えが拡大しました。THX。
mr.spuratic

1
> logrotateのステータスファイル(/var/lib/logrotate.statusの場合があります)は日付のみを保存します(時刻は保存しません)。このステートメントは古くなっている可能性があります。logrotateステータスファイルをチェックしたところ、2番目の解像度のタイムスタンプが含まれていました: "/var/log/kern.log" 2018-3-12-1:8:16
hyperair
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.