ENECHANGE Developer Blog

ENECHANGE開発者ブログ

Bugsnag で app version を設定しないともったいない

ENECHANGE の CTO 室でインフラエンジニアを務めている岩本です。

先日 Bugsnag を初めて使いました。社内用ツールのエラー監視が目的です。ENECHANGE では Bugsnag が以前から活用されているのですが、私はこれまで触る機会がなかったのでした。

Bugsnag を実際に使ってみて「デフォルト設定でも充分便利だが app version を設定しないともったいない」と感じました。

今回の記事では、Bugsnag で app-version を設定するメリットを3つご紹介します。

メリット1:エラーが起こったアプリケーションのバージョンがすぐに分かる

app version を設定すると、エラーが起こったアプリケーションのバージョンがすぐに分かります。ダッシュボードの APP タブに version 欄が追加されるので、これを見るだけです。

f:id:iwamot:20220224205454p:plain

この機能は、複数バージョンが混在しているプロダクトで特に役立ちそうです。どのバージョンで起こったエラーかが分かりづらいと、修正対象の特定に手間取るかもしれません。

実際、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) が可視化されます。

f:id:iwamot:20220224205813p:plain

この機能により「新バージョンで安定性が悪化したからロールバックしよう」といった判断がしやすくなります。

メリット3:新しいバージョンのリリースを Slack に通知できる

app version を設定すると、新しいバージョンのリリースを Slack に通知できます。

f:id:iwamot:20220224205317p:plain

通知機能を実装する手間が省けます。

設定方法

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 へのリリース通知も簡単に設定できます。プロジェクトの設定画面で有効にするだけです。

f:id:iwamot:20220224213545p:plain

まとめ

app version を設定せずに Bugsnag を使っているなら、ぜひ試してみてください。簡単に設定できます。