fluent-plugin-cloudwatch-logs 0.7.0 → 0.7.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: 0d9202fe11ec14b83d2eaa50fa1797564123dd3dd20363381143955dacf89729
4
- data.tar.gz: c054f3d52d90d7497f818160ab8421f8b69582884b32b6547f6073d7cff6ea16
3
+ metadata.gz: d6ac14d761ae8cfffe1fd6cc11abdc282861f8639924776117c6773a4599057a
4
+ data.tar.gz: 933cc8a97a346ade8287f5fbfc339aa2340a8982c3252cf822a9b95d70c0c78f
5
5
  SHA512:
6
- metadata.gz: 3693fb0907a876f2f0fbaac363e67bfcce42cc2d5b356d0eeb5b2a41fff8e859a2ba3ee3f08977a7f39318a67a220e7489d9d5dce82e7e82bf234fad8e1b9b9f
7
- data.tar.gz: 3bf4f873cd6104e26356790e5867dfa21d17b4d67e06dc7f02b07864b83c3f302c176995c3884fce587e1a201d9c373b256b874edd99414b08b597532eef2cf0
6
+ metadata.gz: 64c6c225b57fe907a6ac9e1941d3cb3a1c0356096aeda2e9213bee288e479c18ed33d73eea754a58474d60e818f6c6ce7f33f5efa0b339c663d3a84f743d8ccf
7
+ data.tar.gz: 5300d8d29f83242479ac2f38c8bdf26bacd3d8dd353f8b286eb593912671ec6143ad26ff3640affbd33293ae07cea1b9bf3d22dcbe0eb81acb2ffc5564cc0aec
@@ -0,0 +1,21 @@
1
+ #### Problem
2
+
3
+ ...
4
+
5
+ #### Steps to replicate
6
+
7
+ Provide example config and message
8
+
9
+ #### Expected Behavior or What you need to ask
10
+
11
+ ...
12
+
13
+ #### Using Fluentd and CloudWatchLogs plugin versions
14
+
15
+ * OS version
16
+ * Bare Metal or within Docker or Kubernetes or others?
17
+ * Fluentd v0.12 or v0.14/v1.0
18
+ * paste result of ``fluentd --version`` or ``td-agent --version``
19
+ * Dependent gem versions
20
+ * paste boot log of fluentd or td-agent
21
+ * paste result of ``fluent-gem list``, ``td-agent-gem list`` or your Gemfile.lock
data/README.md CHANGED
@@ -262,6 +262,30 @@ In this case IAM can be used to allow the fluentd instance in one account ("A")
262
262
  </source>
263
263
  ```
264
264
 
265
+ ### Using build-in placeholders, but they don't replace placeholders with actual values, why?
266
+
267
+ Built-in placeholders use buffer metadata when replacing placeholders with actual values.
268
+ So, you should specify buffer attributes what you want to replace placeholders with.
269
+
270
+ Using `${tag}` placeholders, you should specify `tag` attributes in buffer:
271
+
272
+ ```aconf
273
+ <buffer tag>
274
+ @type memory
275
+ </buffer>
276
+ ```
277
+
278
+ Using `%Y%m%d` placeholders, you should specify `time` attributes in buffer:
279
+
280
+ ```aconf
281
+ <buffer time>
282
+ @type memory
283
+ timekey 3600
284
+ </buffer>
285
+ ```
286
+
287
+ In more detail, please refer to [the officilal document for built-in placeholders](https://docs.fluentd.org/v1.0/articles/buffer-section#placeholders).
288
+
265
289
  ## TODO
266
290
 
267
291
  * out_cloudwatch_logs
@@ -2,7 +2,7 @@ module Fluent
2
2
  module Plugin
3
3
  module Cloudwatch
4
4
  module Logs
5
- VERSION = "0.7.0"
5
+ VERSION = "0.7.1"
6
6
  end
7
7
  end
8
8
  end
@@ -109,14 +109,19 @@ module Fluent::Plugin
109
109
 
110
110
  if @use_log_stream_name_prefix || @use_todays_log_stream
111
111
  log_stream_name_prefix = @use_todays_log_stream ? get_todays_date : @log_stream_name
112
- log_streams = describe_log_streams(log_stream_name_prefix)
113
- log_streams.concat(describe_log_streams(get_yesterdays_date)) if @use_todays_log_stream
114
- log_streams.each do |log_stream|
115
- log_stream_name = log_stream.log_stream_name
116
- events = get_events(log_stream_name)
117
- events.each do |event|
118
- emit(log_stream_name, event)
112
+ begin
113
+ log_streams = describe_log_streams(log_stream_name_prefix)
114
+ log_streams.concat(describe_log_streams(get_yesterdays_date)) if @use_todays_log_stream
115
+ log_streams.each do |log_stream|
116
+ log_stream_name = log_stream.log_stream_name
117
+ events = get_events(log_stream_name)
118
+ events.each do |event|
119
+ emit(log_stream_name, event)
120
+ end
119
121
  end
122
+ rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException
123
+ log.warn "'#{@log_stream_name}' prefixed log stream(s) are not found"
124
+ next
120
125
  end
121
126
  else
122
127
  events = get_events(@log_stream_name)
@@ -257,6 +257,82 @@ class CloudwatchLogsOutputTest < Test::Unit::TestCase
257
257
  assert_equal('message2 logs2', events[1].message)
258
258
  end
259
259
 
260
+ def test_write_use_placeholders_parts
261
+ new_log_stream
262
+
263
+ config = {'@type' => 'cloudwatch_logs',
264
+ 'auto_create_stream' => true,
265
+ 'message_keys' => ["message","cloudwatch"],
266
+ 'log_stream_name' => "${tag[0]}-${tag[1]}-${tag[2]}-${tag[3]}",
267
+ 'log_group_name' => log_group_name}
268
+ config.merge!(config_elementify(aws_key_id)) if aws_key_id
269
+ config.merge!(config_elementify(aws_sec_key)) if aws_sec_key
270
+ config.merge!(config_elementify(region)) if region
271
+ config.merge!(config_elementify(endpoint)) if endpoint
272
+
273
+ d = create_driver(
274
+ Fluent::Config::Element.new('ROOT', '', config,[
275
+ Fluent::Config::Element.new('buffer', 'tag, time', {
276
+ '@type' => 'memory',
277
+ 'timekey' => 3600
278
+ }, [])
279
+ ])
280
+ )
281
+
282
+ time = event_time
283
+ d.run(default_tag: fluentd_tag) do
284
+ d.feed(time, {'cloudwatch' => 'logs1', 'message' => 'message1'})
285
+ d.feed(time + 1, {'cloudwatch' => 'logs2', 'message' => 'message2'})
286
+ end
287
+
288
+ sleep 10
289
+
290
+ events = get_log_events(log_group_name, 'fluent-plugin-cloudwatch-test')
291
+ assert_equal(2, events.size)
292
+ assert_equal((time.to_f * 1000).floor, events[0].timestamp)
293
+ assert_equal('message1 logs1', events[0].message)
294
+ assert_equal((time.to_i + 1) * 1000, events[1].timestamp)
295
+ assert_equal('message2 logs2', events[1].message)
296
+ end
297
+
298
+ def test_write_use_time_placeholders
299
+ new_log_stream
300
+
301
+ config = {'@type' => 'cloudwatch_logs',
302
+ 'auto_create_stream' => true,
303
+ 'message_keys' => ["message","cloudwatch"],
304
+ 'log_stream_name' => "fluent-plugin-cloudwatch-test-%Y%m%d",
305
+ 'log_group_name' => log_group_name}
306
+ config.merge!(config_elementify(aws_key_id)) if aws_key_id
307
+ config.merge!(config_elementify(aws_sec_key)) if aws_sec_key
308
+ config.merge!(config_elementify(region)) if region
309
+ config.merge!(config_elementify(endpoint)) if endpoint
310
+
311
+ d = create_driver(
312
+ Fluent::Config::Element.new('ROOT', '', config,[
313
+ Fluent::Config::Element.new('buffer', 'tag, time', {
314
+ '@type' => 'memory',
315
+ 'timekey' => 3600
316
+ }, [])
317
+ ])
318
+ )
319
+
320
+ time = event_time
321
+ d.run(default_tag: fluentd_tag) do
322
+ d.feed(time, {'cloudwatch' => 'logs1', 'message' => 'message1'})
323
+ d.feed(time + 1, {'cloudwatch' => 'logs2', 'message' => 'message2'})
324
+ end
325
+
326
+ sleep 10
327
+
328
+ events = get_log_events(log_group_name, "fluent-plugin-cloudwatch-test-#{Time.at(time).strftime("%Y%m%d")}")
329
+ assert_equal(2, events.size)
330
+ assert_equal((time.to_f * 1000).floor, events[0].timestamp)
331
+ assert_equal('message1 logs1', events[0].message)
332
+ assert_equal((time.to_i + 1) * 1000, events[1].timestamp)
333
+ assert_equal('message2 logs2', events[1].message)
334
+ end
335
+
260
336
  def test_include_time_key
261
337
  new_log_stream
262
338
 
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.7.0
4
+ version: 0.7.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: 2018-11-27 00:00:00.000000000 Z
11
+ date: 2018-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -103,6 +103,7 @@ extra_rdoc_files: []
103
103
  files:
104
104
  - ".gitignore"
105
105
  - Gemfile
106
+ - ISSUE_TEMPLATE.md
106
107
  - LICENSE.txt
107
108
  - README.md
108
109
  - Rakefile