class Riemann::Tools::AwsRds

Public Class Methods

new() click to toggle source
# File bin/riemann-aws-rds, line 18
def initialize
  abort "FATAL: specify a DB instances list, see --help for usage" unless opts[:database]
  @databases = opts.fetch(:database)
  @metrics = opts.fetch(:metric).inject({}) do |h, arg|
    metric, warning, critical = arg.split(",")
    h[metric] = { warning: warning.to_i, critical: critical.to_i }; h
  end
  @cloudwatch = Fog::AWS::CloudWatch.new(:aws_access_key_id => opts[:access_key],
                                         :aws_secret_access_key => opts[:secret_key],
                                         :region => opts[:region])
end

Public Instance Methods

tick() click to toggle source
# File bin/riemann-aws-rds, line 30
def tick
  # ['DatabaseConnections', 'FreeableMemory', 'FreeStorageSpace', 'NetworkReceiveThroughput', 'NetworkTransmitThroughput', 'ReadThroughput', 'CPUUtilization'].each do |metric|
  time = Time.new
  @databases.each do |database|
    @metrics.each_pair do |metric, thresholds|
      result = @cloudwatch.get_metric_statistics({"Namespace" => 'AWS/RDS', "MetricName" => "#{metric}", "Statistics" => 'Average', "Dimensions" => [{"Name" => "DBInstanceIdentifier", "Value" => "#{database}"}], "StartTime" => (time-120).to_time.iso8601, "EndTime" => time.to_time.iso8601, "Period" => 60})
      metric_result = result.data[:body]['GetMetricStatisticsResult']
      puts JSON.dump(metric_result)
      if (metric_result['Datapoints'].length > 0)
        datapoint = metric_result['Datapoints'][0]
        value = datapoint['Average']

        state = if value >= @metrics[metric][:critical]
          'critical'
        elsif value >= @metrics[metric][:warning]
          'warning'
        else
          'ok'
        end

        msg = {
          metric: datapoint['Average'],
          service: "#{database}.#{metric} (#{datapoint['Unit']})",
          state: state,
          ttl: 120
        }

        report msg
      end
    end
  end
end