LoginSignup
22
21

More than 5 years have passed since last update.

Herokuでリクエストタイムアウトを検知する

Last updated at Posted at 2013-04-30

heroku でWebサービスを運営している時って、監視系はみなさんどうしてますか?
おそらく定番アドオンである New RelicAir Brake を使用していると思うのですが、これらでは heroku で発生するタイムアウトを検知できません。
30秒以内に応答返せなかったらってアレですね。

考えてみれば heroku の Error Code12 は例外がスローされてるわけじゃないので、Air Brake 対象外。
タイムアウト処理しているのは WebDyno じゃなくて heroku/router なので New Relic で捕捉できない、ってことのようで。
どうしようかなといろいろ調べましたが、結局 Papertrail の検索結果送信機能を使うことにしました。

Papertrail を使う

Papertrail は heroku のログ取り扱いアドオンです。
Logly と違ってログ内に日本語があっても正常に表示されるし、一定期間内のログを Web 上で閲覧することができます。
このログ閲覧機能がすごく優秀で、キーワード検索も時刻での検索もでき、検索条件の保存もできるので、もう手放せない存在になっています。
もちろん、Amazon S3 へ圧縮したログを自動で保存してくれます。

んで、この検索条件保存機能はただ保存するだけじゃなくて、検索条件に一致するログが記録された場合、それを通知することもできるようになっているんですね。
監視間隔を毎分、毎時、毎日に設定できるので、即時性がほしい場合も問題ないでしょう。
ちなみに毎日の場合、設定されているタイムゾーンの朝5時にバッチ実行されるようです。

通知方式はごく普通にメールのほか、いくつかのWebサービスを対象とすることもできます。コラボレーションツールの Campfire (日本のクラウドファンディングサービスとは多分無関係)とか、モニタリングツールの Boundary とか。

リクエストタイムアウトのログは、このように記録されています。

Apr 29 02:46:09 application-name heroku/router:  at=error code=H12 desc="Request timeout" method=GET path=/hogehoge/fugafuga/error_uri host=jobhub.jp fwd="192.168.0.1" dyno=web.2 connect=1ms service=30000ms status=503 bytes=0 

このログが引っかかるように検索条件を保存してアラート設定してあげると良いです。
主目的はタイムアウトの補足ですが、他のエラーも検知したいので、キーワードは at=error code= にしてみました。


実はこの辺の情報は、先日 heroku に実装された Production-Check 機能のヘルプで解説されています。
Production Check|Heroku Dev Center
公式の方でも、ログのアドオンは Papertrail を推しているようですね。

22
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
21