Memo/Linux/logrotate

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/logrotate
 


logrotate

  • sizeオプションを付けるとログがそのサイズ以上になった時に強制的に毎日rotateされる。
  • rotateしたファイルに日付を付ける
    • logrotate-3.7.3以降、dateextを付ける。"yum.log-20130101.gz" になる
      /var/log/yum.log {
          missingok
          notifempty
          yearly
          create 0600 root root
          compress
          dateext
      }
    • それ以外
      /var/log/yum.log {
          missingok
          notifempty
          yearly
          create 0600 root root
          compress
          lastaction
              EXT=`/bin/date +%Y%m%d`
              /bin/mv yum.1.gz yum.log-${EXT}.gz 
          endscript
      }

error: error opening /var/log/messages.1: No such file or directory

  • 環境
    • CentOS 7.x 64bit
    • logrotate-3.8.6-7.el7_2.x86_64
    • dateextを後から追加した
  • エラー
    sudo logrotate -dv /etc/logrotate.d/syslog
    ...
    removing old log /var/log/messages.1
    error: error opening /var/log/messages.1: No such file or directory
  • 設定に missingok があっても削除対象のファイルが無い場合は上記のエラーが出た
  • 解決
    • /var/lib/logrotate.status の該当行を消す。(古いログが残り続けるので注意)

デバッグ

  • ログファイルは変更されない
    logrotate -dv /etc/logrotate.d/lsyncd
  • 一度実行されると、以下ファイルに日付が記録されるので、もう一度実行したい場合下記ファイルの日付を書き換える
    vi /var/lib/logrotate.status

3.8.0以上の「su」オプション

  • logrotate3.8.0から「su」オプションが追加され、ログディレクトリの権限チェックが厳しくなった。
    • added "su" option
    • CentOS7のlogrotateは3.8.6なので影響を受ける
    • ログディレクトリの権限が「rooかつ、o+w(0777)」「root以外でg+w(0775)」の場合、「because parent directory has insecure permissions」というエラーメッセージと共にスキップされる
  • 例:zabbix-agent
    • 「/var/log/zabbix/」が以下の場合、groupが"zabbix", パーミッションが0775
      LANG=C ll /var/log/ | grep zabbix
      drwxrwxr-x  2 root   zabbix     30 Dec 11 20:55 zabbix
    • 「/etc/logrotate.d/zabbix-agent」に「su」オプションが必須になる
      /var/log/zabbix/zabbix_agentd.log {
              missingok
              notifempty
              compress
              create 0664 zabbix zabbix
              su zabbix zabbix
      }

時間毎に実行する

  • logrotate 3.8.5以降で対応
    • hourly オプションが指定可能
    • ファイル名の日付も dateformat で変更可能

logrotateが動作しない場合

  • /var/log/messages に以下のエラーが記録されていた
    sudo zgrep logrotate /var/log/messages
    03:10:00 <hostname> logrotate: ALERT exited abnormally with [1]
    • logrotate -dvでチェックしてみる
      sudo logrotate -vd /etc/logrotate.conf |& grep ^error
      ...
      error: line 100 too long in state file /var/lib/logrotate.status
    • /var/lib/logrotate.status が壊れているようなので修復。今回のケースは最終行が途切れていたため、最終行のみ削除した
      sudo vim /var/lib/logrotate.status
    • /var/log/glusterfs/が空の場合に出る。
      error: glusterfs:23 glob failed for /var/log/glusterfs/bricks/*.log: そのようなファイルやディレクトリはありません
      error: stat of /var/log/glusterfs/*.log failed: そのようなファイルやディレクトリはありません

ロックされているログのローテート

  • ログを空にする場合
    echo -n > /var/log/example.log
  • logrotate @IT:logrotateの設定ファイルで指定できる主なコマンド
    • /etc/logrotate.d/nginx nginxの場合、-USR1シグナルでログファイルの再オープンをしてくれる
      /var/log/nginx/*.log {
          weekly
          rotate 4
          missingok
          compress
          notifempty
          sharedscripts
          postrotate
              [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
          endscript
      }
    • /etc/logrotate.d/example copytruncate が使えるがコピー > 空にするのわずかな間のログは消える可能性がある
      /var/log/example.log {
          copytruncate
          missingok
          compress
          notifempty
      }
  • cronolog 単体で使える。削除は別途行う必要がある
    yum install cronolog --enablerepo=epel
    
    vim /etc/httpd/conf/httpd.conf
    ----
    CustomLog "|/usr/sbin/cronolog /var/logs/logfile.%Y%m%d" common
    ----
  • rotatelogs を通してパイプに書く。apache依存。削除は別途行う必要がある
    yum install httpd
    
    vim /etc/httpd/conf/httpd.conf
    ----
    CustomLog "|/usr/sbin/rotatelogs -l /var/logs/logfile.%Y%m%d 86400" combined
    ----

btmpログをローテーションさせる

  • CentOS5.xでは不正ログインを記録する /var/log/btmp はログローテーションされておらず、数GBになる場合がある。
cat >> /etc/logrotate.conf << EOS

/var/log/btmp {
    missingok
    monthly
    minsize 1M
    create 0600 root utmp
    rotate 1
    compress
}
EOS

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (5d)