私たちは、本番環境でSlack通知がSSL証明書の有効期限切れにより機能していないことに気づかず、重要なエラーメッセージを見落としかけていた。幸いにも、この期間に致命的なエラーは発生しておらず、大きなトラブルには至りませんでしたが、この経験はSlack通知に依存せず、定期的にサーバーのログを確認することの重要性を感じました
新たにデータ作成時にSlack通知を行う機能を実装し、ステージング環境でのテストを経て、問題なく通知が行われることを確認していました。しかし、本番環境にデプロイ後、変更をリアルタイムで監視していた際に500エラーが発生していると報告を受け取りました。
まず最初にサーバーログを確認し、原因究明に乗り出しました。ログの詳細を見ると、Slack通知時に下記のようなSSL証明書の期限切れエラーが発生していることが判明しました。
/home/appuser/.anyenv/envs/rbenv/versions/3.0.2/lib/ruby/3.0.0/net/protocol.rb:46:in `connect_nonblock': SSL_connect returned=1 errno=0 state=error: certificate verify failed (certificate has expired) (OpenSSL::SSL::SSLError)
このエラーメッセージを受けて、私たちは直ちにルート証明書を更新するコマンドsudo yum update ca-certificates
を実行し、正常にSlack通知が再開されることを確認しました。
エラー対処後、一息ついたその時、Slackへの例外通知機能(exception_notification)が以前から稼働していなかったことに気がつきました。つまり、前回の通知以降、いかなる例外通知も行われていなかったのです。この事実に気づいた時、背筋に冷たい汗を感じました。約1ヶ月分のログを調査しましたが、幸いなことに特筆すべきエラーは発見されませんでした。
この経験から、「問題が表面化していないから大丈夫」という考えは危険であると痛感しました。システム運用においては、Slack通知のような自動化されたアラートシステムに依存することなく、定期的なログ確認の実施が不可欠であることを再認識しました。