概要
サービスを運用していると、エラーを検知/通知する仕組みがほしくなります。
少し調べてみると、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
が表示されていれば設定完了です。
まとめ
Rails エラー 通知
で調べると、大半がgemをインストールして、アプリケーションコードに手を入れる必要がありました。
今回はMackerelを運用していることを前提に、アプリケーションコードに手を入れずに検知と通知をする方法を紹介しました。