Healthchecks are handled by HeartbeatController
.
Use the /ping
endpoint as a lightweight check to see if the app is up. This
can be used by load-balancers, for example, which may frequently test whether to
send traffic to a given host running this app. The response will simply be
PONG
, with a 200 status code, and not specific resources are checked when this
endpoint is activated.
Use the /healthcheck
to check whether that the app's dependencies are working.
This returns a JSON structure that lists the checks it performs and their
results. For example:
{
"checks": {
"database": true,
"redis": true,
"sidekiq_processes": true
}
}
The available checks:
Check that 'ActiveRecord' connection to the database is active.
Checks that Sidekiq can connect to the Redis server.
Check which queues currently have jobs, as reported by Sidekiq, and checks that there is a Sidekiq running for each one. In theory there should be a process for each queue that is being used, and we determine which queues are being used by looking at what jobs we have queued up.
This check will fail if there are stale jobs in a queue that doesn't have a processor running. You can check which queues have jobs by starting the Rails console and running:
stats = Sidekiq::Stats.new
processes = Sidekiq::ProcessSet.new
stats.queues.keys.each do |queue|
running = processes.any? { |process| queue.in? process["queues"] }
puts "#{queue} running? #{running}"
end
If you see jobs in a queue that shouldn't be running anymore (e.g. we've retired
find_sync
and shouldn't see any jobs for it) then you'll need to remove any
job queues that exist for it for this test to return true
. If, on the other
hand, you only have the queues you expected listed, but no process is listed for
them, then you have a problem.