LoginSignup
70
63

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-12

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

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