$30 off During Our Annual Pro Sale. View Details »

how logrotate works

how logrotate works

tokuhirom

April 11, 2020
Tweet

Other Decks in Technology

Transcript

  1. logrotate の仕組み

    View Slide

  2. Logrotate とは?
    • https://linux.die.net/man/8/logrotate
    • https://github.com/logrotate/logrotate
    • ログファイルをローテーションするプログラム
    • デーモンではなく cron で実行されている。

    View Slide

  3. 本スライドでは以下のような設定を想定
    /var/log/nginx/*log {
    daily # 一日一回 rotate(hourly, monthly, yearly なども指定可能)
    missingok # 元ファイルがなくてもエラーにしない
    rotate 1 # 1世代を保持
    compress # 古いファイルを圧縮する
    delaycompress # mv した回の次の rotate のタイミングで圧縮する
    notifempty # ファイルが空だったら rotate しない
    create 640 www www # www ユーザーで、file mode 640 で新規ファイルを作成
    sharedscripts # パターンにマッチするファイルが複数個あっても一回しか
    # postrotate が実行されないようにする
    postrotate # rotate 後に、以下のスクリプトを実行する
    [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
    }
    /etc/logrotate.d/nginx 等に配置。

    View Slide

  4. access.log-20200408
    access.log-20200407.gz
    Nginx が access.log にログを書いている。
    access.log
    nginx

    View Slide

  5. access.log-20200409
    logrotate
    access.log
    access.log-20200408
    access.log-20200407.gz
    logrotate がファイルをmv する。
    nginx はファイルを開いたままなので古いファイルに書き続ける
    nginx
    mv access.log access.log-20200409

    View Slide

  6. access.log-20200409
    logrotate
    access.log
    access.log-20200408
    access.log-20200407.gz
    `create 640 www www` が指定されているので新規に access.log を作成する。
    nginx
    touch access.log

    View Slide

  7. nginx
    access.log-20200409
    logrotate
    kill –USR1 $(cat /var/run/nginx.pid)
    access.log
    access.log-20200408
    access.log-20200407.gz
    logrotate が nginx にシグナル SIGUSR1 を送信する。
    nginx は “access.log” を開き直す。以後は新しいファイルにログが書き込まれ
    る。

    View Slide

  8. nginx
    access.log-20200409
    logrotate
    gzip -9 access.log-20200408
    access.log
    access.log-20200408.gz
    access.log-20200407.gz
    logrotate は古いファイルを圧縮する。

    View Slide

  9. nginx
    access.log-20200409
    logrotate
    rm access.log-20200407.gz
    access.log
    access.log-20200408.gz
    logrotate はめっちゃ古いファイルを自動削除する。
    access.log-20200407.gz

    View Slide