2012年11月16日金曜日

NginxのアクセスログにELBの"400 Bad Request"エラー(まとめ)

スズキです。

ELBの下のNginxで、下記のアクセスログが頻繁にみられました。
("x.x.x.x"はELBのIPアドレスです)
x.x.x.x - [16/Nov/2012:00:00:17 +0900] 0.000 "-" 400 0 "-" "-" 0 0
x.x.x.x - [16/Nov/2012:00:00:18 +0900] 0.000 "-" 400 0 "-" "-" 0 0
x.x.x.x - [16/Nov/2012:00:00:18 +0900] 0.000 "-" 400 0 "-" "-" 0 0

上記の減少は下記で非常に詳しく説明されていました。
Elastic Load Balancer にぶら下がってる時の access log
つまり、ELBが"second health check"と言われるコネクションを開いて閉じるだけの
チェックを行い、それがNginxのアクセスログで"400 Bad Request"で拾われてるようです。

上記で紹介した日本語の情報は、下記の記事をもとにしていると思います。
Random requests from ELB generating 400 errors in Nginx
ここには、問題のログ(400 Bad Request)を出力しない方法なども紹介されています。

そして、上記で紹介した英語情報には、"second health check"の情報もとも
記載されていました。
ELB making many connections

There is a second health check that we implemented in Oct/Nov 2011,
which behaves as you suggested -- it opens a connection and closes it.

"second health check"は2011/10-11に実装されており、そのヘルスチェックの
振る舞いは、コネクションを開いて閉じるのみのとなっています。

The reason for this second health check is that it provides protection
against instances being terminated without being de-registered.

"second health check"を行う理由は、ELBから取り外されず終了してしまう
EC2インスタンスに対しても、ELBがより問題なく動作できるようにするためです。
ということで、単にELBのヘルスチェック拾っているだけなので、そこまで問題視する
必要はないと思いますが、ログの解析などでうざったい場合は、この手のログは
出力しないようにコントロールした方がいいかもしれません。

Nginxもがんばろう...
--------
http://www.suz-lab.com

0 コメント: