Rails アプリ向けのステータスページと稼働監視
Rails コントローラ、Active Record、Sidekiq キュー、Redis を監視。洗練されたステータスページ、または API で独自構築が可能。
Ruby on Rails のステータスページを公開する 3 つの方法
必要な制御レベルを選択 — ノーコード、ローコード、フルヘッドレス。
ホステッド
Ruby on Rails エンドポイントを追加し status.yourdomain.com に CNAME を向けるだけ。5 分で完成。
埋め込みバッジ
SVG の稼働率・ステータスバッジを README やランディングに埋め込み。5 分ごとに自動更新。
この health エンドポイントを Ruby on Rails アプリに貼り付けます
コピペして PulseAPI を URL に向けるだけ。健康なら 200、劣化なら 503 を返します。
class HealthController < ApplicationController
skip_before_action :authenticate_user!, raise: false
def show
checks = {
database: active_record_ok? ? "ok" : "fail",
cache: cache_ok? ? "ok" : "fail",
sidekiq: sidekiq_ok? ? "ok" : "fail",
}
healthy = checks.values.all? { |v| v == "ok" }
render json: { status: healthy ? "healthy" : "degraded", **checks },
status: healthy ? 200 : 503
end
private
def active_record_ok?
ActiveRecord::Base.connection.execute("SELECT 1") && true
rescue StandardError
false
end
def cache_ok?
Rails.cache.write("health:probe", "1", expires_in: 5.seconds)
Rails.cache.read("health:probe") == "1"
rescue StandardError
false
end
def sidekiq_ok?
Sidekiq.redis { |c| c.ping == "PONG" }
rescue StandardError
false
end
endroutes.rb に `get "/health", to: "health#show"` を記述。CSRF、認証、監視プローブに 401 を返すミドルウェアはスキップしてください。
Ruby on Rails アプリで壊れるもの — それを検知する方法
静かに肥大化する Sidekiq キュー
詰まったワーカーでアプリは動きキューだけが膨らみます。キュー深さを公開して閾値監視を。
N+1 リグレッション
PR で .includes() が抜けるとレスポンスタイムが 10 倍に。レスポンスタイム監視でデプロイ直後 1 分以内に検知。
コネクションプール枯渇
長時間クエリがプールをブロックし滞留。短タイムアウトのヘルスで ActionCable 落下前に発見。
当社のステータスページが気に入らない? Ruby on Rails で自作してください。
当社 API はホステッド UI と同じデータを返します。完全な OpenAPI 仕様書は api.pulseapi.tech/docs.
require "net/http"
require "json"
class StatusController < ApplicationController
def show
uri = URI("https://api.pulseapi.tech/status/acme")
@data = JSON.parse(Net::HTTP.get(uri))
end
endRuby on Rails 監視 — FAQ
Rails、Sinatra、Hanami、Padrino で動きますか?
すべて動作。監視は HTTP レベルでフレームワーク非依存です。
Sidekiq のキュー監視は?
キュー深さを返すアクションと閾値アラート。JSON-path 対応なので `$.queue_depth < 100` で OK。
Heroku、Fly.io、Render で動作?
はい、任意のデプロイで動作。PulseAPI は公開 URL だけあれば動きます。
Rails 内にステータスページを組み込めますか?
はい。コントローラから Public API を呼びテンプレート描画、または turbo_frame と partial の組み合わせで可能です。