Skip to content
This repository was archived by the owner on Nov 12, 2019. It is now read-only.
Open
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
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
source "https://rubygems.org"
gem 'newrelic_plugin', '~> 1.3.0'
gem 'nokogiri', '<= 1.5.9'
gem 'aws-sdk', '~> 1.66.0'
gem 'aws-sdk', '~> 2.3'
gem 'daemons'
1 change: 1 addition & 0 deletions lib/newrelic_aws.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ module NewRelicAWS
us-west-1
us-west-2
eu-west-1
eu-central-1
ap-southeast-1
ap-southeast-2
ap-northeast-1
Expand Down
20 changes: 13 additions & 7 deletions lib/newrelic_aws/collectors/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,31 @@ module NewRelicAWS
module Collectors
class Base
def initialize(access_key, secret_key, region, options)
# Aws.config[:ssl_verify_peer] = false
@aws_access_key = access_key
@aws_secret_key = secret_key
@aws_region = region
@cloudwatch = AWS::CloudWatch.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
)
@credentials = if @aws_access_key
Aws::Credentials.new(@aws_access_key, @aws_secret_key)
else
Aws::CredentialProviderChain.new.resolve
end

@cloudwatch = Aws::CloudWatch::Client.new(
region: @aws_region,
credentials: @credentials
)
@cloudwatch_delay = options[:cloudwatch_delay] || 60
end

def get_data_point(options)
options[:period] ||= 60
options[:period] ||= 300
options[:start_time] ||= (Time.now.utc - (@cloudwatch_delay + options[:period])).iso8601
options[:end_time] ||= (Time.now.utc - @cloudwatch_delay).iso8601
options[:dimensions] ||= [options[:dimension]]
NewRelic::PlatformLogger.info("Retrieving statistics: " + options.inspect)
begin
statistics = @cloudwatch.client.get_metric_statistics(
statistics = @cloudwatch.get_metric_statistics(
:namespace => options[:namespace],
:metric_name => options[:metric_name],
:unit => options[:unit],
Expand Down
6 changes: 3 additions & 3 deletions lib/newrelic_aws/collectors/ddb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ module NewRelicAWS
module Collectors
class DDB < Base
def tables
ddb = AWS::DynamoDB.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key
ddb = Aws::DynamoDB::Resource.new(
region: @aws_region,
credentials: @credentials
)
ddb.tables.map { |table| table.name }
end
Expand Down
23 changes: 12 additions & 11 deletions lib/newrelic_aws/collectors/ebs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,22 @@ module Collectors
class EBS < Base
def initialize(access_key, secret_key, region, options)
super(access_key, secret_key, region, options)
@ec2 = AWS::EC2.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
@ec2 = Aws::EC2::Resource.new(
region: @aws_region,
credentials: @credentials
)
@tags = options[:tags]
@detailed = options[:detailed] || false
end

def volumes
if @tags
tagged_volumes
else
@ec2.volumes.filter('status', 'in-use')
end
@ec2.volumes({
filters: [{ name: "status", values: ["in-use"] }]
})
end
end

def tagged_volumes
Expand All @@ -43,11 +45,10 @@ def metric_list
def collect
data_points = []
volumes.each do |volume|
detailed = !!volume.iops
name_tag = volume.tags.detect { |tag| tag.first =~ /^name$/i }
name_tag = volume.tags.detect { |tag| tag.key =~ /^name$/i }
metric_list.each do |(metric_name, statistic, unit)|
period = detailed ? 60 : 300
time_offset = detailed ? 60 : 600
period = @detailed ? 60 : 300
time_offset = @detailed ? 60 : 300
time_offset += @cloudwatch_delay
data_point = get_data_point(
:namespace => "AWS/EBS",
Expand All @@ -61,7 +62,7 @@ def collect
:period => period,
:start_time => (Time.now.utc - (time_offset + period)).iso8601,
:end_time => (Time.now.utc - time_offset).iso8601,
:component_name => name_tag.nil? ? volume.id : "#{name_tag.last} (#{volume.id})"
:component_name => name_tag.nil? ? volume.id : "#{name_tag.value} (#{volume.id})"
)
NewRelic::PlatformLogger.debug("metric_name: #{metric_name}, statistic: #{statistic}, unit: #{unit}, response: #{data_point.inspect}")
unless data_point.nil?
Expand Down
9 changes: 4 additions & 5 deletions lib/newrelic_aws/collectors/ec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@ module NewRelicAWS
module Collectors
class EC < Base
def clusters(engine = 'memcached')
ec = AWS::ElastiCache.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
ec = Aws::ElastiCache::Client.new(
region: @aws_region,
credentials: @credentials
)
clusters = ec.client.describe_cache_clusters(:show_cache_node_info => true)
clusters = ec.describe_cache_clusters(:show_cache_node_info => true)
clusters[:cache_clusters].map do |cluster|
if cluster[:engine] == engine
{
Expand Down
15 changes: 7 additions & 8 deletions lib/newrelic_aws/collectors/ec2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ module Collectors
class EC2 < Base
def initialize(access_key, secret_key, region, options)
super(access_key, secret_key, region, options)
@ec2 = AWS::EC2.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
)
@ec2 = Aws::EC2::Resource.new(
region: @aws_region,
credentials: @credentials
)
@tags = options[:tags]
end

Expand Down Expand Up @@ -39,8 +38,8 @@ def metric_list
def collect
data_points = []
instances.each do |instance|
detailed = instance.monitoring == :enabled
name_tag = instance.tags.detect { |tag| tag.first =~ /^name$/i }
detailed = instance.monitoring.state == "enabled"
name_tag = instance.tags.detect { |tag| tag.key =~ /^name$/i }
metric_list.each do |(metric_name, statistic, unit)|
period = detailed ? 60 : 300
time_offset = detailed ? 60 : 600
Expand All @@ -57,7 +56,7 @@ def collect
:period => period,
:start_time => (Time.now.utc - (time_offset + period)).iso8601,
:end_time => (Time.now.utc - time_offset).iso8601,
:component_name => name_tag.nil? ? instance.id : "#{name_tag.last} (#{instance.id})"
:component_name => name_tag.nil? ? instance.id : "#{name_tag.value} (#{instance.id})"
)
NewRelic::PlatformLogger.debug("metric_name: #{metric_name}, statistic: #{statistic}, unit: #{unit}, response: #{data_point.inspect}")
unless data_point.nil?
Expand Down
9 changes: 4 additions & 5 deletions lib/newrelic_aws/collectors/elb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@ module NewRelicAWS
module Collectors
class ELB < Base
def load_balancers
elb = AWS::ELB.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
elb = Aws::ElasticLoadBalancing::Client.new(
region: @aws_region,
credentials: @credentials
)
elb.load_balancers.map { |load_balancer| load_balancer.name }
elb.describe_load_balancers().load_balancer_descriptions.map { |load_balancer| load_balancer.load_balancer_name }
end

def metric_list
Expand Down
9 changes: 4 additions & 5 deletions lib/newrelic_aws/collectors/rds.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ def initialize(access_key, secret_key, region, options)

def instance_ids
return @instance_ids if @instance_ids
rds = AWS::RDS.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
rds = Aws::RDS::Resource.new(
region: @aws_region,
credentials: @credentials
)
rds.instances.map { |instance| instance.id }
rds.db_instances.map { |instance| instance.id }
end

def metric_list
Expand Down
7 changes: 3 additions & 4 deletions lib/newrelic_aws/collectors/sns.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@ module NewRelicAWS
module Collectors
class SNS < Base
def topic_names
sns = AWS::SNS.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
sns = Aws::SNS::Resource.new(
region: @aws_region,
credentials: @credentials
)
sns.topics.map { |topic| topic.name }
end
Expand Down
7 changes: 3 additions & 4 deletions lib/newrelic_aws/collectors/sqs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@ module NewRelicAWS
module Collectors
class SQS < Base
def queue_urls
sqs = AWS::SQS.new(
:access_key_id => @aws_access_key,
:secret_access_key => @aws_secret_key,
:region => @aws_region
sqs = Aws::SQS::Resource.new(
region: @aws_region,
credentials: @credentials
)
sqs.queues.map { |queue| queue.url }
end
Expand Down
2 changes: 1 addition & 1 deletion lib/newrelic_aws/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module NewRelicAWS
VERSION = '3.3.3'
VERSION = '3.3.4'
end