Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Nagios plugin to check AWS Status RSS feeds
#!/usr/bin/env ruby
require 'rubygems'
require 'nokogiri'
require 'net/http'
# check_aws_status.rb
# A nagios plugin for fetching RSS feeds from http://status.aws.amazon.com.
# Source: https://gist.github.com/1604786
# Written by Aaron Suggs: https://github.com/ktheory
if ARGV[0].nil? || ARGV[0] == '-h'
puts %{
USAGE:
#{$0} url
E.g.:
#{$0} http://status.aws.amazon.com/rss/EC2.rss
Returns an approriate response based on the most recent status message
}
exit 3
end
# Nagios exit status conventions
EXIT_OK = 0
EXIT_WARNING = 1
EXIT_CRITICAL = 2
EXIT_UNKNOWN = 3
begin
url = ARGV[0]
xml_data = Net::HTTP.get_response(URI.parse(url)).body
xml_doc = Nokogiri::XML(xml_data)
latest_status = xml_doc.css("item title").first.text
puts latest_status
case latest_status
when /^Service is operating normally/i, /Informational message/i
exit EXIT_OK
when /^Performance issues/i
exit EXIT_WARNING
when /^Service disruption/i
exit EXIT_CRITICAL
else
exit EXIT_UNKNOWN
end
rescue
puts "Error fetching status: #{$!}"
exit EXIT_UNKNOWN
end
#!/usr/bin/env ruby
# Test script to fetch all AWS RSS feeds and all item titles
require 'rubygems'
require 'nokogiri'
require 'net/http'
feed_urls = `curl -s http://status.aws.amazon.com/|grep rss|awk -F '"' '{print "http://status.aws.amazon.com/" $4}'`.split
responses = []
feed_urls.each do |url|
xml_data = Net::HTTP.get_response(URI.parse(url)).body
xml_doc = Nokogiri::XML(xml_data)
responses += xml_doc.css("item title").map(&:text)
end
puts responses.sort
@mpatters72

Thanks for sharing this.
Only comment is that it throws "UNKNOWN" status for services that are blank "e.g. never had outage info posted" such as cloudwatch-ap-southeast-1.rss

@ktheory
Owner
ktheory commented Jul 2, 2012

Ah, thanks for the heads up.

I noticed this weekend that it's also giving a warning when EC2 in us-east1 is in the "resolved" state.

Patches welcome. :-)

@scaissie

This fixes the "never had an outage" problem:

if xml_doc.css("item title").first.nil?
# There's no "<title>", the service has had no recent problems
exit EXIT_OK
else
latest_status = xml_doc.css("item title").first.text
end

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