sensu-plugins/sensu-plugins-aws

View on GitHub
bin/check-reserved-instances.rb

Summary

Maintainability
A
0 mins
Test Coverage
#! /usr/bin/env ruby
#
# check-reserved-instances
#
# DESCRIPTION:
#   This plugin checks if reserved instances expire soon.
#
# OUTPUT:
#   plain-text
#
# PLATFORMS:
#   Linux
#
# DEPENDENCIES:
#   gem: aws-sdk
#   gem: sensu-plugin
#
# USAGE:
#   ./check-reserved-instances.rb --aws-region eu-west-1 --use-iam
#
# NOTES:
#
# LICENSE:
#   Copyright (c) 2015, Olivier Bazoud, olivier.bazoud@gmail.com
#   Released under the same terms as Sensu (the MIT license); see LICENSE
#   for details.
#

require 'sensu-plugin/check/cli'
require 'sensu-plugins-aws'
require 'aws-sdk'

class CheckReservedInstances < Sensu::Plugin::Check::CLI
  include Common

  option :aws_region,
         short: '-r AWS_REGION',
         long: '--aws-region REGION',
         description: 'AWS Region (defaults to us-east-1).',
         default: 'us-east-1'

  option :warning,
         description: 'Warn if expire date is lower age in seconds',
         short: '-w SECONDS',
         long: '--warning SECONDS',
         default: 60 * 60 * 24 * 5,
         proc: proc(&:to_i)

  option :critical,
         description: 'Critical if expire date is lower age in seconds',
         short: '-c SECONDS',
         long: '--critical SECONDS',
         default: 60 * 60 * 24 * 30 * 2,
         proc: proc(&:to_i)

  def run
    reserved_instances_critical = []
    reserved_instances_warning = []

    ec2 = Aws::EC2::Client.new
    reserved_instances = ec2.describe_reserved_instances(filters: [{ name: 'state', values: ['active'] }]).reserved_instances

    reserved_instances.each do |reserved_instance|
      age = reserved_instance.end.to_i - Time.now.to_i
      if age < config[:critical]
        reserved_instances_critical << reserved_instance.reserved_instances_id
      elsif age < config[:warning]
        reserved_instances_warning << reserved_instance.reserved_instances_id
      end
    end

    if !reserved_instances_critical.empty?
      critical "Reserved instances will expire soon - #{reserved_instances_critical}"
    elsif !reserved_instances_warning.empty?
      warning "Reserved instances will expire soon - #{reserved_instances_warning}"
    end

    ok "#{reserved_instances.size} reserved instances"
  end
end