Страница статуса и мониторинг uptime для приложений Rails
Мониторинг Rails-контроллеров, Active Record, очередей Sidekiq и Redis. Красивая хостед-страница или своя через API.
Три способа запустить страницу статуса для Ruby on Rails
Выберите нужный уровень контроля — zero-code, low-code или полный headless.
Хостед
Добавьте Ruby on Rails-эндпоинт, направьте CNAME на status.yourdomain.com — готово. 5 минут.
Headless
Через публичный API собрать свою UI прямо в Ruby on Rails-приложении. Полный контроль дизайна и брендинга.
Смотреть APIВстраиваемые бейджи
SVG-бейджи uptime и статуса в README или лендинг. Обновляются каждые 5 минут.
Вставьте этот health endpoint в своё 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
endПодключайте `get "/health", to: "health#show"` в routes.rb. Пропускайте CSRF, авторизацию и middleware, отдающий 401.
Что ломается в Ruby on Rails-приложениях и как это поймать
Тихо растущие очереди Sidekiq
Застрявший воркер раздувает очередь, пока приложение работает. Эндпоинт глубины очереди + ассершн под порогом.
Регрессии N+1
Забытый .includes() в PR может увеличить время ответа в 10 раз. Ассершн ловит это в первую минуту после деплоя.
Истощение пула соединений
Долгие запросы блокируют пул, запросы копятся. Health с коротким таймаутом ловит это до потери 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
endМониторинг Ruby on Rails — FAQ
Работает с Rails, Sinatra, Hanami и Padrino?
Да. Мониторинг на уровне HTTP — фреймворк не важен.
Как мониторить очередь Sidekiq?
Action возвращает глубину очереди, алерт по порогу. PulseAPI поддерживает JSON-path: `$.queue_depth < 100`.
Работает с Heroku, Fly.io и Render?
Да, и с любым деплоем. PulseAPI нужен только публичный URL.
Можно встроить страницу статуса внутрь Rails-приложения?
Да. Запрашивайте публичный API из контроллера, рендерите шаблон, или используйте turbo_frame с server-rendered partial.
Запустите мониторинг Ruby on Rails-приложения за 5 минут
Бесплатный тариф, без карты. Добавьте эндпоинт, получайте алерты о падениях.