fluent-plugin-cloudwatch-logs 0.10.0 → 0.10.1

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
  SHA256:
3
- metadata.gz: 105e96fa516c4f972fc2b01f83c1daa30d39ff4b827b46b811b9f30514231516
4
- data.tar.gz: 85741a1b0ccad0f9e207c837e7417b786ef68d1fc1552cbe80b73030e5b4191b
3
+ metadata.gz: 3445e1c11e8856669ee57b3557865f0f4944699dd49a93c61e518c3cbe88de9b
4
+ data.tar.gz: 43453d4dd9eefed4805541de0e69f0715e2caf9d451c705c5ab403a77f85473b
5
5
  SHA512:
6
- metadata.gz: 84a8458e9704102609b382b9cb8fe4c332a1c1b9c9562b89b959961bb3624958cbffc1f965eba2a502c10a0e45f1ceb427a987681d5420c35663bc6df88295ed
7
- data.tar.gz: d6e22ad22c4eef5cb6c8fab7690ca75585e7ad99756926181f50c43fef70df0e52e12722e14809b793947e56ed8199fc393a318f42308f05fd6d23d6aa9a4b13
6
+ metadata.gz: 8fa3558069bba0d7d9ffe98d61357eef71fd05648c5eaedc614fe0b5a0ced11d8a8fb2bb34a43b4dcab7990bcfd07f4540406334a46293b75be84b2c5986af54
7
+ data.tar.gz: 7e1a3196f98975d0f9a24d0f14b3a49f14e603eefc76533384fe4bc5bec4547ef9e78d8690ea99c282e04ba861c8ca243684da3ee5ffaa12645f6aa59fe1c670
@@ -0,0 +1,12 @@
1
+ name: Autocloser
2
+ on: [issues]
3
+ jobs:
4
+ autoclose:
5
+ runs-on: ubuntu-latest
6
+ steps:
7
+ - name: Autoclose issues that did not follow issue template
8
+ uses: roots/issue-closer-action@v1.1
9
+ with:
10
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
11
+ issue-close-message: "@${issue.user.login} this issue was automatically closed because it did not follow the issue template."
12
+ issue-pattern: "(.*Problem.*)|(.*Expected Behavior or What you need to ask.*)|(.*Using Fluentd and CloudWatchLogs plugin versions.*)"
data/README.md CHANGED
@@ -43,6 +43,46 @@ Create IAM user with a policy like the following:
43
43
  }
44
44
  ```
45
45
 
46
+ More restricted IAM policy for `out_cloudwatch_logs` is:
47
+
48
+ ```json
49
+ {
50
+ "Version": "2012-10-17",
51
+ "Statement": [
52
+ {
53
+ "Action": [
54
+ "logs:PutLogEvents",
55
+ "logs:CreateLogGroup",
56
+ "logs:PutRetentionPolicy",
57
+ "logs:CreateLogStream",
58
+ "logs:DescribeLogGroups",
59
+ "logs:DescribeLogStreams"
60
+ ],
61
+ "Effect": "Allow",
62
+ "Resource": "*"
63
+ }
64
+ ]
65
+ }
66
+ ```
67
+
68
+ Also, more restricted IAM policy for `in_cloudwatch_logs` is:
69
+
70
+ ```json
71
+ {
72
+ "Version": "2012-10-17",
73
+ "Statement": [
74
+ {
75
+ "Action": [
76
+ "logs:GetLogEvents",
77
+ "logs:DescribeLogStreams"
78
+ ],
79
+ "Effect": "Allow",
80
+ "Resource": "*"
81
+ }
82
+ ]
83
+ }
84
+ ```
85
+
46
86
  ## Authentication
47
87
 
48
88
  There are several methods to provide authentication credentials. Be aware that there are various tradeoffs for these methods,
@@ -2,7 +2,7 @@ module Fluent
2
2
  module Plugin
3
3
  module Cloudwatch
4
4
  module Logs
5
- VERSION = "0.10.0"
5
+ VERSION = "0.10.1"
6
6
  end
7
7
  end
8
8
  end
@@ -7,6 +7,8 @@ module Fluent::Plugin
7
7
  class CloudwatchLogsOutput < Output
8
8
  Fluent::Plugin.register_output('cloudwatch_logs', self)
9
9
 
10
+ class TooLargeEventError < Fluent::UnrecoverableError; end
11
+
10
12
  helpers :compat_parameters, :inject
11
13
 
12
14
  DEFAULT_BUFFER_TYPE = "memory"
@@ -319,8 +321,7 @@ module Fluent::Plugin
319
321
  while event = events.shift
320
322
  event_bytesize = event[:message].bytesize + EVENT_HEADER_SIZE
321
323
  if MAX_EVENT_SIZE < event_bytesize
322
- log.warn "Log event in #{group_name} is discarded because it is too large: #{event_bytesize} bytes exceeds limit of #{MAX_EVENT_SIZE}"
323
- break
324
+ raise TooLargeEventError, "Log event in #{group_name} is discarded because it is too large: #{event_bytesize} bytes exceeds limit of #{MAX_EVENT_SIZE}"
324
325
  end
325
326
 
326
327
  new_chunk = chunk + [event]
@@ -399,7 +400,13 @@ module Fluent::Plugin
399
400
  raise err
400
401
  end
401
402
  rescue Aws::CloudWatchLogs::Errors::ThrottlingException => err
402
- if !@put_log_events_disable_retry_limit && @put_log_events_retry_limit < retry_count
403
+ if @put_log_events_retry_limit < 1
404
+ log.warn "failed to PutLogEvents and discard logs because put_log_events_retry_limit is less than 1", {
405
+ "error_class" => err.class.to_s,
406
+ "error" => err.message,
407
+ }
408
+ return
409
+ elsif !@put_log_events_disable_retry_limit && @put_log_events_retry_limit < retry_count
403
410
  log.error "failed to PutLogEvents and discard logs because retry count exceeded put_log_events_retry_limit", {
404
411
  "error_class" => err.class.to_s,
405
412
  "error" => err.message,
@@ -713,6 +713,32 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
713
713
  assert_equal({'cloudwatch' => 'logs2', 'message' => 'message2'}, JSON.parse(events[1].message))
714
714
  end
715
715
 
716
+ def test_retrying_on_throttling_exception_with_put_log_events_retry_limit_as_zero
717
+ client = Aws::CloudWatchLogs::Client.new
718
+ @called = false
719
+ stub(client).put_log_events(anything) {
720
+ raise(Aws::CloudWatchLogs::Errors::ThrottlingException.new(nil, "error"))
721
+ }.once.ordered
722
+
723
+ d = create_driver(<<-EOC)
724
+ #{default_config}
725
+ log_group_name #{log_group_name}
726
+ log_stream_name #{log_stream_name}
727
+ @log_level debug
728
+ put_log_events_retry_limit 0
729
+ EOC
730
+ time = event_time
731
+ d.instance.instance_variable_set(:@logs, client)
732
+ d.run(default_tag: fluentd_tag) do
733
+ d.feed(time, {'message' => 'message1'})
734
+ end
735
+
736
+ logs = d.logs
737
+ assert_equal(0, logs.select {|l| l =~ /Called PutLogEvents API/ }.size)
738
+ assert_equal(1, logs.select {|l| l =~ /failed to PutLogEvents/ }.size)
739
+ assert_equal(0, logs.select {|l| l =~ /retry succeeded/ }.size)
740
+ end
741
+
716
742
  def test_retrying_on_throttling_exception
717
743
  resp = Object.new
718
744
  mock(resp).rejected_log_events_info {}
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.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Arai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-23 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -115,6 +115,7 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
+ - ".github/workflows/issue-auto-closer.yml"
118
119
  - ".gitignore"
119
120
  - ".travis.yml"
120
121
  - Gemfile