SentryのメッセージにドキュメントのURLを表示したい

アラートには対応するドキュメントがつきもの

インシデントが発生した時にSentry通知したいことはよくあリます。
そして対応手順をGitHubのWikiだったりQiitaTeamなどにまとめているチームも多いかと思います。

Sentry通知が来てから、対応手順が書かれたドキュメントにたどりつくのを簡単にしたい。そのために、Slack通知のメッセージにドキュメントのURLを載せてしまおうというのがこの記事の紹介するところです。

実装

例えば、チームでQiitaTeamを利用していて、そこからGitHubのWikiに移動しましょうといのはありそうです。
そうした状況に対応しやすいように、アプリケーションのコードの中に書き換えるべきURLが散財するのは避けたいので、 YAMLでURLを管理して、ドキュメントへのアクセスするクラスから値を取得するようにしてます。

また、置き場所はドメインに関するものではないので/libに置くことにしました。

ドキュメントへのアクセスするクラスを作成する

lib/data/document.yml

インシデントAの対応方法: https://hoge.qiita.com/shared/items/aaaaaaaaaaaaaaaaa
インシデントBの対応方法: https://foo.qiita.com/shared/items/bbbbbbbbbbbbbbbbb

lib/document.rb

class Document
  DOCUMENT_YAML_PATH = Rails.root.join('lib/data/document.yml')

  class << self
    def document_urls
      YAML.safe_load(File.read(DOCUMENT_YAML_PATH))
    end
  end
end

呼び出す側の簡単な例

document_url = Document.document_urls['Aの対応方法']
message = "インシデントAが発生しました!!!(ドキュメントURL: #{document_url})"
Sentry.capture_message(message, level: "error")

リファレンス

Railsアプリのモジュールはどこに置くべきか問題 (公開版)