fluent-plugin-elb-log 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 966e83a0c3cce1f14ff40f3a54a4e6c5cc3c88fd
4
+ data.tar.gz: 0c6319930698bc00048dfd3ebe50f7c0904086b1
5
+ SHA512:
6
+ metadata.gz: 595c8db95152913481d55f0edd42730dade97d9f5d68c1943ffda3d9d6677360aafff78548c680d0c794e0137013d76a9d1a26ff4d8bfa07162013c0369624e2
7
+ data.tar.gz: 157c1301e07758ae19abbf742a32c3350a0d39d3c390fb5c7b195330e41665d26d3fbecc63f72b83bcbfd0ee3c5bcc781262fe20b060446915e3ea47cfdfa825
data/README.md CHANGED
@@ -11,6 +11,32 @@
11
11
  - settings see: [Elastic Load Balancing](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-access-logs.html)
12
12
  - developer guide: [](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/access-log-collection.html)
13
13
 
14
+ ## Different from version 0.1.x
15
+ - Using version 2 of the AWS SDK for Ruby.
16
+ - add parameter
17
+ - region (required. see:http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)
18
+ - tag (optional)
19
+ - remove parameter
20
+ - s3_endpoint
21
+ - output data change
22
+ - add items
23
+ - region (AWS Region name)
24
+ - key (source S3 object name)
25
+ - prefix
26
+ - elb_timestamp_unixtime (converted to unix timestamp)
27
+ - user_agent
28
+ - option1, option2, option3
29
+
30
+ ## When SSL certification error
31
+ log:
32
+ ```
33
+ SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
34
+ ```
35
+ Do env setting follows:
36
+ ```
37
+ SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt (If you using amazon linux)
38
+ ```
39
+
14
40
  ## Configuration
15
41
 
16
42
  ```config
@@ -18,12 +44,13 @@
18
44
  type elb_log
19
45
 
20
46
  # following attibutes are required
21
- s3_endpoint <s3_endpoint>
47
+ region <region name>
22
48
  s3_bucketname <bucketname>
23
49
  s3_prefix <elb log's prefix>
24
50
  timestamp_file <proc last file timestamp record filename>
25
- refresh_interval <interval number by second>
26
51
  buf_file <buffer file path>
52
+ refresh_interval <interval number by second>
53
+ tag <tag name(default: elb.access)>
27
54
 
28
55
  # following attibutes are required if you don't use IAM Role
29
56
  access_key_id <access_key>
@@ -35,14 +62,15 @@
35
62
  ```config
36
63
  <source>
37
64
  type elb_log
38
- access_key_id XXXXXXXXXXXXXXXXXXXX
39
- secret_access_key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
40
- s3_endpoint s3.amazonaws.com
41
- s3_bucketname bucketname
42
- s3_prefix prefix
65
+ region us-east-1
66
+ s3_bucketname my-elblog-bucket
67
+ s3_prefix prodcution/web
43
68
  timestamp_file elb_last_at.dat
44
- refresh_interval 300
45
69
  buf_file /tmp/fluentd-elblog.tmpfile
70
+ refresh_interval 300
71
+ tag elb.access
72
+ access_key_id XXXXXXXXXXXXXXXXXXXX
73
+ secret_access_key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
46
74
  </source>
47
75
 
48
76
  <match **>
@@ -53,28 +81,36 @@
53
81
  ### json output example
54
82
  ```
55
83
  {
56
- "account_id": "999999999999",
57
- "backend": "192.168.30.127",
58
- "backend_port": "80",
59
- "backend_processing_time": "0.000985",
60
- "backend_status_code": "200",
61
- "client": "118.20.x.x",
62
- "client_port": "46171",
63
- "elb": "fluent-test-elb",
64
- "elb_ip_address": "54.250.x.x",
65
- "elb_status_code": "200",
66
- "logfile_date": "2014/03/09",
67
- "logfile_elb_name": "fluent-test-elb",
68
- "logfile_hash": "xyz123ab",
69
- "received_bytes": "0",
70
- "region": "ap-northeast-1",
71
- "request_method": "GET",
72
- "request_processing_time": "0.000072",
73
- "request_protocol": "HTTP/1.1",
74
- "request_uri": "http://logfile_elb_name-00000000.ap-northeast-1.elb.amazonaws.com:80/",
75
- "response_processing_time": "0.00007",
76
- "sent_bytes": "9",
77
- "time": "2014-03-09T04:10:33.785083Z"
84
+ "account_id":"123456789012",
85
+ "region":"ap-northeast-1",
86
+ "logfile_date":"2015/06/15",
87
+ "logfile_elb_name":"my-elb-name",
88
+ "elb_ip_address":"52.0.0.0",
89
+ "logfile_hash":"12squv5w",
90
+ "elb_timestamp":"20150615T0400Z",
91
+ "key":"TEST/AWSLogs/123456789012/elasticloadbalancing/ap-northeast-1/2015/06/15/123456789012_elasticloadbalancing_ap-northeast-1_my-elb-name_20150615T0400Z_52.68.215.138_69squv5w.log",
92
+ "prefix":"TEST",
93
+ "elb_timestamp_unixtime":1434340800,
94
+ "time":"2015-06-15T03:47:12.728427+0000",
95
+ "elb":"my-elb-name",
96
+ "client":"54.1.1.1",
97
+ "client_port":"43759",
98
+ "backend":"10.0.0.1",
99
+ "backend_port":"80",
100
+ "request_processing_time":4.0e-05,
101
+ "backend_processing_time":0.105048,
102
+ "response_processing_time":2.4e-05,
103
+ "elb_status_code":"200",
104
+ "backend_status_code":"200",
105
+ "received_bytes":0,
106
+ "sent_bytes":4622,
107
+ "request_method":"GET",
108
+ "request_uri":"https://my-elb-test.example.com/",
109
+ "request_protocol":"HTTP/1.1",
110
+ "user_agent":"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)",
111
+ "option1":"DHE-RSA-AES128-SHA",
112
+ "option2":"TLSv1.2",
113
+ "option3":null
78
114
  }
79
115
  ```
80
116
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-elb-log"
7
- spec.version = "0.1.4"
7
+ spec.version = "0.2.0"
8
8
  spec.authors = ["shinsaka"]
9
9
  spec.email = ["shinx1265@gmail.com"]
10
10
  spec.summary = "Amazon ELB log input plugin"
@@ -17,10 +17,8 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "fluentd"
21
- spec.add_dependency "aws-sdk", "~> 1.38"
20
+ spec.add_dependency "fluentd", "~> 0"
21
+ spec.add_dependency "aws-sdk", "~> 2"
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.5"
24
- spec.add_development_dependency "rake"
25
- spec.add_development_dependency "webmock"
23
+ spec.add_development_dependency "bundler", "~> 1.7"
26
24
  end
@@ -2,13 +2,14 @@ class Fluent::Elb_LogInput < Fluent::Input
2
2
  Fluent::Plugin.register_input('elb_log', self)
3
3
 
4
4
  LOGFILE_REGEXP = /^((?<prefix>.+?)\/|)AWSLogs\/(?<account_id>[0-9]{12})\/elasticloadbalancing\/(?<region>.+?)\/(?<logfile_date>[0-9]{4}\/[0-9]{2}\/[0-9]{2})\/[0-9]{12}_elasticloadbalancing_.+?_(?<logfile_elb_name>[^_]+)_(?<elb_timestamp>[0-9]{8}T[0-9]{4}Z)_(?<elb_ip_address>.+?)_(?<logfile_hash>.+)\.log$/
5
- ACCESSLOG_REGEXP = /^(?<time>\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d{6}Z) (?<elb>.+?) (?<client>.+)\:(?<client_port>.+) (?<backend>.+)\:(?<backend_port>.+) (?<request_processing_time>.+?) (?<backend_processing_time>.+?) (?<response_processing_time>.+?) (?<elb_status_code>.+?) (?<backend_status_code>.+?) (?<received_bytes>.+?) (?<sent_bytes>.+?) \"(?<request_method>.+?) (?<request_uri>.+?) (?<request_protocol>.+?)\"$/
5
+ ACCESSLOG_REGEXP = /^(?<time>\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d{6}Z) (?<elb>.+?) (?<client>.+?)\:(?<client_port>.+?) (?<backend>.+?)\:(?<backend_port>.+?) (?<request_processing_time>.+?) (?<backend_processing_time>.+?) (?<response_processing_time>.+?) (?<elb_status_code>.+?) (?<backend_status_code>.+?) (?<received_bytes>.+?) (?<sent_bytes>.+?) \"(?<request_method>.+?) (?<request_uri>.+?) (?<request_protocol>.+?)\" \"(?<user_agent>.*?)\" (?<option1>.+?) (?<option2>.+)(| (?<option3>.*))/
6
6
 
7
7
  config_param :access_key_id, :string, :default => nil
8
8
  config_param :secret_access_key, :string, :default => nil
9
+ config_param :region, :string, :default => nil
9
10
  config_param :s3_bucketname, :string, :default => nil
10
11
  config_param :s3_prefix, :string, :default => nil
11
- config_param :s3_endpoint, :string, :default => 's3.amazon.com'
12
+ config_param :tag, :string, :default => 'elb.access'
12
13
  config_param :timestamp_file, :string, :default => nil
13
14
  config_param :refresh_interval, :integer, :default => 300
14
15
  config_param :buf_file, :string, :default => './fluentd_elb_log_buf_file'
@@ -18,24 +19,23 @@ class Fluent::Elb_LogInput < Fluent::Input
18
19
  super
19
20
  require 'aws-sdk'
20
21
 
21
- if @access_key_id.nil? and has_not_iam_role?
22
- raise Fluent::ConfigError.new("access_key_id is required")
22
+ raise Fluent::ConfigError.new("region is required") unless @region
23
+ if !has_iam_role?
24
+ raise Fluent::ConfigError.new("access_key_id is required") if @access_key_id.nil?
25
+ raise Fluent::ConfigError.new("secret_access_key is required") if @secret_access_key.nil?
23
26
  end
24
- if @secret_access_key.nil? and has_not_iam_role?
25
- raise Fluent::ConfigError.new("secret_access_key is required")
26
- end
27
-
28
27
  raise Fluent::ConfigError.new("s3_bucketname is required") unless @s3_bucketname
29
28
  raise Fluent::ConfigError.new("timestamp_file is required") unless @timestamp_file
30
- raise Fluent::ConfigError.new("s3 bucket fetch error #{@s3_bucketname}") if init_s3bucket.nil?
31
- FileUtils.touch(@buf_file)
32
29
  end
33
30
 
34
31
  def start
35
32
  super
36
33
 
37
- @timestamp_file = File.open(@timestamp_file, File::RDWR|File::CREAT)
38
- @timestamp_file.sync = true
34
+ # files touch
35
+ File.open(@timestamp_file, File::RDWR|File::CREAT).close
36
+ File.open(@buf_file, File::RDWR|File::CREAT).close
37
+
38
+ raise StandardError.new("s3 bucket not found #{@s3_bucketname}") unless s3bucket_is_ok()
39
39
 
40
40
  @loop = Coolio::Loop.new
41
41
  timer_trigger = TimerWatcher.new(@refresh_interval, true, &method(:input))
@@ -47,142 +47,223 @@ class Fluent::Elb_LogInput < Fluent::Input
47
47
  super
48
48
  @loop.stop
49
49
  @thread.join
50
- @timestamp_file.close
51
50
  end
52
51
 
53
52
  private
54
53
 
55
- def init_s3bucket
56
- options = {}
57
- if @access_key_id && @secret_access_key
58
- options[:access_key_id] = @access_key_id
59
- options[:secret_access_key] = @secret_access_key
60
- end
61
- options[:s3_endpoint] = @s3_endpoint if @s3_endpoint
62
- if @proxy_uri
63
- options[:proxy_uri] = @proxy_uri
54
+ def has_iam_role?
55
+ begin
56
+ ec2 = Aws::EC2::Client.new(region: @region)
57
+ !ec2.config.credentials.nil?
58
+ rescue => e
59
+ $log.warn "EC2 Client error occurred: #{e.message}"
64
60
  end
61
+ end
65
62
 
63
+ def get_timestamp_file
66
64
  begin
67
- @bucket = AWS::S3.new(options).buckets[@s3_bucketname]
68
- @bucket.objects.count
65
+ # get timestamp last proc
66
+ timestamp = 0
67
+ $log.debug "timestamp file #{@timestamp_file} read"
68
+ File.open(@timestamp_file, File::RDONLY) do |file|
69
+ timestamp = file.read.to_i
70
+ end
71
+ $log.debug "timestamp start at:" + Time.at(timestamp).to_s
72
+ return timestamp
69
73
  rescue => e
70
- $log.warn "fluent-plugin-elb-log: s3 bucket fetch error: #{e.message}"
71
- nil
74
+ $log.warn "timestamp file get and parse error occurred: #{e.message}"
72
75
  end
73
76
  end
74
77
 
75
- def run
76
- @loop.run
78
+ def put_timestamp_file(timestamp)
79
+ begin
80
+ $log.debug "timestamp file #{@timestamp_file} write"
81
+ File.open(@timestamp_file, File::WRONLY|File::CREAT|File::TRUNC) do |file|
82
+ file.puts timestamp.to_s
83
+ end
84
+ rescue => e
85
+ $log.warn "timestamp file get and parse error occurred: #{e.message}"
86
+ end
77
87
  end
78
88
 
79
- def input
80
- $log.info "fluent-plugin-elb-log: input start"
81
-
82
- # get timestamp last proc
83
- @timestamp_file.rewind
84
- timestamp = @timestamp_file.read.to_i
85
- timestamp = 0 unless timestamp
86
- $log.info "fluent-plugin-elb-log: timestamp at start: " + Time.at(timestamp).to_s
87
-
88
- log_objects = []
89
- @bucket.objects.each do |obj|
90
- next if obj.last_modified.to_i <= timestamp
91
- matches = LOGFILE_REGEXP.match(obj.key)
92
- next unless matches
93
- next if !@s3_prefix.nil? && matches[:prefix] != @s3_prefix
94
- log_objects.push obj
89
+ def s3_client
90
+ begin
91
+ options = {
92
+ :region => @region,
93
+ }
94
+ if @access_key_id && @secret_access_key
95
+ options[:access_key_id] = @access_key_id
96
+ options[:secret_access_key] = @secret_access_key
97
+ end
98
+ $log.debug "S3 client connect"
99
+ Aws::S3::Client.new(options)
100
+ rescue => e
101
+ $log.warn "S3 Client error occurred: #{e.message}"
95
102
  end
103
+ end
104
+
105
+ def s3bucket_is_ok
106
+ begin
107
+ $log.debug "search bucket #{@s3_bucketname}"
96
108
 
97
- # sort by timestamp
98
- log_objects.sort! do |a,b|
99
- LOGFILE_REGEXP.match(a.key)[:elb_timestamp] <=> LOGFILE_REGEXP.match(b.key)[:elb_timestamp]
109
+ s3_client.list_buckets.buckets.any? do |bucket|
110
+ bucket.name == @s3_bucketname
111
+ end
112
+ rescue => e
113
+ $log.warn "S3 Client error occurred: #{e.message}"
100
114
  end
115
+ end
116
+
117
+ def input
118
+ $log.debug "start"
119
+
120
+ timestamp = get_timestamp_file()
121
+
122
+ object_keys = get_object_keys(timestamp)
123
+ object_keys = sort_object_key(object_keys)
124
+
125
+ $log.info "processing #{object_keys.count} object(s)."
101
126
 
102
- log_objects.each do |obj|
103
- matches = LOGFILE_REGEXP.match(obj.key)
104
- timestamp = matches[:elb_timestamp].to_i
127
+ object_keys.each do |object_key|
105
128
  record_common = {
106
- "account_id" => matches[:account_id],
107
- "region" => matches[:region],
108
- "logfile_date" => matches[:logfile_date],
109
- "logfile_elb_name" => matches[:logfile_elb_name],
110
- "elb_ip_address" => matches[:elb_ip_address],
111
- "logfile_hash" => matches[:logfile_hash],
112
- "elb_timestamp" => matches[:elb_timestamp],
129
+ "account_id" => object_key[:account_id],
130
+ "region" => object_key[:region],
131
+ "logfile_date" => object_key[:logfile_date],
132
+ "logfile_elb_name" => object_key[:logfile_elb_name],
133
+ "elb_ip_address" => object_key[:elb_ip_address],
134
+ "logfile_hash" => object_key[:logfile_hash],
135
+ "elb_timestamp" => object_key[:elb_timestamp],
136
+ "key" => object_key[:key],
137
+ "prefix" => object_key[:prefix],
138
+ "elb_timestamp_unixtime" => object_key[:elb_timestamp_unixtime],
113
139
  }
114
140
 
115
- # read an object from S3 to a file and write buffer file
116
- File.open(@buf_file, File::WRONLY) do |file|
117
- obj.read do |chunk|
118
- file.write(chunk)
119
- end
120
- end
141
+ get_file_from_s3(object_key[:key])
142
+ emit_lines_from_buffer_file(record_common)
143
+
144
+ put_timestamp_file(object_key[:elb_timestamp_unixtime])
145
+ end
146
+ end
147
+
148
+ def get_object_keys(timestamp)
149
+ # get values from object file name
150
+ begin
151
+ object_keys = []
152
+
153
+ objects = s3_client.list_objects(
154
+ bucket: @s3_bucketname,
155
+ max_keys: 100,
156
+ prefix: @s3_prefix,
157
+ )
158
+
159
+ objects.each do |object|
160
+ object.contents.each do |content|
161
+ matches = LOGFILE_REGEXP.match(content.key)
162
+ next unless matches
121
163
 
122
- emit_lines_from_buffer_file record_common
164
+ # snip old items
165
+ elb_timestamp_unixtime = Time.parse(matches[:elb_timestamp]).to_i
166
+ next if elb_timestamp_unixtime <= timestamp
123
167
 
124
- # timestamp save
125
- @timestamp_file.rewind
126
- @timestamp_file.write(obj.last_modified.to_i)
127
- @timestamp_file.truncate(@timestamp_file.tell)
128
- $log.info "fluent-plugin-elb-log: timestamp save: " + obj.last_modified.to_s
168
+ $log.debug content.key
169
+ object_keys << {
170
+ key: content.key,
171
+ prefix: matches[:prefix],
172
+ account_id: matches[:account_id],
173
+ region: matches[:region],
174
+ logfile_date: matches[:logfile_date],
175
+ logfile_elb_name: matches[:logfile_elb_name],
176
+ elb_timestamp: matches[:elb_timestamp],
177
+ elb_ip_address: matches[:elb_ip_address],
178
+ logfile_hash: matches[:logfile_hash],
179
+ elb_timestamp_unixtime: elb_timestamp_unixtime,
180
+ }
181
+ end
182
+ end
183
+ return object_keys
184
+ rescue => e
185
+ $log.warn "error occurred: #{e.message}"
129
186
  end
130
187
  end
131
188
 
132
- def emit_lines_from_buffer_file(record_common)
133
- # emit per line
134
- File.open(@buf_file, File::RDONLY) do |file|
135
- file.each_line do |line|
136
- line_match = ACCESSLOG_REGEXP.match(line)
137
- next unless line_match
138
-
139
- record = {
140
- "time" => line_match[:time].gsub(/Z/, "+0000"),
141
- "elb" => line_match[:elb],
142
- "client" => line_match[:client],
143
- "client_port" => line_match[:client_port],
144
- "backend" => line_match[:backend],
145
- "backend_port" => line_match[:backend_port],
146
- "request_processing_time" => line_match[:request_processing_time].to_f,
147
- "backend_processing_time" => line_match[:backend_processing_time].to_f,
148
- "response_processing_time" => line_match[:response_processing_time].to_f,
149
- "elb_status_code" => line_match[:elb_status_code],
150
- "backend_status_code" => line_match[:backend_status_code],
151
- "received_bytes" => line_match[:received_bytes].to_i,
152
- "sent_bytes" => line_match[:sent_bytes].to_i,
153
- "request_method" => line_match[:request_method],
154
- "request_uri" => line_match[:request_uri],
155
- "request_protocol" => line_match[:request_protocol],
156
- }
157
-
158
- Fluent::Engine.emit("elb.access", Fluent::Engine.now, record_common.merge(record))
189
+ def sort_object_key(src_object_keys)
190
+ begin
191
+ src_object_keys.sort do |a, b|
192
+ a[:elb_timestamp_unixtime] <=> b[:elb_timestamp_unixtime]
159
193
  end
194
+ rescue => e
195
+ $log.warn "error occurred: #{e.message}"
160
196
  end
161
197
  end
162
198
 
163
- def has_iam_role?
164
- return @has_iam_role unless @has_iam_role.nil?
199
+ def get_file_from_s3(object_name)
200
+ begin
201
+ $log.debug "getting object from s3 name is #{object_name}"
165
202
 
166
- require 'net/http'
167
- @has_iam_role = false
203
+ # read an object from S3 to a file and write buffer file
204
+ File.open(@buf_file, File::WRONLY|File::CREAT|File::TRUNC) do |file|
205
+ s3_client.get_object(
206
+ bucket: @s3_bucketname,
207
+ key: object_name
208
+ ) do |chunk|
209
+ file.write(chunk)
210
+ end
211
+ end
212
+ rescue => e
213
+ $log.warn "error occurred: #{e.message}"
214
+ end
215
+ end
216
+
217
+ def emit_lines_from_buffer_file(record_common)
168
218
  begin
169
- http = Net::HTTP.new('169.254.169.254', '80')
170
- http.open_timeout = 5 # sec
171
- response = http.request(Net::HTTP::Get.new('/latest/meta-data/iam/info'))
172
- @has_iam_role = true if response.code == '200'
219
+ # emit per line
220
+ File.open(@buf_file, File::RDONLY) do |file|
221
+ file.each_line do |line|
222
+ line_match = ACCESSLOG_REGEXP.match(line)
223
+ unless line_match
224
+ $log.info "nomatch log found: #{line} in #{record_common['key']}"
225
+ next
226
+ end
227
+
228
+ record = {
229
+ "time" => line_match[:time].gsub(/Z/, "+0000"),
230
+ "elb" => line_match[:elb],
231
+ "client" => line_match[:client],
232
+ "client_port" => line_match[:client_port],
233
+ "backend" => line_match[:backend],
234
+ "backend_port" => line_match[:backend_port],
235
+ "request_processing_time" => line_match[:request_processing_time].to_f,
236
+ "backend_processing_time" => line_match[:backend_processing_time].to_f,
237
+ "response_processing_time" => line_match[:response_processing_time].to_f,
238
+ "elb_status_code" => line_match[:elb_status_code],
239
+ "backend_status_code" => line_match[:backend_status_code],
240
+ "received_bytes" => line_match[:received_bytes].to_i,
241
+ "sent_bytes" => line_match[:sent_bytes].to_i,
242
+ "request_method" => line_match[:request_method],
243
+ "request_uri" => line_match[:request_uri],
244
+ "request_protocol" => line_match[:request_protocol],
245
+ "user_agent" => line_match[:user_agent],
246
+ "option1" => line_match[:option1],
247
+ "option2" => line_match[:option2],
248
+ "option3" => line_match[:option3],
249
+ }
250
+
251
+ Fluent::Engine.emit(@tag, Fluent::Engine.now, record_common.merge(record))
252
+ end
253
+ end
173
254
  rescue => e
174
- $log.warn "fluent-plugin-elb-log: #{e.message}"
255
+ $log.warn "error occurred: #{e.message}"
175
256
  end
176
- @has_iam_role
177
257
  end
178
258
 
179
- def has_not_iam_role?
180
- !has_iam_role?
259
+ def run
260
+ @loop.run
181
261
  end
182
262
 
183
263
  class TimerWatcher < Coolio::TimerWatcher
184
264
  def initialize(interval, repeat, &callback)
185
265
  @callback = callback
266
+ on_timer # first call
186
267
  super(interval, repeat)
187
268
  end
188
269
 
metadata CHANGED
@@ -1,96 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-elb-log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - shinsaka
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-06-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: fluentd
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: aws-sdk
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: '1.38'
33
+ version: '2'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
- version: '1.38'
40
+ version: '2'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: bundler
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '1.5'
47
+ version: '1.7'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
- version: '1.5'
62
- - !ruby/object:Gem::Dependency
63
- name: rake
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: webmock
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
54
+ version: '1.7'
94
55
  description: Amazon ELB log input plugin for fluentd
95
56
  email:
96
57
  - shinx1265@gmail.com
@@ -98,8 +59,8 @@ executables: []
98
59
  extensions: []
99
60
  extra_rdoc_files: []
100
61
  files:
101
- - .gitignore
102
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".travis.yml"
103
64
  - Gemfile
104
65
  - LICENSE.txt
105
66
  - README.md
@@ -112,27 +73,26 @@ files:
112
73
  homepage: https://github.com/shinsaka/fluent-plugin-elb-log
113
74
  licenses:
114
75
  - MIT
76
+ metadata: {}
115
77
  post_install_message:
116
78
  rdoc_options: []
117
79
  require_paths:
118
80
  - lib
119
81
  required_ruby_version: !ruby/object:Gem::Requirement
120
- none: false
121
82
  requirements:
122
- - - ! '>='
83
+ - - ">="
123
84
  - !ruby/object:Gem::Version
124
85
  version: '0'
125
86
  required_rubygems_version: !ruby/object:Gem::Requirement
126
- none: false
127
87
  requirements:
128
- - - ! '>='
88
+ - - ">="
129
89
  - !ruby/object:Gem::Version
130
90
  version: '0'
131
91
  requirements: []
132
92
  rubyforge_project:
133
- rubygems_version: 1.8.23
93
+ rubygems_version: 2.2.1
134
94
  signing_key:
135
- specification_version: 3
95
+ specification_version: 4
136
96
  summary: Amazon ELB log input plugin
137
97
  test_files:
138
98
  - test/helper.rb