# Step-to-Rails-Expert.rb 第8回 ## 本日の流れ + 自己紹介 + 本編 * 議論 * 議題が終了した場合はフリートーク&もくもく + 締め + 次回のテーマリクエスト・感想等(あれば) ## 参加者のお名前(時計回り) ### 内容 * お名前(ハンドルネーム・本名どちらでもOK) * 普段やっていること * 今日聞きたいこと、意気込みなど * 差し支えなければ所属など ### 自己紹介 * ebi(主催者) [LICTOOR株式会社](http://lictoor.com)のwebエンジニア。普段はRubyやRailsを使っています。 色んなサービスの比較や感想が聞けてよかった。 * two_sann(スタッフ) [@two_sann](https://twitter.com/two_sann) 社内でRails使ったシステムをメンテしてます。 * 秒速[@284km](https://twitter.com/284km)(湯島にあるフィードフォースという会社でサービス作ってます) エラー通知周りは今後必要になってくるのでいろいろききたい。 * 神速 [@sinsoku](htts://github.com/sinsoku) * 表参道にある株式会社groovesで [Forkwell](https://forkwell.com) というサービス作ってます * kuntao(ishiyama)さん[@_iamkuntao](https://twitter.com/_iamkuntao) * rollbarを使っている * cloudwatch logsに流してmackerelで見る * Ruby会議行くんですがだれか現地で話してください。。。 * tk_hamaguchi [@tk_hamaguchi](https://twitter.com/tk_hamaguchi) * Railsの社内リードエンジニア。 [exception_notification](https://github.com/smartinez87/exception_notification)やfluentdで地道にやってます * hidenori *今日新百合ヶ丘に移転したルートレックネットワークスでIot系の開発してます。http://www.routrek.co.jp/ ## 議題リスト(テーマ: エラー通知) ## サービス ## LT - sentry課金上限が決められる - sentry yearlyのプランもある(yearlyでも月ごとの支払い) - sentryも自前で立てられる - sentryページ遷移の履歴が見える(turbolinks使用時のjsのエラー解析が楽) - 環境について 環境分けの機能はだいたい付いている。Airbreadはjsのエラー通知のために通常プロジェクトとjsプロジェクトを分けなければいけない - sentry と airbreak エラー内容でグルーピングされるかされないか。タグがつけられる(ブラウザや回数など) sentryにはgithubのソースに飛ぶ機能はない - sentry sentryはreactのpropsのデータまで見える? 定期リリースするなら、リリースごとの管理ができる(バグとバージョンで管理) ie8をフィルターしたり、クローラをフィルタリングしたり管理画面でできるので便利 n日間再発生しなかったら解決するということもできる issue見た人のアイコンが出るw ### [Airbrake](https://airbrake.io) ### [Rollbar](https://rollbar.com) #### 共有事項 - 無料枠は3000(通知するエラー件数) → 公式サイトでは5000になっている。herokuだから? - Person tracking便利そう! アプリソースに変更を加えることなくエラー通知内容にcurrent_userの内容を加えてくれる - 便利: スタックとレースからgithubのソースに飛べる #### 質問・疑問 - Uncaught exceptionsは自動的に通知されるが、caught exceptionsはどういうエラーを通知すべきか - 外部サービスの疎通など(5回起きたら) - カスタムエラーを定義しておいて、それ以外のエラーを拾ったら通知する - 継承しているエラークラスを一覧化して、どのエラーは通知するかチェックする - 無視して良いエラー(URL直うちの404など)。サービスではなくアプリ側で扱う必要あり - エラーはrambulanceに寄せて、エラーページは分けて置いておいた方が良い(プロダクトのソースがエラーページのエラーを起こす可能性) https://github.com/yuki24/rambulance - t_wadaさんの資料を読もう! https://speakerdeck.com/twada/php-conference-2016 - controllerのアクションにrescueが書かれているの嫌(modelですべきでは) - どこまで正常系でどこまで異常系? validationエラーはcontrollerでrescueしている - unique制約は一度sqlを投げてしまうので、例外を拾う方が早い - `#report_validation_errors_to_rollbar`ってどういうケースで使うの? - jsで本来validationエラーを出ないように設定しているにもかかわらず出すユーザー(jsを切っているユーザー)を知りたいなど? - 各サービスのapiラッパーあるとありがたい - `Rollbar.warn`や`Rollbar.error`で任意の箇所で通知を行えるが、loggerと一緒に使うのか、片方のみ使えば済むのか。Rollbarはエラートラッキングサービスなので、loggerとは分けるべきか。`#logger_with_notification_if_log_level_is_more_critical_than_warning`のようなメソッドを作った方が良い? ```ruby logger.error(err_msg) Rollbar.error(err_msg) ``` みたいなのはまとめておきたい。 ステータスをつけて必ず知りたいのであれば通知もすべき。 解決をすべきかどうか 送る内容が必ずしもログと同じではない ### [Raygun](https://raygun.com) ### [Sentry](https://sentry.io/welcome/) 自前でも立てられる。 https://docs.sentry.io/server/installation/ docker使用でのinstallを推奨している。 https://docs.sentry.io/server/installation/docker/ ## OSS ### [errbit](https://errbit.com) * Airbrake APIを使ったOSSのエラー検知アプリケーション。 OSSなのでカスタマイズして運用したい場合は有効。 ただし運用をしなければいけないのがデメリットではある。 ## その他愚痴・辛み・知見共有など ### JS のエラー検知はsource map 対応は必須。 ### エラー検知を導入するメリット・デメリットは何か? ### 選定にあたっての項目候補(思いつく限り) * 対応している言語、フレームワーク。 * エラーリミット。 * 月額料金に対しての利用プロジェクト数、ユーザ数 * 操作性(エラーを切り替えるのは容易?などなど) * ログの保存期間 * 念の為連携できる外部サービスも確認 ## その他 + (Rails関係ないので時間があれば)Lambdaでのエラー通知をslackに飛ばしたりする良い方法あれば教えてください これを見よ!! http://dev.classmethod.jp/cloud/aws/slack-integration-blueprint-for-aws-lambda/ + 狼少年のような通知を減らすために、どのような取り組みが有効か教えて欲しい 時間のため未着手