Help us understand the problem. What is going on with this article?

無料エラー収集システムErrbitで、ログファイルをgrepする生活とサヨナラ

More than 3 years have passed since last update.

なぜエラートラッキングシステムが必要なのか

多くの開発者は、開発環境での手動テスト、テストコードの実装に多くの時間をかけている事と思います。
しかしながら、本番環境やステージング環境でもエラーは起こりうるものです。
このようなエラーに気づくのが遅れるほど、ユーザ体験は低下し、結果的に機会損失を招く事となります。エラーに気づいた際に、過去のログをgrepしたりするのも、非常に労力がかかります。

このような課題を解決するため、エラーの概要、Backtrace、発生時のセッション情報などの詳細情報をWebインタフェースで管理でき、類似したエラーを分類したり、担当者へメールやSlackで通知するための仕組みがエラートラッキングシステムです。

代表的なものとしてAirbrakeがありますが、スタートアップとしては少しお高い値段です。

Errbitとは

AirbrakeのOSSクローンです。実際にはAirbrakeのAPIとも互換性があり、非常に使い勝手の良い製品となっています。

必要なもの

普段、mac上でRailsアプリケーションを開発している方であれば、このあたりが用意されていれば大丈夫です。

  • 動作するRailsアプリケーション
  • mongodb

構築手順

まずErrbitを構築し、その後、既存のRailsアプリケーションにエラーを通知するための設定が必要となります。

Errbitの構築

適当なディレクトリにソースコードを取得

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

必要なgemをインストール

bundle install --path=vendor/bundle --binstubs=vendor/bin

Errbitの起動準備

rake errbit:bootstrap


Creating an initial admin user:
-- email: errbit@errbit.example.com
-- password: your_password

ここで表示されるemailとpasswordは後ほど必要になりますので、控えておきます。

mongodbを起動

mongod --config /usr/local/etc/mongod.conf

適当なポートでErrbitを起動

rails s -p 8080

webインタフェースが表示される

スクリーンショット 2015-04-12 17.24.58.png

webインタフェースからAPI_KEYを取得します。

既存のRailsアプリケーションにエラー通知のための仕組みを導入する

airbrakeのgemを用いて、Errbit側にエラーを通知します。

Gemfile
    # error tracking
    gem 'airbrake'

環境によってはairbrakeが必要ない場合もあるかもしれません。今回は諸事情によりstaging環境とdevelopment環境にairbrakeを導入しています。

config/initializers/errbit.rb
require 'rake'
require 'airbrake/rake_handler'
Airbrake.configure do |config|
  config.api_key = ENV['API_KEY']
  config.host    = 'localhost'
  config.port    = ENV['API_PORT']
  config.development_environments = []
  config.secure  = config.port == 443

  # report exceptions that happen inside a rake task
  config.rescue_rake_exceptions = true
end

ENV['API_PORT'] にはErrbitが使用しているポート番号を指定します。
このあたりの情報をgitで管理すると、柔軟な設定が出来なくなったり、開発メンバーによってアクセス権限レベルを分けたりする事が難しくなります。
そこで、ここではAPI_KEYやポート番号は環境変数を用いてセットしています。

~/.zshrc
export API_KEY=hogefuga_api_key
export API_PORT=8080
source ~/.zshrc

テスト

まずは一連の設定が正しい事をテストしてみます。

rake airbrake:test

Started GET "/verify" for  at 2015-04-12 17:43:47 +0900
Raising 'AirbrakeTestingException' to simulate application failure.
** [Airbrake] Success: Net::HTTPOK
** [Airbrake] Environment Info: [Ruby: 2.2.0] [Rails: 4.1.5] [Env: development]
** [Airbrake] Response from Airbrake:
UUID: ...
URL:  http://errbit.example.com:8080/locate/...

例外発生を通知し、正常にレスポンスが返って来ています。

次に、オンライン処理で例外発生した場合の挙動を確認します。
アプリケーションのエントリポイントで例外発生させてみます。

app/controllers/hoge_controller.rb
def login
  raise 'exception inside hoge_controller'
end

最後に、バッチ処理で例外発生した場合の挙動を確認します。

lib/tasks/notification.rake
raise 'exception inside rake task'

それぞれのエラーをErrbitのWebインタフェースで確認できれば、テスト終了です。

参考資料

Using Airbrake with Rake

更に上を目指すなら

様々な通知サービスと連携できたり、複数人で使えたり、非常にクオリティの高い製品だと思います。
応用として、このあたりに挑戦してみても面白いかもしれません。

  • GitHub issueとの連携
  • Slack、HUBOT、HIPCHATとの連携
  • Errbitの開発に参加
tjnet
最近はiOSとRailsを行ったりきたり。 たまにOSSにコミットしたり。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした