Skip to content

Commit

Permalink
Merge pull request #33 from BrianHicks/master
Browse files Browse the repository at this point in the history
riemann-nginx-status
  • Loading branch information
aphyr committed Apr 23, 2013
2 parents a1d3e76 + e00a7b2 commit 00aa1bd
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions bin/riemann-nginx-status
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#!/usr/bin/env ruby

# Gathers nginx status stub statistics and submits them to Riemann.
# See http://wiki.nginx.org/HttpStubStatusModule for configuring Nginx appropriately

require File.expand_path('../../lib/riemann/tools', __FILE__)

class Riemann::Tools::NginxStatus
include Riemann::Tools
require 'net/http'
require 'uri'

opt :uri, "Nginx Stub Status URI", :default => 'http://localhost:8080/nginx_status'
opt :checks, "Which metrics to report.", :type => :strings, :default => %w{active accepted handled requests reading writing waiting}
opt :active_warning, "Active connections warning threshold", :default => 0
opt :active_critical, "Active connections critical threshold", :default => 0
opt :reading_warning, "Reading connections warning threshold", :default => 0
opt :reading_critical, "Reading connections critical threshold", :default => 0
opt :writing_warning, "Writing connections warning threshold", :default => 0
opt :writing_critical, "Writing connections critical threshold", :default => 0
opt :waiting_warning, "Waiting connections warning threshold", :default => 0
opt :waiting_critical, "Waiting connections critical threshold", :default => 0

def initialize
@uri = URI.parse(opts[:uri])

# sample response:
#
# Active connections: 1
# server accepts handled requests
# 39 39 39
# Reading: 0 Writing: 1 Waiting: 0
@keys = %w{active accepted handled requests reading writing waiting}
@re = /Active connections: (\d+) \n.+\n (\d+) (\d+) (\d+) \nReading: (\d+) Writing: (\d+) Waiting: (\d+)/m
end

def state(key, value)
if opts.has_key? "#{key}_critical".to_sym
critical_threshold = opts["#{key}_critical".to_sym]
return 'critical' if critical_threshold > 0 and value >= critical_threshold
end

if opts.has_key? "#{key}_warning".to_sym
warning_threshold = opts["#{key}_warning".to_sym]
return 'warning' if warning_threshold > 0 and value >= warning_threshold
end

return 'ok'
end

def tick
response = Net::HTTP.get(@uri)
values = @re.match(response).to_a[1,7].map { |v| v.to_i }

@keys.zip(values).each do |key, value|
report({
:service => "nginx #{key}",
:metric => value,
:state => state(key, value),
:tags => ['nginx']
})
end
end
end

Riemann::Tools::NginxStatus.run

0 comments on commit 00aa1bd

Please sign in to comment.