fluent-plugin-cloudwatch-logs 0.0.9 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8baebdf33279c41e8ff155a945366d3f4b47c801
4
- data.tar.gz: bf2f6284c6550db5599de2b27e03ad7031037d7a
3
+ metadata.gz: d63e33f244adf82bff43836bd21d935eebb5fee8
4
+ data.tar.gz: 6e14fdd4432c7b21c0b0cf6b9c1f6574565a34b9
5
5
  SHA512:
6
- metadata.gz: 6528ea074580ac7f2964a4416c11ac17f7b8bdac8324830728478bc049074bed07b613615a68c027b48948265fcca96b4bc495c80b1aac58a5acdb91eed9a4f1
7
- data.tar.gz: cc21ab19ad8ead46f28eecb9355bf26afa560e83a4899e1f154ee638e3f18a0bc2b431e12e30ca1cacb900d5dc7481bad41536ae94923841ee4b684fec5ae5c1
6
+ metadata.gz: 87332e167639ac1d7a43404849f05bb1820faac2190e2e30ce73672159b2e52f91aa68c7bb3433f815d3969c87fcd0d46c9408a84612bed7243c66afc0e53d60
7
+ data.tar.gz: 52698378e0c3d7a935aec5117eceba6ae3799dedc09e125bc99dd9f2f0608448cc640c08138a3a4d6703884371e868e1252af97773bfbb30e3c117baa02dc429
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # fluent-plugin-cloudwatch-logs
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/fluent-plugin-cloudwatch-logs.svg)](http://badge.fury.io/rb/fluent-plugin-cloudwatch-logs)
4
+
3
5
  [CloudWatch Logs](http://aws.amazon.com/blogs/aws/cloudwatch-log-service/) Plugin for Fluentd
4
6
 
5
7
  ## Installation
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_dependency 'fluentd'
21
- spec.add_dependency 'aws-sdk-core', '~> 2.0.7'
21
+ spec.add_dependency 'aws-sdk-core', '>= 2.0.7'
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.6"
24
24
  spec.add_development_dependency "rake"
@@ -2,7 +2,7 @@ module Fluent
2
2
  module Plugin
3
3
  module Cloudwatch
4
4
  module Logs
5
- VERSION = "0.0.9"
5
+ VERSION = "0.1.0"
6
6
  end
7
7
  end
8
8
  end
@@ -6,11 +6,12 @@ module Fluent
6
6
  config_param :aws_sec_key, :string, :default => nil, :secret => true
7
7
  config_param :region, :string, :default => nil
8
8
  config_param :log_group_name, :string, :default => nil
9
- config_param :log_stream_name, :string
9
+ config_param :log_stream_name, :string, :default => nil
10
10
  config_param :auto_create_stream, :bool, default: false
11
11
  config_param :message_keys, :string, :default => nil
12
12
  config_param :max_message_length, :integer, :default => nil
13
13
  config_param :use_tag_as_group, :bool, :default => false
14
+ config_param :use_tag_as_stream, :bool, :default => false
14
15
  config_param :http_proxy, :string, default: nil
15
16
 
16
17
  MAX_EVENTS_SIZE = 1_048_576
@@ -46,6 +47,7 @@ module Fluent
46
47
  tag
47
48
  }.each {|tag, rs|
48
49
  group_name = @use_tag_as_group ? tag : @log_group_name
50
+ stream_name = @use_tag_as_stream ? tag : @log_stream_name
49
51
 
50
52
  unless log_group_exists?(group_name)
51
53
  if @auto_create_stream
@@ -56,11 +58,11 @@ module Fluent
56
58
  end
57
59
  end
58
60
 
59
- unless log_stream_exists?(group_name, @log_stream_name)
61
+ unless log_stream_exists?(group_name, stream_name)
60
62
  if @auto_create_stream
61
- create_log_stream(group_name, @log_stream_name)
63
+ create_log_stream(group_name, stream_name)
62
64
  else
63
- log.warn "Log stream '#{@log_stream_name}' dose not exists"
65
+ log.warn "Log stream '#{stream_name}' dose not exists"
64
66
  next
65
67
  end
66
68
  end
@@ -85,7 +87,7 @@ module Fluent
85
87
  # The log events in the batch must be in chronological ordered by their timestamp.
86
88
  # http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html
87
89
  events = events.sort_by {|e| e[:timestamp] }
88
- put_events_by_chunk(group_name, events)
90
+ put_events_by_chunk(group_name, stream_name, events)
89
91
  }
90
92
  end
91
93
 
@@ -98,14 +100,14 @@ module Fluent
98
100
  @sequence_tokens[group_name][stream_name] = token
99
101
  end
100
102
 
101
- def put_events_by_chunk(group_name, events)
103
+ def put_events_by_chunk(group_name, stream_name, events)
102
104
  chunk = []
103
105
 
104
106
  # The maximum batch size is 1,048,576 bytes, and this size is calculated as the sum of all event messages in UTF-8, plus 26 bytes for each log event.
105
107
  # http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html
106
108
  while event = events.shift
107
109
  if (chunk + [event]).inject(0) {|sum, e| sum + e[:message].length + 26 } > MAX_EVENTS_SIZE
108
- put_events(group_name, chunk)
110
+ put_events(group_name, stream_name, chunk)
109
111
  chunk = [event]
110
112
  else
111
113
  chunk << event
@@ -113,21 +115,21 @@ module Fluent
113
115
  end
114
116
 
115
117
  unless chunk.empty?
116
- put_events(group_name, chunk)
118
+ put_events(group_name, stream_name, chunk)
117
119
  end
118
120
  end
119
121
 
120
- def put_events(group_name, events)
122
+ def put_events(group_name, stream_name, events)
121
123
  args = {
122
124
  log_events: events,
123
125
  log_group_name: group_name,
124
- log_stream_name: @log_stream_name,
126
+ log_stream_name: stream_name,
125
127
  }
126
- token = next_sequence_token(group_name, @log_stream_name)
128
+ token = next_sequence_token(group_name, stream_name)
127
129
  args[:sequence_token] = token if token
128
130
 
129
131
  response = @logs.put_log_events(args)
130
- store_next_sequence_token(group_name, @log_stream_name, response.next_sequence_token)
132
+ store_next_sequence_token(group_name, stream_name, response.next_sequence_token)
131
133
  end
132
134
 
133
135
  def create_log_group(group_name)
@@ -125,6 +125,30 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
125
125
  assert_equal('message2 logs2', events[1].message)
126
126
  end
127
127
 
128
+ def test_write_use_tag_as_stream
129
+ new_log_stream
130
+
131
+ d = create_driver(<<-EOC)
132
+ #{default_config}
133
+ message_keys message,cloudwatch
134
+ use_tag_as_stream true
135
+ EOC
136
+
137
+ time = Time.now
138
+ d.emit({'cloudwatch' => 'logs1', 'message' => 'message1'}, time.to_i)
139
+ d.emit({'cloudwatch' => 'logs2', 'message' => 'message2'}, time.to_i + 1)
140
+ d.run
141
+
142
+ sleep 20
143
+
144
+ events = get_log_events(log_group_name, fluentd_tag)
145
+ assert_equal(2, events.size)
146
+ assert_equal(time.to_i * 1000, events[0].timestamp)
147
+ assert_equal('message1 logs1', events[0].message)
148
+ assert_equal((time.to_i + 1) * 1000, events[1].timestamp)
149
+ assert_equal('message2 logs2', events[1].message)
150
+ end
151
+
128
152
  private
129
153
  def default_config
130
154
  <<-EOC
data/test/test_helper.rb CHANGED
@@ -10,7 +10,7 @@ module CloudwatchLogsTestHelper
10
10
  options[:credentials] = Aws::Credentials.new(ENV['aws_key_id'], ENV['aws_sec_key']) if ENV['aws_key_id'] && ENV['aws_sec_key']
11
11
  options[:region] = ENV['region'] if ENV['region']
12
12
  options[:http_proxy] = ENV['http_proxy'] if ENV['http_proxy']
13
- @logs ||= Aws::CloudWatchLogs.new(options)
13
+ @logs ||= Aws::CloudWatchLogs::Client.new(options)
14
14
  end
15
15
 
16
16
  def log_group_name
@@ -68,8 +68,8 @@ module CloudwatchLogsTestHelper
68
68
  end
69
69
  end
70
70
 
71
- def get_log_events(tag = nil)
72
- logs.get_log_events(log_group_name: tag || log_group_name, log_stream_name: log_stream_name).events
71
+ def get_log_events(group = log_group_name, stream = log_stream_name)
72
+ logs.get_log_events(log_group_name: group, log_stream_name: stream).events
73
73
  end
74
74
 
75
75
  def put_log_events(events)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-cloudwatch-logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
@@ -28,14 +28,14 @@ dependencies:
28
28
  name: aws-sdk-core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.0.7
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.7
41
41
  - !ruby/object:Gem::Dependency