Report on queued connections in any Rack-based server using Raindrops and the Raindrops::Linux features.
First, add rack-queue-metrics
to your Gemfile:
gem 'rack-queue-metrics'
You're done! If you want to instrument queue metrics beyond the default output, you can subscribe to the rack.queue-metrics
notifcation in your Rails app. For example, to print queue information to your logs, add the following to `config/initializers/notifcations.rb:
# config/initializers/notifications.rb
ActiveSupport::Notifications.subscribe(/rack.queue-metrics/) do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
payload = event.payload
addr = payload[:addr]
active = payload[:requests][:active]
queued = payload[:requests][:queued]
queue_time = payload[:queue_time]
puts "STATS addr=#{addr} active=#{active} queued=#{queued} queue_time=#{queue_time} "
end
For more information, see the ActiveSupport::Notification docs.
Include the Raindrops
and Rack::QueueMetrics
middleware in your application's config.ru:
# config.ru
use Raindrops::Middleware
use Rack::QueueMetrics::Middleware
With every request, rack-queue-metrics
will output a log line with the the following format:
at=metric measure=rack.queue-metrics addr=10.10.10.90:5000 queue_time=0 queue_depth=0
The following information is sent in the notification payload:
requests[:active]
: Number of requests currently being processed by the dyno at the start of the requestrequests[:queued]
: Number of requests waiting to be processed at the start of the requestqueue_time
: Amount of time the current request spent in the queueaddr
: Address of the dyno processing the request