こんにちは。
このブログを始めてから半年が経とうとしていますが、未だに動作が不安定でまれにアクセスができなくなってしまいます。(アクセス不可になっていたらごめんなさい)
エラーの原因を解明するためにはログを読むことが重要です。本ブログでは、大概のエラーがプラグインの相性やPHPのバージョン関連です。
ログ出力に関して、nginxのデフォルト設定では1つのログファイル(error.log)に書き込まれていきます。ログファイルのファイルサイズが肥大化していき、遡るのが大変になります。ログファイルは、日付ごとに別れていたほうが可読性が高いです。
そのため、ログローテーションをしてログファイルを読みやすいように圧縮します。また、古いログファイルを自動で削除するように設定します。
ログローテーションを設定する
まずは以下のコマンドを実行して、logrotate.d
フォルダにnginx
の設定ファイルを作成します。名前は任意です。
sudo vim /etc/logrotate.d/nginx
続いて、以下の内容を貼り付けます。
/opt/bitnami/nginx/logs/access.log /opt/bitnami/nginx/logs/error.log {
daily
rotate 30
missingok
notifempty
compress
create 0640 root root
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
/etc/logrotate.d
ディレクトリにnginxが追加されます。
各設定項目の説明は以下です。
/opt/bitnami/nginx/logs/access.log
、/opt/bitnami/nginx/logs/error.log
のパス
これらの行は、ログローテーションを適用する対象のログファイルのパスを指定します。この場合、nginxのアクセスログ(access.log
)とエラーログ(error.log
)が対象です。daily
毎日新しいログファイルが作成され、過去のログファイルはアーカイブされます。rotate 30
ログファイルのバックアップを保持する数を指定します。30日分(30個)の古いログファイルを保持し、それ以降は古いログファイルが削除されます。missingok
ログファイルが存在しない場合、エラーを表示しないようにします。notifempty
ログファイルが空の場合、ローテーションを行わないようにします。compress
古いログファイルを圧縮します。ログファイルの容量が減ります。create 0640 root root
権限と所有者を指定します。0640
の権限(読み取りと書き込み権限をrootユーザーとrootグループに付与)で作成されます。sharedscripts
以降に記述した処理を1度だけ実行します。postrotate
ログローテーションが完了した後に実行されるスクリプトを指定します。nginxに対してUSR1
シグナルを送信して、新しいログファイルを開きます。これにより、nginxは新しいログファイルにデータを書き込むことができます。endscript
postrotate
セクション内のスクリプトの終了を示します。
上記の設定ファイルを作成することで、nginxのアクセスログとエラーログが毎日ローテーションされ、30個までの古いログファイルが保持されます。また、ログファイルは適切な権限と所有者で作成され、ローテーション後にnginxが再起動されます。
ログローテーションのテスト実行
ログローテーションを設定したら、実際に動くかテストしましょう。以下のコマンドを実行してください。-d
はdry runで実際には動かさずファイルに影響を与えません。
sudo logrotate -d /etc/logrotate.d/nginx
上記のように問題なく動作したら、以下のコマンドで実際にログローテーションを実行してください。-f
はforceで強制実行です。
sudo logrotate -f /etc/logrotate.d/nginx
今回のログローテーションに関する設定では、nginxのログファイルの書き込み場所は変更されません。もし変更する場合には、以下のコンフィグファイルを変更してください。
/opt/bitnami/nginx/conf/nginx.conf
Be First to Comment