Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update check-elb-sum-requests.rb to AWS SDK v2 #297

Merged
merged 6 commits into from
Nov 2, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)

## [12.4.0] - 2018-10-03
### Changed
Expand All @@ -19,7 +24,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)
boutetnico marked this conversation as resolved.
Show resolved Hide resolved

## [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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is this being removed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed this because it looks like a debug statement that was left and forgot. See example output:

$ ./check-elb-sum-requests.rb -a <key> -k <secret> -r eu-west-1
264.0
264.0
CheckELBSumRequests OK: <AWS::ELB::LoadBalancer name:my_alb>; ( within 60 seconds between 2018-10-28 07:55:37 +0000 to 2018-10-28 07:56:37 +0000)

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