このエントリでは、RailsアプリのエラーをErrbitで監視する手順の作業ログをまとめています。Errbitではエラーの監視を行うことができます。ErrbitはAirbrakeというサービスのオープンソース版で、この手順ではErrbitをHerokuにセットアップすることにします。

errbit
 https://github.com/errbit/errbit

Airbrake
 https://airbrake.io

ErrBitのセットアップ

以下のerrbitのページ「Deploying to Heroku:」という部分に手順が書いてあるので、この通りに実施します。

errbit
 https://github.com/errbit/errbit

PC上での準備

PCにruby,bundlerはセットアップされている前提で、errbitのcloneとbundle installを実行します。

$ git clone http://github.com/errbit/errbit.git
$ cd errbit
$ bundle install --path vendor/bundle

db/seeds.rbを修正します。以下の3点を自分用に変更。

*** 省略 ***
admin_username = "errbit"
admin_email = "errbit@#{Errbit::Config.host}"
admin_pass  = 'password'
*** 省略 ***

修正したらcommitしておきます。

$ git commit db/seeds.rb -m "setup admin id/password"

herokuへの登録

herokuへのユーザ登録・クレジットカード登録・heroku Toolbeltはセットアップは出来ている前提で、以下のようにコマンドを入力してherokuに、errbitをデプロイします。(※ここでは無料のAdd-onを利用しているので基本的に費用はかからないはず)

$ heroku login
$ heroku create ※設定したいアプリ名(省略してもOK)※
$ heroku addons:add mongolab:sandbox
$ heroku addons:add sendgrid:starter
$ heroku config:add HEROKU=true
$ heroku config:add SECRET_TOKEN="$(bundle exec rake secret)"
$ heroku config:add ERRBIT_HOST=※errbitのホスト名※
$ heroku config:add ERRBIT_EMAIL_FROM=※通知メールの送信元※
$ git push heroku master

以下のコマンドでHeroku上のDBにシードデータ登録・インデックス生成します。

$ heroku run rake db:seed
$ heroku run rake db:mongoid:create_indexes

herokuのDBを無料範囲内で利用するために、定期的に対応済みエラーをクリアするスケジューラーを追加しておきます。

$ heroku addons:add scheduler:standard
$ heroku addons:open scheduler

heroku Schedulerの設定画面が出てくるので、Add Jobを選んでtaskにrake errbit:db:clear_resolvedを指定します。

ここまで設定してから、HerokuのアプリのURLにアクセスすると次のような画面が出てくるので、設定した管理ユーザでログインします。

errbit-login

ログイン後の画面はこんな感じです。

errbi-start

この画面の「AddNewApp」からRailsアプリを追加していきますが、そこから先はRailsのアプリを作った後で実施します。

監視対象のRailsアプリを作る

Railsアプリの準備

以下のコマンドのようにして、Railsアプリの基本を作ります。

$ mkdir sample
$ cd sample
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails'" >> Gemfile
$ bundle install --path vendor/bundle
$ bundle exec rails new . --skip-bundle
$ rm Gemfile.lock
$ bundle install --path vendor/bundle

RailsアプリへのErrbitの設定

Errbitの管理画面「AddNewApp」から、アプリ名を指定してアプリを作成します(それ以外は、ひとまず既定値で)。作成後画面の「No errs have been caught yet, make sure you setup your app」に、Railsアプリに設定すべき情報が表示されます。

作成後の画面に表示されている内容でconfig/initializers/errbit.rbを作成し。また、Gemfileに以下を追記。

gem 'airbrake'

gemを追加したので、bundle installしておきます。

$ bundle install

Errbitの動作確認

ここで、次のコマンドを入力すると動作確認を行うことが出来ます。このコマンドを入力した後、errbitの画面を見ると以下のようにエラーが発生している事が確認できます。

$ bundle exec rake airbrake:test

errbit-err

slackへのエラー通知

エラー発生時にslackにも通知するように設定してみます。slackへのユーザ登録は出来ている前提で、手順を記載します。

Slackの「Configure Integrations」で「Integration」の設定画面に行き、「Incoming Webhooks」を追加します。ここで生成されるTOKEN文字列をコピーしておきます。(左側のno「REGENERATE TOKEN」ボタンの上側に出ている文字列です)

次にerrbitのアプリ設定画面の「NOTIFICATION SERVICE」のところで、「SLACK」を選び、「SUBDOMAIN」「TOKEN」「ROOM」を指定します。

errbit-slack

  • SUBDOMAIN: 自分が使っているチャット画面の「[subdomain].slack.com」の「[subdomain]」の部分を指定
  • TOKEN: 先ほどの生成した文字列
  • ROOM: 通知したいCHANNELを指定

設定後にもう一度、bundle exec rake airbrake:testすると、slackへのエラー通知が確認出来ます。

この手順でerrbitを構築して開発サーバ等に仕込んでおけば、開発時のバグ消化などがスムーズにできるのでは無いかなと思いました。(もちろん、本番環境のエラー管理にも利用すべきですが)

以上。。