Railsでエラーのslack通知を実装

Rialsアプリケーションで500などのエラーが起きたときにslackに通知する機能を実装してみます。

exception_notificationとslack-notifierの追加

slack通知はexception_notificationとslack-notifierというgemを追加すれば簡単に実装できます。

gem 'exception_notification', :github => 'smartinez87/exception_notification'
gem 'slack-notifier'

これらをgemファイルに追記し、bundle installします。

例外時の通知の設定

例外時の通知を設定するファイルを作成します。

bundle exec rails g exception_notification:install

exception_notification.rbに下記のようにslackの通知設定を行います。

  config.add_notifier :slack, {
    :webhook_url => "webhook_url",
    :channel => "#チャンネル名"
  }

webhook_urlは下記のようにして取得します。

  • https://”your_slack_name”slack.com/services/new
  • Incoming WebHooksで検索して追加する。
  • 「チャンネルへの投稿」で通知を飛ばしたいチャンネルを選択して設定を保存。
  • Webhook URLをコピーする

例外発生時の処理を設定

application_controller.rbで例外発生時のslack通知のメッセージ内容を設定します。

  rescue_from Exception, with: :render_500

  def render_500(e)
    ExceptionNotifier.notify_exception(e, :env => request.env, :data => {:message => "error"})
    render template: 'errors/error_500', status: 500
  end

例外じゃないときもslack通知を実装

slack通知は例外のときだけに使えるものではありません。

例えば、ログイン失敗したユーザーがいたときに通知するには、下記のような処理をuser_sessions_controllerのログイン失敗時の処理内に書けばOKです。

notifier = Slack::Notifier.new('webhook_url') 
notifier.ping('ログイン失敗')

ウェブサービスで、起きてほしくないイベントが起きたときにslackに通知するように設定しておくと、早く気付けて便利ですね。

Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする