ENECHANGE の CTO 室でインフラエンジニアを務めている岩本です。
先日 Bugsnag を初めて使いました。社内用ツールのエラー監視が目的です。ENECHANGE では Bugsnag が以前から活用されているのですが、私はこれまで触る機会がなかったのでした。
Bugsnag を実際に使ってみて「デフォルト設定でも充分便利だが app version を設定しないともったいない」と感じました。
今回の記事では、Bugsnag で app-version を設定するメリットを3つご紹介します。
メリット1:エラーが起こったアプリケーションのバージョンがすぐに分かる
app version を設定すると、エラーが起こったアプリケーションのバージョンがすぐに分かります。ダッシュボードの APP タブに version 欄が追加されるので、これを見るだけです。
この機能は、複数バージョンが混在しているプロダクトで特に役立ちそうです。どのバージョンで起こったエラーかが分かりづらいと、修正対象の特定に手間取るかもしれません。
実際、freee さんではカナリアリリースの導入をきっかけに app version を設定することにしたそうです。
Bugsnag での bug の出し分けについては、登壇時点では Downward API で環境変数 = Bugsnag 上の stage を書き換える手法を考えていました。しかしこの手順ではcanary release 終了後に再度デプロイを行う必要があり、デプロイ時間が増えてしまうのは避けたいということで、Bugsnag の version を利用する方法にシフトしました。
以下の仕組みによって、canary/stable の Pod ごとに version が分かれるようにしています。
1. Docker image build の際に、commit hash をファイルに吐き出す。
2. initializer の中で 1. で作ったファイルの中身を app_version としてセットする。
引用元:Argo CD & Rollouts を使って freee会計に canary release を導入しました!! - freee Developers Hub
メリット2:バージョンごとの安定性が可視化される
app version を設定すると、バージョンごとの安定性 (stability) が可視化されます。
この機能により「新バージョンで安定性が悪化したからロールバックしよう」といった判断がしやすくなります。
メリット3:新しいバージョンのリリースを Slack に通知できる
app version を設定すると、新しいバージョンのリリースを Slack に通知できます。
通知機能を実装する手間が省けます。
設定方法
app version の設定方法は、プラットフォームによって異なるものの、簡単です。Rails の場合は config/initializers/bugsnag.rb
で設定します。
Bugsnag.configure do |config| config.app_version = '1.3.0' end
私が Bugsnag を導入した社内用ツールでは、環境変数 (APP_VERSION
) で Docker イメージのタグを渡しています。
Bugsnag.configure do |config| config.api_key = ENV["BUGSNAG_API_KEY"] config.app_version = ENV["APP_VERSION"] config.add_metadata(:diagnostics, {role: ENV["ROLE"]}) end
Slack へのリリース通知も簡単に設定できます。プロジェクトの設定画面で有効にするだけです。
まとめ
app version を設定せずに Bugsnag を使っているなら、ぜひ試してみてください。簡単に設定できます。