Rollbar 運用してみた

Vueはいいぞサーバーエンジニアのリンです。

ORATTAでは、エラー監視のためにRollbar(https://rollbar.com/)というSaaSを利用しています。
Error Tracking & Crash Reporting for Software Developers – Rollbar

Rollbarは、アプリが出すErrorを付帯情報付きでロギングし、頻度等の可視化やメール、Slack等へのアラート通知することが可能なSaaSで、月に100,000ログまでなら無料で使うことが可能です。

対応言語はGo, iOS, Java, JavaScript(Browser, Node.js), PHP, Python, React Native, Ruby, .Net とかなり豊富です。

このRollbarをORATTAで1年間運用してきた知見をちょっと書いてみようかと思います。

導入の仕方(PHP)

PHPでの使い方はというと、プロジェクトに対して composer で rollbar/rollbar をrequireし、
ドキュメントに従って Rollbar を use して Rollbar::init() してRollbar::log() すればいいです(雑
rollbar/rollbar – Packagist

特に詰まるところはないです!素晴らしい!簡単!
ということでドキュメント(https://docs.rollbar.com/docs/php)を読みましょう。

 

運用(実装)

Rollbar::init()するときに最低限必須のパラメータだけを入れると、確かNoticeやらDeprecatedなど全部のエラーと警告拾ってしまった気がするので、プロジェクトによっては収集がつかなくなるのではないかと思います。

Rollbar::init(
    [
        'access_token' => getenv('rollbar_key'),
        'environment' => getenv('projectDirectory'),
        'included_errno' => ini_get('error_reporting'),
    ]
);
//getenvは凡例

included_errnoをパラメータに加えることで実際にエラーログに出力しているエラーレベルと揃えられるので、運用しやすいかな思います。

 

Rollbar::log()の第三引数に任意の変数を渡すことで、その変数の中身も一緒にログにとってくれる機能があります。

私は、エラーが発生したときにDBトランザクションのdumpを一緒に送信するようにしています。(社内フレームワークのクエリビルダーが実際にトランザクションを切って実行するまでInsert文やUpdate文をスタックしてくれています。)

\Rollbar\Rollbar::log(\Rollbar\Payload\Level::ERROR, $e, $transactionArray);

 

実運用

Rollbar::log() のときに、Rollbar上になんのエラーレベルとして登録するか引数で渡すのですが、
今はとりあえず一律でErrorで渡しています。(Fatal Errorは自動的にCritical で登録してくれます)

実際に運用を開始すると、プロダクトが出力している全てのエラーログがどんどん溜まっていくので、とてつもないことになります。
正常系のログなどは追って修正を行いました。(バリデーションに引っかかったらExceptionを投げるようなケースではログに出さない)

あまり多数のログをRollbarに送ってしまうと、プランが格上げになって料金が発生してしまうので、
これは地味に重要だと思います(笑

 

収集したエラーについては、Rollbarが「同じ原因のエラーだな」と判断したものについては、よしなにまとめていってくれます。
これについてはプロジェクトのItemsから確認することができます。

この中からエラーを選択すると、実際のエラーログはどんなものだったか、
コールされたメソッドのコールスタックはどうなっているか、引数はどうなっているかといったTracebackが表示されます。



さらに、ここからOccurrencesを選択すると、発生したエラーの発生日時、発生したURLなどが一覧表示されます。
このうちの日時を選択すると、そのエラーについてのかなり詳細なログを追うことができます。

エラーメッセージとTracebackが見れるのはもちろん、前述のカスタムパラメータや、リクエストパラメータ、リファラなど1つ1つのエラーについてかなり詳細に追うことができ、バグの救命に役立つことでしょう。

 

また、この同種のエラーをよしなにまとめてくれる機能がなかなか良好で、あとからエラーレベルを変更しても、そのエラーレベルとして収集を続けてくれます。

これは、運用上避け得ないエラーについてはエラーレベルをdebugやinfoに下げることで、通知ルールと組み合わせて本当に必要なエラーだけを通知させることができるようになります。

 

ちなみに、課金が必要かどうかの利用状況ですが、ダッシュボードの右下で確認することができます。

 

こんな感じのエラーログ収集SaaSですが、無償から始められるので、
NewRelicの有料版はちょっと高くない?っていう人はちょっと挑戦してみてはいかがでしょうか。

 

と、本日まで何本か記事を書かせていただきましたが本日最終出社日です!
またどこかでお会いしましょう。ありがとうございました!