Skip to content

Commit

Permalink
Update check-elb-sum-requests.rb to AWS SDK v2 (#297)
Browse files Browse the repository at this point in the history
* Update check-elb-sum-requests.rb to AWS SDK v2

* Revert removal of double pipes

* Update based on feedbacks

* Fix displaying name of faulty LB

* fix broken output using non-existing variable

* [ci skip] fix typo
  • Loading branch information
boutetnico authored and majormoses committed Nov 2, 2018
1 parent e79f48f commit b30618b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 39 deletions.
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ This project adheres to [Semantic Versioning](http://semver.org/).
This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins/community/blob/master/HOW_WE_CHANGELOG.md)

## [Unreleased]
### Breaking Changes
- `check-elb-sum-requests.rb` no longer takes `aws_access_key` and `aws_secret_access_key` options. (@boutetnico)

### Changed
- `check-elb-sum-requests.rb` was updated to aws-sdk v2. (@boutetnico)

## [13.0.0] - 2018-11-01
### Breaking Changes
Expand All @@ -26,7 +31,7 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins

## [12.1.0] - 2018-08-28
### Added
- new `check-efs.rb: checks cloudwatch metrics with the efs namespace for an arbitrary metric (@ivanfetch)
- new `check-efs.rb`: checks cloudwatch metrics with the efs namespace for an arbitrary metric (@ivanfetch)

## [12.0.0] - 2018-06-21
### Breaking Changes
Expand Down
64 changes: 26 additions & 38 deletions bin/check-elb-sum-requests.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# Linux
#
# DEPENDENCIES:
# gem: aws-sdk-v1
# gem: aws-sdk
# gem: sensu-plugin
#
# USAGE:
Expand All @@ -31,20 +31,11 @@
#

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

class CheckELBSumRequests < Sensu::Plugin::Check::CLI
option :aws_access_key,
short: '-a AWS_ACCESS_KEY',
long: '--aws-access-key AWS_ACCESS_KEY',
description: "AWS Access Key. Either set ENV['AWS_ACCESS_KEY'] or provide it as an option",
default: ENV['AWS_ACCESS_KEY']

option :aws_secret_access_key,
short: '-k AWS_SECRET_KEY',
long: '--aws-secret-access-key AWS_SECRET_KEY',
description: "AWS Secret Access Key. Either set ENV['AWS_SECRET_KEY'] or provide it as an option",
default: ENV['AWS_SECRET_KEY']
include Common

option :aws_region,
short: '-r AWS_REGION',
Expand Down Expand Up @@ -79,42 +70,40 @@ class CheckELBSumRequests < Sensu::Plugin::Check::CLI
description: "Trigger a #{severity} if sum requests is over specified count"
end

def aws_config
{ access_key_id: config[:aws_access_key],
secret_access_key: config[:aws_secret_access_key],
region: config[:aws_region] }
end

def elb
@elb ||= AWS::ELB.new aws_config
@elb ||= Aws::ElasticLoadBalancing::Client.new(aws_config)
end

def cloud_watch
@cloud_watch ||= AWS::CloudWatch.new aws_config
@cloud_watch ||= Aws::CloudWatch::Client.new
end

def elbs
return @elbs if @elbs
@elbs = elb.load_balancers.to_a
@elbs.select! { |elb| config[:elb_names].include? elb.name } if config[:elb_names]
@elbs = elb.describe_load_balancers.load_balancer_descriptions.to_a
@elbs.select! { |elb| config[:elb_names].include? elb.load_balancer_name } if config[:elb_names]
@elbs
end

def latency_metric(elb_name)
cloud_watch.metrics.with_namespace('AWS/ELB').with_metric_name('RequestCount').with_dimensions(name: 'LoadBalancerName', value: elb_name).first
end

def statistics_options
{
def request_count_metric(elb_name)
cloud_watch.get_metric_statistics(
namespace: 'AWS/ELB',
metric_name: 'RequestCount',
dimensions: [
{
name: 'LoadBalancerName',
value: elb_name
}
],
start_time: config[:end_time] - config[:period],
end_time: config[:end_time],
end_time: config[:end_time],
statistics: ['Sum'],
period: config[:period]
}
period: config[:period]
)
end

def latest_value(metric)
metric.statistics(statistics_options.merge(unit: 'Count')).datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[:sum]
metric.datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[:sum]
end

def flag_alert(severity, message)
Expand All @@ -123,7 +112,7 @@ def flag_alert(severity, message)
end

def check_sum_requests(elb)
metric = latency_metric elb.name
metric = request_count_metric elb.load_balancer_name
metric_value = begin
latest_value metric
rescue StandardError
Expand All @@ -132,18 +121,17 @@ def check_sum_requests(elb)

@severities.each_key do |severity|
threshold = config[:"#{severity}_over"]
puts metric_value
next unless threshold
next if metric_value < threshold
flag_alert severity,
"; #{elbs.size == 1 ? nil : "#{elb.inspect}'s"} Sum Requests is #{metric_value}. (expected lower than #{threshold})"
"; #{elbs.size == 1 ? nil : "#{elb.load_balancer_name}'s"} Sum Requests is #{metric_value}. (expected lower than #{threshold})"
break
end
end

def run
@message = if elbs.size == 1
elbs.first.inspect
elbs.first.load_balancer_name
else
"#{elbs.size} load balancers total"
end
Expand All @@ -155,7 +143,7 @@ def run

elbs.each { |elb| check_sum_requests elb }

@message += "; (#{config[:statistics].to_s.capitalize} within #{config[:period]} seconds "
@message += "; (Sum within #{config[:period]} seconds "
@message += "between #{config[:end_time] - config[:period]} to #{config[:end_time]})"

if @severities[:critical]
Expand Down

0 comments on commit b30618b

Please sign in to comment.