Help us understand the problem. What is going on with this article?

Nginxのログが記録されなくなった

AWS上に構築したNginxをしばらく経って確認したところ、ログが取れていないことが発覚。
原因の調査から、取り急ぎの復旧までをまとめておきます。

背景

  • サーバの環境構築が終わってしばらくしてみると、Nginxのログが毎日は記録されておらず、ランダムに抜けている日がある。
  • パブリックに公開していたため、攻撃のようなアクセスは毎日来るはず。なんかおかしい...
  • 環境構築が終わってからも、開発やデプロイは何度か行なっていた。
  • 今日のログはというと、アクセスログとエラーログともに0バイトで、今日の未明(2時から4時あたり)のタイムスタンプが付いていた。
  • Nginxの再起動直後などは、特に問題がなくログが書き出される。
  • Nginxはnginxユーザで実行しているが、なぜかログはログインしている一般ユーザが所有しており、グループのみnginxに設定されている状態だった。

環境

  • Amazon Linux release 2 (Karoo)
  • nginx version: nginx/1.12.2

AWSサポートに契約していたことを思い出す

ダメもとで問い合わせてみたところ...

ビジネス以上のプランにて、サードパーティ製ソフトウェアサポートをベストエフォートで行っているため、Nginxに関しては、本来サポート対象外との回答が、、(私のアカウントはデベロッパープランでした)

一方で、原因がnginxではない場合が考えられますので...と、他の可能性についてもご案内いただきました。(優しい)
その回答とは、以下のような内容でした。

しばらく経つとログが出力されなくなる点から、ログのローテーションが行われた場合にファイルのパーミッションが書き換えられている可能性がございます。

なるほど...

ログのローテーション設定も確認してみたが...

以下のような設定になっていました。
(パーミッション設定については、一見問題ないように思える?)

/var/log/nginx/*log {
    create 0644 nginx nginx
    daily
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

他に助けを求められる場所はないか

以下の3つを検討しました。

1. AWSのサポートプランをビジネスにする

サポートプランをアップグレードにすることに対する見返りとして、

  • 必ずしも、それで解決できるとは限らない(ベストエフォート)点や、
  • 実際に環境にログインして修正まで行なってもらえる訳ではない点

などから、こちらの選択肢は却下となりました。

関連記事)https://qiita.com/kenkubomi/items/dda8b4ba25fa540c47a0

2. Nginxのサポートに加入する

こちらも、費用に対する見返りとして、

  • 必ずしも、それで解決できるとは限らない点と
  • 現状で英語でしか問い合わせできない(日本語対応準備中とのことです)

などの理由で、こちらも却下となりました。

参考)https://www.nginx.co.jp/support/

3. teratailなど、他のコミュニティサイトで意見を求める

明確な回答は無かったのですが、
こちらに、手掛かりのようなものがあったように思います。

対応方法

私の環境の場合、以下の修正でログがローテーションされた後も
引き続きログが書き出されるようになりました!

/var/log/nginx/*log {
    create 0644 nginx nginx
    daily
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
-       /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
+       /usr/sbin/nginx -s reload 2>/dev/null || true
    endscript
}

どちらの記述も、Nginxの設定ファイルを読み込み直す動作のようだ
といったところまでは調査できたのですが、明確な違いについては分からず...

参考)https://nginx.org/en/docs/switches.html

動いたので、一旦はこれで良しとします。

kenkubomi
Web系が得意なエンジニアです。フロントエンドはまだまだ勉強中。 ネイティブアプリも作ってみたくて、個人で「鳥取なにたべ!」アプリを配信しています。 投稿されている内容はあくまで私自身の見解であり、所属団体・企業を代表するものではありません。
https://www.wantedly.com/projects/448223
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away