web-dev-qa-db-ja.com

Centos / Linux設定logrotateですべてのログの最大ファイルサイズ

logrotateを使用し、毎日実行しています...ログが大幅に増大し(ギグベイトを参照)、サーバーを強制終了する状況が発生しました。そこで、ログに最大ファイルサイズを設定したいと思います....

これをlogrotate.confに追加することはできますか?

サイズ50M

そして、それはすべてのログファイルに適用されますか?または、これをログごとに設定する必要がありますか?

または他のアドバイスはありますか?

(ps。通知を受けたい場合、ログが説明のように大きくなり、私たちがやりたいことは理想的ではないことを理解しています-しかし、使用可能なスペースがないため、もうログオンできないよりはましです)

ありがとう、ショーン

57
snh_nl

ローテーションをトリガーするログファイルのサイズを指定します。たとえば、size 50Mは、ファイルのサイズが50MB以上になるとログのローテーションをトリガーします。メガバイトにはサフィックスM、キロバイトにはk、ギガバイトにはGを使用できます。接尾辞が使用されていない場合、バイトを意味します。最後に例を確認できます。 sizemaxsize、およびminsizeの3つのディレクティブが使用可能です。 manpage によると:

minsize size
              Log  files  are  rotated when they grow bigger than size bytes,
              but not before the additionally specified time interval (daily,
              weekly,  monthly, or yearly).  The related size option is simi-
              lar except that it is mutually exclusive with the time interval
              options,  and  it causes log files to be rotated without regard
              for the last rotation time.  When minsize  is  used,  both  the
              size and timestamp of a log file are considered.

size size
              Log files are rotated only if they grow bigger then size bytes.
              If size is followed by k, the size is assumed to  be  in  kilo-
              bytes.  If the M is used, the size is in megabytes, and if G is
              used, the size is in gigabytes. So size 100,  size  100k,  size
              100M and size 100G are all valid.
maxsize size
              Log files are rotated when they grow bigger than size bytes even before
              the additionally specified time interval (daily, weekly, monthly, 
              or yearly).  The related size option is  similar  except  that  it 
              is mutually exclusive with the time interval options, and it causes
              log files to be rotated without regard for the last rotation time.  
              When maxsize is used, both the size and timestamp of a log file are                  
              considered.

以下に例を示します。

"/var/log/httpd/access.log" /var/log/httpd/error.log {
           rotate 5
           mail [email protected]
           size 100k
           sharedscripts
           postrotate
               /usr/bin/killall -HUP httpd
           endscript
       }

/var/log/httpd/access.log/var/log/httpd/error.logの両方のファイルの説明を次に示します。サイズが100kを超えるたびにローテーションされ、古いログファイルは削除されるのではなく、5回ローテーションされた後に[email protected]にメール送信(非圧縮)されます。 sharedscriptsは、postrotateスクリプトが(古いログが圧縮された後に)1回だけ実行され、ローテーションされる各ログに対して1回ではないことを意味します。このセクションの最初の最初のファイル名を二重引用符で囲むと、logrotateが名前にスペースを含むログをローテーションできることに注意してください。 ,および\文字がサポートされている通常のシェルの引用規則が適用されます。

66
Zeeshan

Zeeshanが述べたように、logrotateオプションsizeminsizemaxsizeはローテーションのトリガーです。

より良く説明するために。 logrotateは何度でも実行できますが、ファイルサイズに達するか、適切な時間が経過するなどのしきい値に到達しない限り、ログはローテーションされません。

サイズオプションは、ローテーションされたログも指定されたサイズであることを保証しません。それらを指定されたサイズに近づけるには、logrotateプログラムを十分頻繁に呼び出す必要があります。これは重要です。

非常に急速に蓄積するログファイル(1日に数百MBなど)の場合、非常に大きくしたくない限り、logrotateを頻繁に呼び出す必要があります!これは重要です。

したがって、ディスクが数ギガバイトのログファイルでいっぱいになるのを防ぐには、logrotateが十分に頻繁に呼び出されるようにする必要があります。そうしないと、ログローテーションが希望どおりに機能しません。

ubuntuでは、スクリプト/etc/cron.daily/logrotateを/etc/cron.hourly/logrotateに移動することで、時間単位のローテーションに簡単に切り替えることができます

または追加

*/5 * * * * /etc/cron.daily/logrotate 

/ etc/crontabファイルに。 5分ごとに実行します。

sizeオプションは、毎日、毎週、毎月の時間オプションを無視します。ただし、minsizeとmaxsizeはそれを考慮に入れます。

マニュアルページは少し混乱しています。これが私の説明です。

minsizeは、ファイルが適切なサイズに達し、設定された期間が経過した場合にのみローテーションします。 e.g. minsize 50MB + daily毎日の時間が経過する前にファイルが50MBに達した場合、翌日まで成長し続けます。

maxsizeは、ログが設定サイズに達するか、適切な時間が経過するとローテーションします。 e.g.最大サイズ50MB + 1日。ファイルが50MBで、まだ翌日ではない場合、ログはローテーションされます。ファイルが20MBのみで、翌日にロールオーバーすると、ファイルはローテーションされます。

sizeは、ログ>サイズのときに回転します。毎時/毎日/毎週/毎月が指定されているかどうかに関係なく。 =したがって、サイズが100Mの場合、ログファイルが100Mを超える場合、この条件がtrueのときにlogrotateを実行するとログがローテーションされることを意味します。ローテーションされると、メインログは0になり、その後の実行では何も実行されません。

そのため、opの場合。特別に最大50MBの場合、次のようなものを使用します。

/var/log/logpath/*.log {
    maxsize 50M
    hourly
    missingok
    rotate 8
    compress
    notifempty
    nocreate
}

つまり、最大8時間のログを作成します。そして、それぞれ50MB以下で8つあります。彼は毎日数ギガバイトを取得していると言っており、かなり一定の速度で蓄積すると仮定しているため、maxsizeを使用すると、各ファイルの最大値に近い値になります。したがって、それぞれ50 MBに近い可能性があります。彼らが構築するボリュームを考えると、彼はlogrotateが目標サイズを満たすのに十分な頻度で実行されることを保証する必要があるでしょう。

そこに1時間ごとに配置しているため、最低1時間ごとにlogrotateを実行する必要があります。しかし、それらは1日に2ギガバイトに達するので、50MBが必要です...毎時83MBの一定レートを想定しています。したがって、maxsizeを50に設定しても、logrotateを1時間ごとに実行すると、83MBのログが記録されることになります。そのため、このインスタンスでは、実行を30分以下に設定するだけで十分です。

Logrotateが30分ごとに実行されるようにします。

*/30 * * * * /etc/cron.daily/logrotate 
82
Matt