#!/usr/bin/env ruby require 'rubygems' require 'fog' require 'date' require 'time' require 'json' require File.expand_path('../../lib/riemann/tools', __FILE__) $0 = __FILE__ # Let's not expose our AWS keys in the process list class Riemann::Tools::AWS include Riemann::Tools opt :access_key, "AWS access key", :type => String opt :secret_key, "Secret access key", :type => String opt :region, "AWS region", :type => String, :default => 'eu-west-1' opt :dbinstance_identifier, "DBInstanceIdentifier", :type => String def initialize abort "FATAL: specify a DB instance name, see --help for usage" unless opts[:dbinstance_identifier] @cloudwatch = Fog::AWS::CloudWatch.new(:aws_access_key_id => opts[:access_key], :aws_secret_access_key => opts[:secret_key], :region => opts[:region]) end def tick time = Time.new ['DatabaseConnections', 'FreeableMemory', 'FreeStorageSpace', 'NetworkReceiveThroughput', 'NetworkTransmitThroughput', 'ReadThroughput', 'CPUUtilization'].each do |metric| result = @cloudwatch.get_metric_statistics({"Namespace" => 'AWS/RDS', "MetricName" => "#{metric}", "Statistics" => 'Average', "Dimensions" => [{"Name" => "DBInstanceIdentifier", "Value" => "#{opts[:dbinstance_identifier]}"}], "StartTime" => (time-120).to_time.iso8601, "EndTime" => time.to_time.iso8601, "Period" => 60}) metricsResult = result.data[:body]['GetMetricStatisticsResult'] puts JSON.dump(metricsResult) if (metricsResult['Datapoints'].length>0) datapoint = metricsResult['Datapoints'][0] ev = {:metric => datapoint['Average'], :service => "#{opts[:dbinstance_identifier]}.#{metric} (#{datapoint['Unit']})", :description => JSON.dump(metricsResult), :state => "ok", :ttl => 300} report ev end end end end Riemann::Tools::AWS.run