logstash-input-cloudwatch 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/logstash/inputs/cloudwatch.rb +50 -17
- data/logstash-input-cloudwatch.gemspec +1 -1
- metadata +45 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 714fb9324b667cc5e6318beea884232eec399de7
|
4
|
+
data.tar.gz: eb9fcaced10b0ff797bdb956aef90f1d4f622538
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0979483d18a9c984d9705557ab534f8d0fc382aed2f5b6ccd83bf2884b84e3dc72bba7bc4f5f1188e08c5dfaa7727ee584c135132c9e9597ce6417adcf008b7
|
7
|
+
data.tar.gz: 37fd5c701c206fa282a547f07517b599e77f20584394243983893acfe8669aa12cf8ea3ac9ef82f68e39b7297e2e1e72ef63b419fe1409aebb726d061c9c5f82
|
@@ -109,6 +109,9 @@ class LogStash::Inputs::CloudWatch < LogStash::Inputs::Base
|
|
109
109
|
# to ensure you're using valid filters.
|
110
110
|
config :filters, :validate => :array
|
111
111
|
|
112
|
+
# Use this for namespaces that need to combine the dimensions like S3 and SNS.
|
113
|
+
config :combined, :validate => :boolean, :default => false
|
114
|
+
|
112
115
|
public
|
113
116
|
def aws_service_endpoint(region)
|
114
117
|
{ region: region }
|
@@ -119,8 +122,10 @@ class LogStash::Inputs::CloudWatch < LogStash::Inputs::Base
|
|
119
122
|
require "aws-sdk"
|
120
123
|
AWS.config(:logger => @logger)
|
121
124
|
|
122
|
-
|
123
|
-
|
125
|
+
raise 'Unsupported namespace ' + @namespace unless @namespace[0..3] == 'AWS/'
|
126
|
+
raise 'Interval needs to be higher than period' unless @interval >= @period
|
127
|
+
raise 'Interval must be divisible by peruid' unless @interval % @period == 0
|
128
|
+
|
124
129
|
@last_check = Time.now
|
125
130
|
end # def register
|
126
131
|
|
@@ -133,21 +138,45 @@ class LogStash::Inputs::CloudWatch < LogStash::Inputs::Base
|
|
133
138
|
# For every metric
|
134
139
|
metrics_for(@namespace).each do |metric|
|
135
140
|
@logger.info "Polling metric #{metric}"
|
136
|
-
|
137
|
-
|
138
|
-
# For every resource in the dimension
|
139
|
-
dim_resources = *dim_resources
|
140
|
-
dim_resources.each do |resource|
|
141
|
-
# For every event in the resource
|
142
|
-
fetch_resource_events(dimension, resource, metric_options(@namespace, metric)).each do |event|
|
143
|
-
queue << event
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
141
|
+
@logger.info "Filters: #{aws_filters}"
|
142
|
+
@combined ? from_filters(queue, metric) : from_resources(queue, metric)
|
147
143
|
end
|
148
144
|
end # loop
|
149
145
|
end # def run
|
150
146
|
|
147
|
+
def from_resources(queue, metric)
|
148
|
+
# For every dimension in the metric
|
149
|
+
resources.each_pair do |dimension, dim_resources|
|
150
|
+
# For every resource in the dimension
|
151
|
+
dim_resources = *dim_resources
|
152
|
+
dim_resources.each do |resource|
|
153
|
+
# For every event in the resource
|
154
|
+
fetch_resource_events(dimension, resource, metric_options(@namespace, metric)).each do |event|
|
155
|
+
queue << event
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
private
|
162
|
+
def from_filters(queue, metric)
|
163
|
+
options = metric_options(@namespace, metric)
|
164
|
+
options[:dimensions] = aws_filters
|
165
|
+
@logger.info "Dim: #{options[:dimensions]}"
|
166
|
+
datapoints = clients['CloudWatch'].get_metric_statistics(options)
|
167
|
+
@logger.debug "DPs: #{datapoints.data}"
|
168
|
+
datapoints[:datapoints].each do |event|
|
169
|
+
event.merge! options
|
170
|
+
aws_filters.each do |dimension|
|
171
|
+
event[dimension[:name].to_sym] = dimension[:value]
|
172
|
+
end
|
173
|
+
event = LogStash::Event.new(cleanup(event))
|
174
|
+
decorate(event)
|
175
|
+
queue << event
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
private
|
151
180
|
def fetch_resource_events(dimension, resource, options)
|
152
181
|
@logger.info "Polling resource #{dimension}: #{resource}"
|
153
182
|
options[:dimensions] = [ { name: dimension, value: resource } ]
|
@@ -161,6 +190,7 @@ class LogStash::Inputs::CloudWatch < LogStash::Inputs::Base
|
|
161
190
|
end
|
162
191
|
end
|
163
192
|
|
193
|
+
private
|
164
194
|
def cleanup(event)
|
165
195
|
event.delete :statistics
|
166
196
|
event.delete :dimensions
|
@@ -213,15 +243,18 @@ class LogStash::Inputs::CloudWatch < LogStash::Inputs::Base
|
|
213
243
|
private
|
214
244
|
def aws_filters
|
215
245
|
@filters.collect do |key, value|
|
216
|
-
|
217
|
-
|
246
|
+
if ['AWS/EC2', 'AWS/EBS'].include?(@namespace)
|
247
|
+
value = [value] unless value.is_a? Array
|
248
|
+
{ name: key, values: value }
|
249
|
+
else
|
250
|
+
{ name: key, value: value }
|
251
|
+
end
|
218
252
|
end
|
219
253
|
end
|
220
254
|
|
221
255
|
private
|
222
256
|
def resources
|
223
257
|
# See http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CW_Support_For_AWS.html
|
224
|
-
@logger.info "Filters: #{aws_filters}"
|
225
258
|
case @namespace
|
226
259
|
when 'AWS/EC2'
|
227
260
|
instances = clients[@namespace].describe_instances(filters: aws_filters)[:reservation_set].collect do |r|
|
@@ -235,7 +268,7 @@ class LogStash::Inputs::CloudWatch < LogStash::Inputs::Base
|
|
235
268
|
end.flatten
|
236
269
|
@logger.debug "AWS/EBS Volumes: #{volumes}"
|
237
270
|
{ 'VolumeId' => volumes }
|
238
|
-
|
271
|
+
else
|
239
272
|
@filters
|
240
273
|
end
|
241
274
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-input-cloudwatch'
|
3
|
-
s.version = '1.0.
|
3
|
+
s.version = '1.0.3'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "Retrieve stats from AWS CloudWatch."
|
6
6
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
metadata
CHANGED
@@ -1,98 +1,100 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-cloudwatch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jurgens du Toit
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-core
|
15
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.4.0
|
20
|
-
- - <
|
20
|
+
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 3.0.0
|
23
|
-
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
26
|
requirements:
|
25
|
-
- -
|
27
|
+
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
27
29
|
version: 1.4.0
|
28
|
-
- - <
|
30
|
+
- - "<"
|
29
31
|
- !ruby/object:Gem::Version
|
30
32
|
version: 3.0.0
|
31
|
-
prerelease: false
|
32
|
-
type: :runtime
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: logstash-codec-plain
|
35
|
-
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '0'
|
40
|
-
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
43
|
requirements:
|
42
|
-
- -
|
44
|
+
- - ">="
|
43
45
|
- !ruby/object:Gem::Version
|
44
46
|
version: '0'
|
45
|
-
prerelease: false
|
46
|
-
type: :runtime
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: stud
|
49
|
-
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: 0.0.19
|
54
|
-
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
57
|
requirements:
|
56
|
-
- -
|
58
|
+
- - ">="
|
57
59
|
- !ruby/object:Gem::Version
|
58
60
|
version: 0.0.19
|
59
|
-
prerelease: false
|
60
|
-
type: :runtime
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: logstash-mixin-aws
|
63
|
-
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
|
-
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
71
|
requirements:
|
70
|
-
- -
|
72
|
+
- - ">="
|
71
73
|
- !ruby/object:Gem::Version
|
72
74
|
version: '0'
|
73
|
-
prerelease: false
|
74
|
-
type: :runtime
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: logstash-devutils
|
77
|
-
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- -
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: 0.0.16
|
82
|
-
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
85
|
requirements:
|
84
|
-
- -
|
86
|
+
- - ">="
|
85
87
|
- !ruby/object:Gem::Version
|
86
88
|
version: 0.0.16
|
87
|
-
|
88
|
-
|
89
|
-
|
89
|
+
description: This gem is a logstash plugin required to be installed on top of the
|
90
|
+
Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not
|
91
|
+
a stand-alone program
|
90
92
|
email: jrgns@eagerelk.com
|
91
93
|
executables: []
|
92
94
|
extensions: []
|
93
95
|
extra_rdoc_files: []
|
94
96
|
files:
|
95
|
-
- .gitignore
|
97
|
+
- ".gitignore"
|
96
98
|
- CHANGELOG.md
|
97
99
|
- DEVELOPER.md
|
98
100
|
- Gemfile
|
@@ -108,24 +110,24 @@ licenses:
|
|
108
110
|
metadata:
|
109
111
|
logstash_plugin: 'true'
|
110
112
|
logstash_group: input
|
111
|
-
post_install_message:
|
113
|
+
post_install_message:
|
112
114
|
rdoc_options: []
|
113
115
|
require_paths:
|
114
116
|
- lib
|
115
117
|
required_ruby_version: !ruby/object:Gem::Requirement
|
116
118
|
requirements:
|
117
|
-
- -
|
119
|
+
- - ">="
|
118
120
|
- !ruby/object:Gem::Version
|
119
121
|
version: '0'
|
120
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
123
|
requirements:
|
122
|
-
- -
|
124
|
+
- - ">="
|
123
125
|
- !ruby/object:Gem::Version
|
124
126
|
version: '0'
|
125
127
|
requirements: []
|
126
|
-
rubyforge_project:
|
127
|
-
rubygems_version: 2.4.
|
128
|
-
signing_key:
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.4.6
|
130
|
+
signing_key:
|
129
131
|
specification_version: 4
|
130
132
|
summary: Retrieve stats from AWS CloudWatch.
|
131
133
|
test_files:
|