Skip to content

Instantly share code, notes, and snippets.

@mipearson
Created August 15, 2011 12:44
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save mipearson/1146151 to your computer and use it in GitHub Desktop.
Save mipearson/1146151 to your computer and use it in GitHub Desktop.
Very simple munin plugin to graph nginx HTTP error codes
#!/usr/bin/env ruby
CODES = {
'400' => 'Bad Request',
'401' => 'Unauthorized',
'403' => 'Forbidden',
'404' => 'Not Found',
'405' => 'Method Not Allowed',
'406' => 'Not Acceptable',
'408' => 'Request Timeout',
'499' => 'Client Connection Terminated',
'500' => 'Internal Server Error',
'502' => 'Bad Gateway',
'503' => 'Service Unavailable',
'Other' => 'Other responses'
}
if ARGV[0] == 'config'; then
puts "graph_title nginx Error Codes"
puts "graph_vlabel responses per minute"
puts "graph_category nginx"
puts "graph_period minute"
puts "graph_info Non-200 response codes per minute"
CODES.each do |code, desc|
puts "#{code}.label #{code} #{desc}"
puts "#{code}.type DERIVE"
puts "#{code}.min 0"
end
else
results = Hash[*CODES.keys.map { |k| [k, 0]}.flatten]
File.open("/var/log/nginx/access.log").readlines.each do |line|
if line =~ /" (\d\d\d)/
code = $1
if CODES.keys.include?(code)
results[code] += 1
elsif code.to_i >= 400
results['Other'] += 1
end
end
end
results.each do |k,v|
puts "#{k}.value #{v}"
end
end
@bactisme
Copy link

Because I don't have ruby on my server, I wrote a python version : https://gist.github.com/bactisme/40148ca85cc82f3cf26f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment