Last active
December 15, 2015 10:39
-
-
Save christopher-b/5247384 to your computer and use it in GitHub Desktop.
Passenger - Statsd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/ruby | |
require 'socket' | |
statsd_host = "" | |
statsd_port = "8125" | |
namespace_prefix = "statsd-ruby" | |
mode = "statsd" | |
ARGV.each do |arg| | |
name, value = arg.split '=' | |
case name | |
when 'host' then statsd_host = value | |
when 'namespace' then namespace_prefix = value | |
when 'port' then statsd_port = value | |
when 'mode' then mode = value | |
else | |
exit("#{name} is not a valid parameter") | |
end | |
end | |
namespace = "#{namespace_prefix}.passenger.#{Socket.gethostname}" | |
loop do | |
metrics = [] | |
`passenger-status`.each_line do |line| | |
value = nil | |
field = nil | |
case line | |
when /^Processes/ | |
field = "processes" | |
when /^Requests in top-level queue/ | |
field = "queue" | |
end | |
value = line.split(':').pop.strip | |
next unless value && field | |
metrics << "#{namespace}.#{field}:#{value}|g" | |
end | |
# Average memory consumption of passenger processes | |
line_count = 0 | |
mem_total = 0 | |
`passenger-memory-stats 2>/dev/null`.each_line do |line| | |
case line | |
when /RackApp/ | |
mem_total += (line.split(' ')[3]).to_f | |
line_count += 1 | |
end | |
end | |
if line_count > 0 | |
value = (mem_total / line_count).to_i | |
metrics << "#{namespace}.avg_mem:#{value}|g" | |
metrics << "#{namespace}.total_mem:#{mem_total}|g" | |
end | |
packet = metrics.join("\n") | |
if mode == 'statsd' | |
socket = UDPSocket.open.send(packet, 0, statsd_host, statsd_port) | |
elsif mode == 'stdout' | |
puts packet | |
else | |
puts "#{mode} is not a valid output mode. Valid modes are 'statsd' (default) and 'stdout'." | |
exit | |
end | |
sleep(10) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment