ログローテート設定

Posted on 2018-11-29 in zakki

logrotate をしようと思っていただけなのに。

そもそもの

使い方。

  1. cron で定期的に動作

普段はこっち。意識することなく自動でやってもらう。

  • /etc/cron.daily/logrotate
(中略)
/usr/sbin/logrotate /etc/logrotate.conf

cron.daily ディレクトリに logrotate シェルスクリプトが作成されている。/etc/crontab に daily の定義もされているので定期的に動作する。

  1. コマンドで1回のみ動作

確認用。コマンドイメージは↑の logrotate シェルスクリプトをそのまま真似すれば事なきこと。

/usr/sbin/logrotate /etc/logrotate.conf

  • -d:dry-run
  • -f:force
  • -v:display message

logrotate.conf と logrotate.d

  • /etc/logrotate.conf
(中略)
include /etc/logrotate.d
(中略)

とかある。 /etc/logrotatem.d/ 配下に logrotate 用ファイルを置くと、logrotate.conf を読み込んだとき自動でそちらも読み込んでくれる。個別の logrotate 仕込む場合はファイル作るのがセオリーなのかな。

んで対象は

ここのリバースプロキシログです。コンテナで動作している nginx のログです。ログは docker-composevolume でマウントしています。なので、コンテナの中ではなくて外でログローテートを仕掛けます。

設定ファイル

  • /etc/logrotate.d/nginx-container
/home/ubuntu/docker-test/logs/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 0640 ubuntu ubuntu
        sharedscripts
        su root root
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                sudo docker exec (container-name) /bin/bash -c "kill -HUP `cat /home/ubuntu/docker-test/run/nginx.pid`"
        endscript
}

(container-name) は docker ps あたりでちゃっと調べてください。

溜息がいっぱい出たところ

  • access.log.1 にログが記録され続ける

検索してみるとあるあるらしく。あるあるの割りに、色々試しても上手くいかなかったんで「はぁ…」と思いつつやっていました。

最初、この記事のように rotate でやろうとしたけど結局上手くいかず。

少し粘ったものの駄目で、仕方ないと色々見てみたところそれを防止する設定であるところの kill うんたらは結構常套手段のようで公式でもそう言っているぐらいなので、そう書くのもベターなのかなって。

  • nginx.pid が参照できない

最初、nginx.pid はコンテナ内のファイルを参照していました。/run/nginx.pid みたいな。

だけどこれを、` で囲んでコマンド列として使おうとすると上手くいかない。。異様にうまくいかないので、 volume でマウントして解決させました。正直やりたくないけど、まあ思いつかなかったから仕方ない。まあこれが上手くいくってことは、docker ホスト側を参照してるってことなんだろうね。docker exec で docker ゲスト側にコマンド列が渡されていると思っていたんですけどようわからん。こうやってようわからんボリュームマウントが増えてごちゃごちゃするのかな。。つらい。

無事

ログローテートされたのでよかった。

しかしアクセスログ見てると面白いですね。wp-adminphpmyadmin の数うちゃ当たる感じとか。