production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

Railsのエラー通知をアプリケーションコードを変更せずに検知と通知をする方法

概要

サービスを運用していると、エラーを検知/通知する仕組みがほしくなります。
少し調べてみると、RailsでエラーをSlackに通知したいのであれば、以下の2つのgemを入れるのが多い印象を受けました。

一見良さげに見えたのですが、gemを入れて、設定ファイルとアプリケーションコードを変更しなければなりません。
作業自体は一瞬なのですが、もっとシンプルに「ログファイルにERRORが現れたら通知する」という解決方法求めたくなりました。
今回は、Railsのエラー通知をアプリケーションコードを変更せずに検知と通知をする方法について紹介します。

前提

  • Amazon Linux 2
  • Mackerelが導入されている

環境はAmazon Linux 2で、Mackerelが導入されていることが前提に紹介します。

手順

プラグインをインストール

Mackerelでログ監視をするには、プラグインをインストールする必要があります。

sudo yum install mackerel-check-plugins

Mackerelの設定ファイル(mackerel-agent.conf)の変更

Mackerelの設定ファイルであるmackerel-agent.confにログ監視用の設定を追加します。

# /etc/mackerel-agent/mackerel-agent.confに以下を追加

[plugin.checks.access_log]
command = ["check-log", "--file", "{Railsアプリケーションのルートディレクトリのパス}/log/production.log", "--pattern", "ERROR"]

--patternで指定した条件が--fileで指定したファイル内に出現したことを検知するための設定です。

mackerel-agentの再起動

設定ファイルを更新後はmackerel-agentを再起動します。

sudo systemctl restart mackerel-agent

確認

Mackerelのホスト詳細ページのMonitorsに今回追加したaccess_logが表示されていれば設定完了です。

f:id:watasihasitujidesu:20210911135222p:plain

まとめ

Rails エラー 通知で調べると、大半がgemをインストールして、アプリケーションコードに手を入れる必要がありました。
今回はMackerelを運用していることを前提に、アプリケーションコードに手を入れずに検知と通知をする方法を紹介しました。