Memo/Linux/logrotate

http://dexlab.net/pukiwiki/index.php?Memo%2FLinux%2Flogrotate
 


logrotate

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

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

デバッグ

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

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

  • logrotate3.8.0から「su」オプションが追加され、ログディレクトリの権限チェックが厳しくなった。
    • logrotate/ChangeLog.md at master · logrotate/logrotate
    • 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
      1. LANG=C ll /var/log/ | grep zabbix
      2. drwxrwxr-x  2 root   zabbix     30 Dec 11 20:55 zabbix
    • 「/etc/logrotate.d/zabbix-agent」に「su」オプションが必須になる
      1. /var/log/zabbix/zabbix_agentd.log {
      2.         missingok
      3.         notifempty
      4.         compress
      5.         create 0664 zabbix zabbix
      6.         su zabbix zabbix
      7. }

時間毎に実行する

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

logrotateが動作しない場合

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

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

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

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

  • CentOS5.xでは不正ログインを記録する /var/log/btmp はログローテーションされておらず、数GBになる場合がある。
  1. cat >> /etc/logrotate.conf << EOS
  2.  
  3. /var/log/btmp {
  4.     missingok
  5.     monthly
  6.     minsize 1M
  7.     create 0600 root utmp
  8.     rotate 1
  9.     compress
  10. }
  11. EOS

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-26 (火) 12:42:59 (213d)