logrotateは/ var / log / messagesを圧縮しません


11

時間が経つにつれて、私は、いくつかのログを気づいた/var/logようなauthkernそしてmessages巨大ななっていました。logrotateそれらのエントリを作成しました。

$ cat /etc/logrotate.d/auth.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/kern.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/messages 
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

また、compressオプションを有効にしています:

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

これauth.logkern.log、その他に効果的です。つまり、これらの各ログはgzip圧縮およびローテーションされ、最後の5日間のログが保持されます。/var/log/messagesただし、圧縮されていないため、5日を超えるログが記録されます。

$ ls /var/log/messages*
/var/log/messages           /var/log/messages-20100213
/var/log/messages-20100201  /var/log/messages-20100214
/var/log/messages-20100202  /var/log/messages-20100215
/var/log/messages-20100203  /var/log/messages-20100216
/var/log/messages-20100204  /var/log/messages-20100217
/var/log/messages-20100205  /var/log/messages-20100218
/var/log/messages-20100206  /var/log/messages-20100219
/var/log/messages-20100207  /var/log/messages-20100220
/var/log/messages-20100208  /var/log/messages-20100221
/var/log/messages-20100209  /var/log/messages-20100222
/var/log/messages-20100210  /var/log/messages-20100223
/var/log/messages-20100211  /var/log/messages-20100224
/var/log/messages-20100212

ServerFaultに関する別のlogrotate質問で説明されているように、ファイルごとにファイルの末尾が異なるため、古いログは(ほとんどの場合)削除されていません。これは、ファイルがgzip圧縮されていないためと思われます。

/var/log/messages他のすべてのログファイルと同様に、過去5日間のログを保持したまま圧縮およびローテーションするにはどうすればよいですか?私は何が欠けていますか?

編集1:最初のカップルの回答で要求された追加情報。

Gentoo Linuxを実行しています。私の/etc/logrotate.confファイル:

$ cat /etc/logrotate.conf 
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d これらのパッケージによってインストールされるmysql、rsyncなどの構成とともに、上記のカスタム構成ファイルが含まれます。

私のルートcrontabは空です:

$ sudo crontab -l
no crontab for root

/etc/cron.{daily,hourly,monthly,weekly}syslogに関連するすべてのものをすべてチェックし、回転するスクリプトとが/var/log/syslogあり/var/log/auth.logます。

次に、/var/log/messagesCarpeNoctemでlogrotate提案されているように、-only構成ファイルを作成しました。

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

次に、logrotate手動で実行しました:

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
        /bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

上記のログによると、ログlogrotateは/ bin / gzipで圧縮されていますが、圧縮されたメッセージファイルはにありません/var/log。また、古い回転ファイルのグロビングは失敗しました。

編集2:古いファイルにサフィックスをlogrotate追加した後に実行のデバッグ出力を追加します。.gz/var/log/message-*

以下から始めます。

$ ls /var/log/messages*
/var/log/messages              /var/log/messages-20100222.gz
/var/log/messages-20100219.gz  /var/log/messages-20100223.gz
/var/log/messages-20100220.gz  /var/log/messages-20100224.gz
/var/log/messages-20100221.gz

次にlogrotate、カスタム構成ファイルを使用して実行します。

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation

今回は、logrotateのglobは成功し、6番目の圧縮されたログファイルを見つけて、それを削除しようとします。ファイルは実際には削除されません。デバッグモードで実行しているためだと思います。

delaycompressオプションを有効にする/var/log/messagesと役立つかどうか興味があります。有効にし、翌朝に結果を確認します。


logrotate.confを投稿できますか?これまでに共有した抜粋には、これらのメッセージファイルの日付サフィックスについて説明するものはありません。Logrotateは、ローテーションされたログファイルの日付サフィックスのサポートには使用されませんでした。これは、他の何かが完全にそれらのファイルを作成していると信じさせます。/ etc / crontab、rootのcrontab、および/etc/cron.dailyを調べて、同じジョブを実行しようとしている別のスクリプトがあるかどうかを確認します。
jmtd

これに加えて、実行しているLinuxのディストリビューションを教えてください。Debian / Ubuntuには独自のログローテーションスクリプトがあり、これを使用してlogrotateを破壊することができます。
thepocketwade

返信いただきありがとうございます。Gentoo Linuxを実行しています。私のcrontabは/ var / log / messagesの管理を行っていません。詳細については、私の質問の新しい情報をご覧ください。
マイクマズール

回答:


8

問題delaycompress/var/log/messages解決するために構成セクションに追加します。

からman logrotate

   delaycompress
          Postpone  compression of the previous log file to the next rota‐
          tion cycle.  This only has effect when used in combination  with
          compress.   It  can  be used when some program cannot be told to
          close its logfile and thus might continue writing to the  previ‐
          ous log file for some time.

sysklogd私のsyslogデーモンは、ログファイルを閉じるように指示できないので、これが必要だと思います。

興味深いことに、私が持っていた元の構成(delaycompressディレクティブなし)は、すぐに出てきましたman logrotate(ただし、に変更weeklyしましたdaily)。

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

未知の不明なオプション「delalycompress」と言います#logrotate -v /etc/logrotate.d/apc_rtbinfo.conf設定ファイルの読み取り/etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.logの設定情報の読み取りエラー:/etc/logrotate.d/apc_rtbinfo.conf:7不明なオプション「delalycompress」 - 1つのログを処理ライン無視
アシシュKarpe

#cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {毎日missingok notifemptyサイズ2000M compress delalycompress sharedscripts copytruncate rotate 3}
アッシュカルプ

1
OK「delalycompress」のタイプミスを誤りがあったてしまった
アシシュKarpe

しかし今、問題はlog.1が2000M#du -sh /mnt/log/frengo/apc_rtbinfo.log* 0 /mnt/log/frengo/apc_rtbinfo.log 4.7G /mnt/log/frengo/apc_rtbinfo.logを超えていることです.1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151222 679M /mnt/log/frengo/apc_rtbinfo.log-20151225.gz 681M / mnt / log / frengo /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-20151228 70M /mnt/log/frengo/apc_rtbinfo.log.2。 gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
アッシュカルペ

5

この情報だけで言うのは難しいですが、何回私を救ったかをお話しできます。

Logrotateには、stdoutに至る各ステップの再生ごとの出力を行うデバッグオプションがあります。この場合、次のことができます。

logrotate -d /etc/logrotate.conf

出力は、何が起こっているかを正確に示します。また、デバッグ出力を絞り込む場合は、次の操作を実行できます

logrotate -d /etc/logrotate.d/messages

ファイルを直接指定することはメインの設定オプションを読み取らないことを意味するため、一時的にそのファイルブロックにメインのlogrotate.confオプションを配置することもできます。個々のファイルを指定すると、-f(force)オプションをdebugオプションと組み合わせて使用して、実行中のメッセージファイルの実際のローテーションを確認することもできます。


あなたが提案したように手動でlogrotateを実行しようとしましたが、ログを圧縮していると表示されますが、圧縮されたログはどこにも見つかりません。詳細については、上記の私の質問をご覧ください。
マイクマズール

1
.gzで終わるように5つの最も古いメッセージファイルの名前を変更し、logrotateが最も古いものを削除するかどうかを確認します。一致する場合、gzipが正しく実行されていないためにグロビングが失敗していることがわかります。これにより、少なくとも圧縮の欠如が回転の欠如のせいであることを確認できます。
CarpeNoctem

完了、上記の質問に詳細が追加されました。ライブ/var/log/messagesファイルに競合の問題があるかどうか、またこのdelaycompressオプションが役立つかどうか興味があります。
マイクマズール

私が見つけた別の興味深い点。-dオプションを有効にすると、logrotateコマンドはログファイルに影響しません。詳細については、マニュアルを確認してください。-d, --debug Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
CBR 14

1

logrotate.confでこの設定を試すことを検討してください。

dateformat .%Y%m%d

既存のメッセージファイルの名前を変更して、ダッシュの代わりにドットを使用します。その後、logrotateを再試行してください。

以下の手がかりは、ダッシュが何らかの形でオプションとして解釈されている場合、グロブを失敗させる可能性があると私を信じさせました(どこで-これを修正します)。それは理にかなっていないが、それはちょうど可能かもしれません。

dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed

これが根本的な原因だとは思いません。ダッシュ付きの現在の日付形式は、他のログファイルでも問題なく機能します。これらのログファイルの違い/var/log/messagesは、ローテーションされた/var/log/messagesファイルが圧縮されないことです。
マイクマズール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.