Railsアプリのエラー発生をHeroku上のerrbitで監視する手順
このエントリでは、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にアクセスすると次のような画面が出てくるので、設定した管理ユーザでログインします。
ログイン後の画面はこんな感じです。
この画面の「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
slackへのエラー通知
エラー発生時にslackにも通知するように設定してみます。slackへのユーザ登録は出来ている前提で、手順を記載します。
Slackの「Configure Integrations」で「Integration」の設定画面に行き、「Incoming Webhooks」を追加します。ここで生成されるTOKEN文字列をコピーしておきます。(左側のno「REGENERATE TOKEN」ボタンの上側に出ている文字列です)
次にerrbitのアプリ設定画面の「NOTIFICATION SERVICE」のところで、「SLACK」を選び、「SUBDOMAIN」「TOKEN」「ROOM」を指定します。
- SUBDOMAIN: 自分が使っているチャット画面の「[subdomain].slack.com」の「[subdomain]」の部分を指定
- TOKEN: 先ほどの生成した文字列
- ROOM: 通知したいCHANNELを指定
設定後にもう一度、bundle exec rake airbrake:test
すると、slackへのエラー通知が確認出来ます。
この手順でerrbitを構築して開発サーバ等に仕込んでおけば、開発時のバグ消化などがスムーズにできるのでは無いかなと思いました。(もちろん、本番環境のエラー管理にも利用すべきですが)
以上。。