quattro_4's diary

また同じ過ちを繰り返すと気付かんのか!?

無料でアプリケーションのエラーを賢く管理する (Errbit on heroku)

エラーの管理の王道はエラーメールを送信する方法があると思う

エラーメールの欠点

  • エラーが大量に発生したとき
    • エラーメールばかり届いて萎える
    • 大事なメールがエラーメールに埋まることがある
    • ネットワークの帯域を圧迫する
  • 誰にエラーが届くかの管理がしにくい
  • エラーの詳細が分かりにくい
  • アプリケーション、環境(production, staging)の仕分けがしにくい
  • エラーの解決・未解決を管理できない

※同じ種類のエラーメールはGMailや最近のMac Mailはまとめてくれるので以前よりはその点はよくなった

アプリケーションを管理するウェブサービス

例えば次のようなものがある

共通の大きな長所としては
エラーのメール通知もするが、同じエラーが連発した場合1通しか来ない

Airbrake: The error app. (前身はHoptoad)

長所としてはUIはまあまあ
短所としてはたまにサービスがちゃんと動いていないと言う噂(致命的)

Exception and error tracking for your web apps | Coalmine

長所としては安定稼働、検索機能
短所としてはUIが微妙

※上記は個人的な感想
※いずれも使うプロジェクトの数などによって有料になる

そこでオープンソースのErrbit (Airbrakeのクローン) 無料

errbit/errbit · GitHub

  • herokuの無料範囲で稼働できる
  • heroku構築は30分〜でできる。手順もしっかりしている
  • さまざまなチケット管理サービスなどと連携できる
  • エラーのメール通知もするが、同じエラーが連発した場合1通しか来ない
  • エラーの詳細が分かりやすい

Errbitセットアップ

必要なもの

以下コマンドの demo-errbit をすべて置き換えること

$ git clone git://github.com/errbit/errbit.git
$ cd errbit/

# cd した後createしないと毎回 --app demo-errbit 追加する必要が出て面倒
# git remote add herokuも自分でする必要がある
$ heroku apps:create demo-errbit
$ bundle
$ heroku addons:add mongolab:starter
$ heroku addons:add sendgrid:starter
$ heroku config:add HEROKU=true
$ heroku config:add SECRET_TOKEN="$(bundle exec rake secret)"
$ heroku config:add ERRBIT_HOST=demo-errbit.herokuapp.com
$ heroku config:add ERRBIT_EMAIL_FROM=admin@demo-errbit.herokuapp.com
$ heroku run rake db:seed
$ open http://demo-errbit.herokuapp.com/
  • 情報が古くなった場合はheroku, errbitそれぞれの方法に従うこと
  • bundle失敗するかもしれないが無理に進めたければSECRET_TOKENをスキップすれば良い
    • ただしアプリ内のSECRET_TOKENを適当に(他などで)生成して差し替えてプッシュすべき
    • SECRET_TOKENを公開しなければ問題ないはず

f:id:quattro_4:20130218000731p:plain

アプリケーションの登録

f:id:quattro_4:20130218001032p:plain
f:id:quattro_4:20130218001059p:plain

上から簡単に

  • アプリ名(必須)
  • リポジトリ連携(任意)
    • ブランチ名
    • Githubレポ
    • BitBucketレポ
  • 通知設定
    • エラー時にメール通知
    • デプロイ時にメール通知(デプロイ時フックが必要)
  • 通知対象
    • すべてのユーザーに通知
    • メールアドレスで通知先を登録
    • 登録されているユーザーを通知先として登録
  • デプロイごとにすべてのエラーを解決済みに変更する
  • Issueトラッカーとの連携
    • BitBucket
    • FOGBUGZ
    • Github
    • Gitlab
    • LightHouse
    • Mingle
    • Pivotal Tracker
    • Redmine
  • 通知サービス
    • Campfire
    • GTALK
    • Hipchat
    • HOIIO
    • HUBOT
    • PUSHOVER
    • WEBHOOK

とりあえずアプリ名だけは入力して作成 (ADD APP)

アプリケーション側の設定

Errbit上でアプリを登録すると説明画面が出るのでそれに従えば良い

現時点で基本的には

  • gem 'airbrake' 追加
  • config/initializers/errbit.rb にコードを貼り付け、コミット、プッシュ
  • 通知テスト
    • $ heroku run rake airbrake:test

f:id:quattro_4:20130218004610p:plain
f:id:quattro_4:20130218004619p:plain

他の機能(気になるものでまだまとめてない・試してないもの)

  • 解決済みエラーデータのクリア
    • できるだけherokuの無料範囲で使えるようにするための手順まで用意してある
  • チケット管理サービスとの連携
  • デプロイフック通知
  • Github認証
  • User information in error reports (airbrake_user_attributes)
  • Set up Javascript notifications (airbrake_javascript_notifier)
  • iCal

基本的には errbit/errbit · GitHub 参照

その他

  • アプリケーションによってはユーザー情報などのparameterの一部をアプリ側でフィルタする必要がある
  • 複数のHerokuアカウント(個人用、会社用など)を同一マシンで使いたい場合一手間かかるので注意