俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

日報 #39 - まだまだ分析中ですが

Facebookって素晴らしいサイトがあるんだけど皆知ってるかな?

素晴らしいandサーバがデカすぎて、
あんまりウチみたいな小さいサーバの現実を忘れてしまうのも無理はないと思います。
今日、こんなことがありました。

うちは数台EC2をバランシングしているのですが、
本日未明、その内一台がレイテンシ爆発を起こし、
「すっ」とロードバランサーからいなくなりました。

「はれはれぇぇぇ?」って感じでいっろいろ調べた結果、
下記のような情報を得ました。

  1. ロードアベレージが大変なことに
  2. そのくせvmstatのcpu waite, cpu userは無反応
  3. じゃぁI/Oだろ。Swapは?→してません
  4. メモリはどうなのよ→限界到達、お前か
  5. 暴走スクリプトかね?→可能性はあるね
  6. ちなみにApache/Busyは?→限界到達、お前か!!!
  7. じゃぁ突発的なアクセス増なんじゃないの?
  8. req/secは?→あぁおおいねぇ

ということで、ナマナマしくログを触りました。
どうせどっかの行儀悪いサイト巡回スクリプトなんだろうなぁと思ってました。

1時間後。
うーん。。。
あ、、、あやしい部分はあったんだけど、
まさか、、ねぇ、、、あのFacebookさんがねぇ、、、
そんなことするわけないし、、、

facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)

こんなログが多発しているけど、、、そんな、、、ねぇ奥さん、、、
そんなはずないわよ、Facebookさんのところのお子さんがそんなこと、、、ねぇ?
でもほら、LBがUnhealthyだと言った時間の直前に、
ちょっと「気まずい」くらいアクセス来てますわよ?ものの2秒間の間に。。。
えぇ?でもほら、たまたまじゃなくって?
ほら、じゃぁ全体見れるようにaccess.log解析したらいいんじゃないかしら?
そうね、そうね、やってみましょう?

ということで、facebookのクローラ(?)のアクセスマッピングをしてみました。

f:id:tom_rc:20140903000525p:plain

縦軸が時間で、横軸が分で、
緑がアクセスなしで、赤が多いアクセス。
う、、うーん、結構アクセスが来ていることが分りました。

https://developers.facebook.com/search/?q=externalhit_uatext.php

ここにあるように、スクレイピングのためのUserAgentだそうです。
ピークタイムにガッツリこられると結構困るんだけどなぁ。。。
ただ、他のサーバはメモリをガッツリつんでいたので大丈夫そうでしたが、
mod_evasivでも防げそうにない(IPがコロコロ変わるみたい)ので、どうしたものか、、、