fluent-plugin-cloudwatch-logs 0.0.1 → 0.0.2

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: 82f4aa50c7c50dd4fb39644824405fe597e44dbc
4
- data.tar.gz: 7af64b0786713b5afaa6aa9e15c4a5c2b14cf41e
3
+ metadata.gz: 9ba82ca82f0ebbaf1df3fb81e42606433d99b520
4
+ data.tar.gz: e29e78f866b41a7623d27c3d1af5428fd23b00ce
5
5
  SHA512:
6
- metadata.gz: 0e96bd6e04ce768e9b5ace8492ff5e77d8de77f8203416711a4acb7efdfe5ddea805503c875434884d6e8b6cbebab991b19b7f492c7c9fce2fdb53a3a7ac8370
7
- data.tar.gz: c204752a267e1083c8ff1e5ff2237611fc44a2293d59247761242fc8c5d1ffaddc9da64773ecd2f00cbe21506604b5ec072d14b2d17aca733b5af69fba9126d9
6
+ metadata.gz: 12e1b6c8596c9da1fa8945ca8cee1e553b0b5019812c55d2c082c11df74332683f61f7d07d9d99e8a0a51448ae8c92070343d37740f80cb0f1c1279dd66b3dfc
7
+ data.tar.gz: db5edcaa122522537ad34ec72dbeb49e9f420dc6f29ef02b7f47a24180abde671f0643904710d930e1c415d3c991d2fbf3e12b867589343e186fb9e178700c92
data/README.md CHANGED
@@ -1,11 +1,42 @@
1
1
  # fluent-plugin-cloudwatch-logs
2
2
 
3
- CloudWatch Logs Plugin for Fluentd
3
+ [CloudWatch Logs](http://aws.amazon.com/blogs/aws/cloudwatch-log-service/) Plugin for Fluentd
4
4
 
5
5
  ## Installation
6
6
 
7
7
  $ gem install fluent-plugin-cloudwatch-logs
8
8
 
9
+ ## Preparation
10
+
11
+ Create IAM user with a policy like the following:
12
+
13
+ ```json
14
+ {
15
+ "Version": "2012-10-17",
16
+ "Statement": [
17
+ {
18
+ "Effect": "Allow",
19
+ "Action": [
20
+ "logs:*",
21
+ "s3:GetObject"
22
+ ],
23
+ "Resource": [
24
+ "arn:aws:logs:us-east-1:*:*",
25
+ "arn:aws:s3:::*"
26
+ ]
27
+ }
28
+ ]
29
+ }
30
+ ```
31
+
32
+ Set region and credentials:
33
+
34
+ ```
35
+ $ export AWS_REGION=us-east-1
36
+ $ export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY"
37
+ $ export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"
38
+ ```
39
+
9
40
  ## Example
10
41
 
11
42
  Start fluentd:
@@ -27,7 +58,8 @@ Fetch sample log from CloudWatch Logs:
27
58
  2014-07-17 00:28:02 +0900 test.cloudwatch_logs.in: {"hello":"world"}
28
59
  ```
29
60
 
30
- ## out_cloudwatch_logs
61
+ ## Configuration
62
+ ### out_cloudwatch_logs
31
63
 
32
64
  ```
33
65
  <match tag>
@@ -39,7 +71,12 @@ Fetch sample log from CloudWatch Logs:
39
71
  </match>
40
72
  ```
41
73
 
42
- ## in_cloudwatch_logs
74
+ * `log_group_name`: name of log group to store logs
75
+ * `log_stream_name`: name of log stream to store logs
76
+ * `sequence_token_file`: file to store next sequence token
77
+ * `auto_create_stream`: to create log group and stream automatically
78
+
79
+ ### in_cloudwatch_logs
43
80
 
44
81
  ```
45
82
  <source>
@@ -51,6 +88,11 @@ Fetch sample log from CloudWatch Logs:
51
88
  </source>
52
89
  ```
53
90
 
91
+ * `tag`: fluentd tag
92
+ * `log_group_name`: name of log group to fetch logs
93
+ * `log_stream_name`: name of log stream to fetch logs
94
+ * `state_file`: file to store current state (e.g. next\_forward\_token)
95
+
54
96
  ## Test
55
97
 
56
98
  Set credentials:
@@ -67,6 +109,12 @@ Run tests:
67
109
  $ rake test
68
110
  ```
69
111
 
112
+ Or, If you do not want to use IAM roll or ENV(this is just like writing to configuration file) :
113
+
114
+ ```
115
+ $ rake aws_key_id=YOUR_ACCESS_KEY aws_sec_key=YOUR_SECRET_KEY region=us-east-1 test
116
+ ```
117
+
70
118
  ## TODO
71
119
 
72
120
  * out_cloudwatch_logs
@@ -2,7 +2,7 @@ module Fluent
2
2
  module Plugin
3
3
  module Cloudwatch
4
4
  module Logs
5
- VERSION = "0.0.1"
5
+ VERSION = "0.0.2"
6
6
  end
7
7
  end
8
8
  end
@@ -2,6 +2,9 @@ module Fluent
2
2
  class CloudwatchLogsInput < Input
3
3
  Plugin.register_input('cloudwatch_logs', self)
4
4
 
5
+ config_param :aws_key_id, :string, :default => nil
6
+ config_param :aws_sec_key, :string, :default => nil
7
+ config_param :region, :string, :default => nil
5
8
  config_param :tag, :string
6
9
  config_param :log_group_name, :string
7
10
  config_param :log_stream_name, :string
@@ -12,10 +15,14 @@ module Fluent
12
15
  super
13
16
 
14
17
  require 'aws-sdk-core'
15
- @logs = Aws::CloudWatchLogs.new
16
18
  end
17
19
 
18
20
  def start
21
+ options = {}
22
+ options[:credentials] = Aws::Credentials.new(@aws_key_id, @aws_sec_key) if @aws_key_id && @aws_sec_key
23
+ options[:region] = @region if @region
24
+ @logs = Aws::CloudWatchLogs.new(options)
25
+
19
26
  @finished = false
20
27
  @thread = Thread.new(&method(:run))
21
28
  end
@@ -2,6 +2,9 @@ module Fluent
2
2
  class CloudwatchLogsOutput < BufferedOutput
3
3
  Plugin.register_output('cloudwatch_logs', self)
4
4
 
5
+ config_param :aws_key_id, :string, :default => nil
6
+ config_param :aws_sec_key, :string, :default => nil
7
+ config_param :region, :string, :default => nil
5
8
  config_param :log_group_name, :string
6
9
  config_param :log_stream_name, :string
7
10
  config_param :sequence_token_file, :string
@@ -15,12 +18,16 @@ module Fluent
15
18
  super
16
19
 
17
20
  require 'aws-sdk-core'
18
- @logs = Aws::CloudWatchLogs.new
19
21
  end
20
22
 
21
- def configure(conf)
23
+ def start
22
24
  super
23
25
 
26
+ options = {}
27
+ options[:credentials] = Aws::Credentials.new(@aws_key_id, @aws_sec_key) if @aws_key_id && @aws_sec_key
28
+ options[:region] = @region if @region
29
+ @logs = Aws::CloudWatchLogs.new(options)
30
+
24
31
  create_stream if @auto_create_stream
25
32
  end
26
33
 
@@ -78,4 +85,3 @@ module Fluent
78
85
  end
79
86
  end
80
87
  end
81
-
@@ -16,12 +16,18 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
16
16
  def test_configure
17
17
  d = create_driver(<<-EOC)
18
18
  type cloudwatch_logs
19
+ aws_key_id test_id
20
+ aws_sec_key test_key
21
+ region us-east-1
19
22
  tag test
20
23
  log_group_name group
21
24
  log_stream_name stream
22
25
  state_file /tmp/state
23
26
  EOC
24
27
 
28
+ assert_equal('test_id', d.instance.aws_key_id)
29
+ assert_equal('test_key', d.instance.aws_sec_key)
30
+ assert_equal('us-east-1', d.instance.region)
25
31
  assert_equal('test', d.instance.tag)
26
32
  assert_equal('group', d.instance.log_group_name)
27
33
  assert_equal('stream', d.instance.log_stream_name)
@@ -43,7 +49,7 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
43
49
  d.run do
44
50
  sleep 5
45
51
  end
46
-
52
+
47
53
  emits = d.emits
48
54
  assert_equal(2, emits.size)
49
55
  assert_equal(['test', (time_ms / 1000).floor, {'cloudwatch' => 'logs1'}], emits[0])
@@ -58,6 +64,9 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
58
64
  log_group_name #{log_group_name}
59
65
  log_stream_name #{log_stream_name}
60
66
  state_file /tmp/state
67
+ #{aws_key_id}
68
+ #{aws_sec_key}
69
+ #{region}
61
70
  EOC
62
71
  end
63
72
 
@@ -65,4 +74,3 @@ class CloudwatchLogsInputTest < Test::Unit::TestCase
65
74
  Fluent::Test::InputTestDriver.new(Fluent::CloudwatchLogsInput).configure(conf)
66
75
  end
67
76
  end
68
-
@@ -8,24 +8,29 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
8
8
  Fluent::Test.setup
9
9
  require 'fluent/plugin/out_cloudwatch_logs'
10
10
 
11
- @logs = Aws::CloudWatchLogs.new
12
11
  end
13
12
 
14
13
  def teardown
15
14
  clear_log_group
16
15
  FileUtils.rm_f(sequence_token_file)
17
16
  end
18
-
17
+
19
18
 
20
19
  def test_configure
21
20
  d = create_driver(<<-EOC)
22
21
  type cloudwatch_logs
22
+ aws_key_id test_id
23
+ aws_sec_key test_key
24
+ region us-east-1
23
25
  log_group_name test_group
24
26
  log_stream_name test_stream
25
27
  sequence_token_file /tmp/sq
26
28
  auto_create_stream false
27
29
  EOC
28
30
 
31
+ assert_equal('test_id', d.instance.aws_key_id)
32
+ assert_equal('test_key', d.instance.aws_sec_key)
33
+ assert_equal('us-east-1', d.instance.region)
29
34
  assert_equal('test_group', d.instance.log_group_name)
30
35
  assert_equal('test_stream', d.instance.log_stream_name)
31
36
  assert_equal('/tmp/sq', d.instance.sequence_token_file)
@@ -41,7 +46,7 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
41
46
  d.emit({'cloudwatch' => 'logs2'}, time.to_i + 1)
42
47
  d.run
43
48
 
44
- sleep 5
49
+ sleep 20
45
50
 
46
51
  events = get_log_events
47
52
  assert_equal(2, events.size)
@@ -59,6 +64,9 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
59
64
  log_stream_name #{log_stream_name}
60
65
  sequence_token_file #{sequence_token_file}
61
66
  auto_create_stream true
67
+ #{aws_key_id}
68
+ #{aws_sec_key}
69
+ #{region}
62
70
  EOC
63
71
  end
64
72
 
@@ -6,13 +6,28 @@ require 'aws-sdk-core'
6
6
  module CloudwatchLogsTestHelper
7
7
  private
8
8
  def logs
9
- @logs ||= Aws::CloudWatchLogs.new
9
+ options = {}
10
+ options[:credentials] = Aws::Credentials.new(ENV['aws_key_id'], ENV['aws_sec_key']) if ENV['aws_key_id'] && ENV['aws_sec_key']
11
+ options[:region] = ENV['region'] if ENV['region']
12
+ @logs ||= Aws::CloudWatchLogs.new(options)
10
13
  end
11
14
 
12
15
  def log_group_name
13
16
  @log_group_name ||= "fluent-plugin-cloudwatch-test-#{Time.now.to_f}"
14
17
  end
15
18
 
19
+ def aws_key_id
20
+ "aws_key_id #{ENV['aws_key_id']}" if ENV['aws_key_id']
21
+ end
22
+
23
+ def aws_sec_key
24
+ "aws_sec_key #{ENV['aws_sec_key']}" if ENV['aws_sec_key']
25
+ end
26
+
27
+ def region
28
+ "region #{ENV['region']}" if ENV['region']
29
+ end
30
+
16
31
  def log_stream_name
17
32
  if !@log_stream_name
18
33
  new_log_stream
@@ -57,4 +72,3 @@ module CloudwatchLogsTestHelper
57
72
  logs.put_log_events(args)
58
73
  end
59
74
  end
60
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-cloudwatch-logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-16 00:00:00.000000000 Z
11
+ date: 2014-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd