

先ほどサイトがアクセスできなくなる現象にみまわれ調査したところ、  
ディスク容量がいっぱいになりキャッシュが生成出来ない状態にありました。

容量の大きいファイルを探したところ、nginxのアクセスログが目にとまりました。  
今回は他のファイルを削除して空きスペースを取りました。

1リクエストごとに行が追加されていくので、そりゃ放置したらまずいよなと初めて気づいたわけですが、よい対応の仕方がわかりません。

ログを残さないわけにもいきませんし、こういう場合どうしたらよいのでしょうか。

また、少し本題から外れますが、ディスクの容量が少なくなった時に気づくような対策を皆様はされていますか。

環境

centos 6.5  
nginx


CC BY-SA 3.0
2015-03-23T16:11:47.370
8277
2015-03-24T00:47:30.787
5855
question
centos nginx
webサーバーのアクセスログによる容量圧迫


# ログの保管について

個人的な経験から言うと、ログはログを蓄積するためだけのログサーバを設置します。  
そして、web サーバから cron などでログサーバに定期的に FTP
で送信するなどしてディスク圧迫を抑えます。(どれほどのログがたまっているかわかりませんが、デイリーでいいでしょう)

FTP 送信時、あらかじめ gzip 圧縮するなどして容量を減らしておくと、サーバの転送量も減らせて良いですね。

エラーログ、アクセスログなどはユーザの動向がわかるものですし、ポリシーをきちんと決めて運営されることをお勧めします。  
また、別に DB サーバがある場合は nginx だけではなく、そういったサーバのデータすべてを1箇所に集約すると良いです。

お勧めの構成としては、ログサーバは基本的にただのファイル貯蓄のためだけに存在させるため、低スペックでいいです。(ただしビッグデータ解析やデータマイニングなどをしたい場合は別)

HDD 容量については現在のサービスでデイリーで xxギガバイト出力されるから、目安として 1 か月保持とすると…
といったように、現在の運用ベースで算出されるとよいと思います。

# 運用上の一部の例外について

アクセスログの肥大化に、検索サイトのクローラや、簡易的な URL チェックを用いたボットのアクセスが影響している可能性があります。

前者は単純に Google や
Yahoo!、その他検索サイトが走らせているソフトウェアで、ユーザーエージェントが特殊ですので、そのユーザエージェントが走ってきたらログに出力しない、などの制御をしても良いかもしれません。(アクセス制御してしまうと検索できなくなってしまうので)

後者の場合は第三者によるダイレクトアタックか、アタック前のセキュリティホール走査です。その為、これらには通常 404 ないしは 403
のステータスコードで応答するとともに、特定のユーザーエージェントを記録しないようにします.

# ディスク容量の監視について

容量監視では [munin](http://munin-monitoring.org/) や
[Zabbix](http://www.zabbix.com/jp/)、[Cacti](http://www.cacti.net/)
など、サーバ監視のソフトウェアを導入されるとよいと思います。

これらは共通してディスク使用量が 90% を超えたら管理者宛にメールを送信する、などの細かい設定ができます。  
これは使い方の一側面で、むしろ CPU 使用率だったり、httpd, 各種 DB サーバの死活監視、プロセス監視などが本来の目的です。

例えば私の場合ですと、Zabbix を用いて日々の MySQL データベースサーバ、httpd
サーバの死活監視、ディスク容量把握、CPU使用率やメモリ使用量の監視を行っており、ある閾値になったら警告としてメールを送信する、といった監視をさせています。

公式サイトでは目的に応じたテンプレートなども用意されていますし、関連書籍もありますので、書店などですぐに見つけられると思います。


CC BY-SA 3.0
2015-03-23T16:25:34.163
8278
2015-03-24T00:47:30.787
2015-03-24T00:47:30.787
7926
7926
8277
answer


まずはログのローテーションと世代管理をしましょう。UNIX系のOSであればたいてい標準でその仕組みがあります。CentOSであれば`logrotate`です。

例えば下記の/etc/logrotate.d/nginxの例では、一週間ごとに5世代分のログを圧縮して保存します。

[code]

    /var/log/nginx/*.log {
        weekly
        rotate 5
        compress
    
        missingok
        notifempty
        sharedscripts
        postrotate
            kill -USR1 `cat /var/run/nginx.pid` || true
        endscript
    }
    
[/code]

ディスク容量の監視については、まずはサーバのステータスをデイリーでメール送信してそれを確認するところからでしょう。認証系のログなどは頻繁に確認すべきです。`logwatch`が定番ツールですが、cronで定期実行して各種のログを自動で要約してメールで送れます。ついでにディスク容量もわかります。


CC BY-SA 3.0
2015-03-24T00:23:51.730
8289
2015-03-24T00:23:51.730
5793
8277
answer