web-dev-qa-db-ja.com

Nginxログローテーションが正しく機能していないようです

/varとしてマウントされたパーティションがいっぱいになったことがわかりました。ディスク使用量を追跡したところ、Nginxログファイルが巨大で、正しいファイルに書き込まれていないように見えました。

ls -ltr/var/log/nginxはこれを私に与えます:

total 17170060
-rw-r----- 1 nobody adm   112315467 Apr 28  2015 access.log.14.gz
-rw-r----- 1 nobody adm    70554720 Apr 29  2015 access.log.13.gz
-rw-r----- 1 nobody adm    68145066 Apr 30  2015 access.log.12.gz
-rw-r----- 1 nobody adm    77951766 Dec  7 06:25 access.log.10.gz
-rw-r----- 1 nobody adm    81764378 Dec  8 06:25 access.log.9.gz
-rw-r----- 1 nobody adm    75397419 Dec  9 06:25 access.log.8.gz
-rw-r----- 1 nobody adm    68738862 Dec 10 06:25 access.log.7.gz
-rw-r----- 1 nobody adm    73802613 Dec 11 06:25 access.log.6.gz
-rw-r----- 1 nobody adm    66144521 Dec 12 06:25 access.log.5.gz
-rw-r----- 1 nobody adm    65385900 Dec 13 06:25 access.log.4.gz
-rw-r----- 1 nobody adm    68117105 Dec 14 06:25 access.log.3.gz
-rw-r----- 1 nobody adm    69441057 Dec 15 06:25 access.log.2.gz
-rw-r----- 1 nobody adm           0 Jan 20 06:25 access.log
-rw-r----- 1 nobody adm     7762196 Feb  1 09:45 error.log
-rw-r----- 1 nobody adm 16676558550 Feb  1 10:24 access.log.1

ご覧のとおり、access.log.1は書き込まれるファイルです。

これは私の/etc/logrotate.d/nginxスクリプトです。

/var/log/nginx/*.log {
        daily
        size 1G
        missingok
        rotate 10
        compress
        delaycompress
        notifempty
        create 0640 nobody adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

/etc/nginx/nginx.confの関連行:

pid /var/run/nginx.pid;
...snip...
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

[〜#〜]更新[〜#〜]

今朝チェックしたところ、同じ問題が発生していた。コマンドラインからservice nginx reloadを実行すると、古いファイルが解放され、新しいファイルへの書き込みが開始されました。 この投稿 と私の観察に基づいて、私は置き換えました

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid\`

service nginx reload >/dev/null 2>&1

/etc/logrotate.d/nginxスクリプト内。

これが成功した場合は報告します。

6
Sonny

1日目

OPで述べたように/etc/logrotate.d/nginxスクリプトを変更した後...

/var/log/nginx/*.log {
        daily
        size 1G
        missingok
        rotate 10
        compress
        delaycompress
        notifempty
        create 0640 nobody adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                service nginx reload >/dev/null 2>&1
        endscript
}

...access.logaccess.log.1に適切に名前が変更され、リリースされた後、新しいaccess.logへの書き込みを開始しました。ただし、gzip access.log.1ではありませんでした。

2日目

access.log.1ファイルはaccess.log.2になり、gzipされました。 delaycompressディレクティブは、ログファイルを翌日まで非圧縮のままにするものだと思います。 ls -ltrは私にこの出力を与えます:

total 3344744
-rw-r----- 1 nobody adm   68738862 Dec 10 06:25 access.log.10.gz
-rw-r----- 1 nobody adm   73802613 Dec 11 06:25 access.log.9.gz
-rw-r----- 1 nobody adm   66144521 Dec 12 06:25 access.log.8.gz
-rw-r----- 1 nobody adm   65385900 Dec 13 06:25 access.log.7.gz
-rw-r----- 1 nobody adm   68117105 Dec 14 06:25 access.log.6.gz
-rw-r----- 1 nobody adm   69441057 Dec 15 06:25 access.log.5.gz
-rw-r----- 1 nobody adm  748290175 Feb  1 10:50 access.log.4.gz
-rw-r----- 1 nobody adm   58575628 Feb  2 08:32 access.log.3.gz
-rw-r----- 1 nobody adm   85585414 Feb  3 06:25 access.log.2.gz
-rw-r----- 1 nobody adm    8779427 Feb  4 02:39 error.log
-rw-r----- 1 nobody adm 2023509844 Feb  4 06:25 access.log.1
-rw-r----- 1 nobody adm   88608092 Feb  4 09:17 access.log
6
Sonny