fluent-plugin-google-cloud 0.6.25.1 → 0.7.0.pre.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fluent-plugin-google-cloud-0.7.0.gem +0 -0
- data/fluent-plugin-google-cloud.gemspec +3 -3
- data/lib/fluent/plugin/out_google_cloud.rb +19 -1
- data/test/plugin/base_test.rb +92 -0
- data/test/plugin/constants.rb +32 -0
- metadata +15 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20379f9f088d04bfb6b446d03347d5574ed78e03
|
4
|
+
data.tar.gz: c873feb14beedffe40b75714de0de47e0e117ec7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07bba814b28cd239cd8150fbf5d8bb0a5d26a8d8acc42ed1f2905232e7e387d394ef74cb5a18125b585e02b79de3c0c0443e1b91ff0face222f07541769cb6f0
|
7
|
+
data.tar.gz: 286f822a8d7d4ea719326c7a8181ad6c666860bb351b8d724ee65ea1d508c9b3f1e0bfa2d5020b05218b1a2719f3bb77b1027cd084a04dbba65dc00312b2f7e0
|
Binary file
|
@@ -10,7 +10,7 @@ eos
|
|
10
10
|
gem.homepage =
|
11
11
|
'https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud'
|
12
12
|
gem.license = 'Apache-2.0'
|
13
|
-
gem.version = '0.
|
13
|
+
gem.version = '0.7.0.pre.4'
|
14
14
|
gem.authors = ['Stackdriver Agents Team']
|
15
15
|
gem.email = ['stackdriver-agents@google.com']
|
16
16
|
gem.required_ruby_version = Gem::Requirement.new('>= 2.2')
|
@@ -19,13 +19,13 @@ eos
|
|
19
19
|
gem.test_files = gem.files.grep(/^(test)/)
|
20
20
|
gem.require_paths = ['lib']
|
21
21
|
|
22
|
-
gem.add_runtime_dependency 'fluentd', '~>
|
22
|
+
gem.add_runtime_dependency 'fluentd', '~> 1.2', '>= 1.2.5'
|
23
23
|
gem.add_runtime_dependency 'googleapis-common-protos', '~> 1.3'
|
24
24
|
gem.add_runtime_dependency 'google-api-client', '~> 0.17'
|
25
25
|
gem.add_runtime_dependency 'google-cloud-logging', '~> 1.3', '>= 1.3.2'
|
26
26
|
gem.add_runtime_dependency 'googleauth', '~> 0.6'
|
27
27
|
gem.add_runtime_dependency 'grpc', '~> 1.0'
|
28
|
-
gem.add_runtime_dependency 'json', '~>
|
28
|
+
gem.add_runtime_dependency 'json', '~> 1.8'
|
29
29
|
gem.add_runtime_dependency 'google-protobuf', '~> 3.6', '>= 3.6.1'
|
30
30
|
|
31
31
|
gem.add_development_dependency 'mocha', '~> 1.1'
|
@@ -165,6 +165,11 @@ module Fluent
|
|
165
165
|
# monitored resource from Stackdriver Metadata agent.
|
166
166
|
LOCAL_RESOURCE_ID_KEY = 'logging.googleapis.com/local_resource_id'.freeze
|
167
167
|
|
168
|
+
# The regexp matches stackdriver trace id format: 32-byte hex string.
|
169
|
+
# The format is documented in
|
170
|
+
# https://cloud.google.com/trace/docs/reference/v2/rpc/google.devtools.cloudtrace.v1#trace
|
171
|
+
STACKDRIVER_TRACE_ID_REGEXP = Regexp.new('^\h{32}$').freeze
|
172
|
+
|
168
173
|
# Map from each field name under LogEntry to corresponding variables
|
169
174
|
# required to perform field value extraction from the log record.
|
170
175
|
LOG_ENTRY_FIELDS_MAP = {
|
@@ -410,6 +415,12 @@ module Fluent
|
|
410
415
|
# Whether to attempt adjusting invalid log entry timestamps.
|
411
416
|
config_param :adjust_invalid_timestamps, :bool, :default => true
|
412
417
|
|
418
|
+
# Whether to autoformat value of "logging.googleapis.com/trace" to
|
419
|
+
# comply with Stackdriver Trace format
|
420
|
+
# "projects/[PROJECT-ID]/traces/[TRACE-ID]" when setting
|
421
|
+
# LogEntry.trace.
|
422
|
+
config_param :autoformat_stackdriver_trace, :bool, :default => true
|
423
|
+
|
413
424
|
# rubocop:enable Style/HashSyntax
|
414
425
|
|
415
426
|
# TODO: Add a log_name config option rather than just using the tag?
|
@@ -627,7 +638,8 @@ module Fluent
|
|
627
638
|
ts_nanos)
|
628
639
|
|
629
640
|
trace = record.delete(@trace_key)
|
630
|
-
entry.trace = trace if trace
|
641
|
+
entry.trace = compute_trace(trace) if trace
|
642
|
+
|
631
643
|
span_id = record.delete(@span_id_key)
|
632
644
|
entry.span_id = span_id if span_id
|
633
645
|
insert_id = record.delete(@insert_id_key)
|
@@ -676,6 +688,12 @@ module Fluent
|
|
676
688
|
|
677
689
|
private
|
678
690
|
|
691
|
+
def compute_trace(trace)
|
692
|
+
return trace unless @autoformat_stackdriver_trace &&
|
693
|
+
STACKDRIVER_TRACE_ID_REGEXP.match(trace)
|
694
|
+
"projects/#{@project_id}/traces/#{trace}"
|
695
|
+
end
|
696
|
+
|
679
697
|
def construct_log_entry_in_grpc_format(labels,
|
680
698
|
resource,
|
681
699
|
severity,
|
data/test/plugin/base_test.rb
CHANGED
@@ -338,6 +338,98 @@ module BaseTest
|
|
338
338
|
end
|
339
339
|
end
|
340
340
|
|
341
|
+
def test_autoformat_enabled_with_stackdriver_trace_id_as_trace
|
342
|
+
[
|
343
|
+
APPLICATION_DEFAULT_CONFIG,
|
344
|
+
ENABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG
|
345
|
+
].each do |config|
|
346
|
+
new_stub_context do
|
347
|
+
setup_gce_metadata_stubs
|
348
|
+
setup_logging_stubs do
|
349
|
+
d = create_driver(config)
|
350
|
+
d.emit(DEFAULT_TRACE_KEY => STACKDRIVER_TRACE_ID)
|
351
|
+
d.run
|
352
|
+
verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
|
353
|
+
assert_equal FULL_STACKDRIVER_TRACE, entry['trace'],
|
354
|
+
'stackdriver trace id should be autoformatted ' \
|
355
|
+
'when autoformat_stackdriver_trace is enabled.'
|
356
|
+
end
|
357
|
+
end
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
def test_autoformat_disabled_with_stackdriver_trace_id_as_trace
|
363
|
+
setup_gce_metadata_stubs
|
364
|
+
setup_logging_stubs do
|
365
|
+
d = create_driver(DISABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG)
|
366
|
+
d.emit(DEFAULT_TRACE_KEY => STACKDRIVER_TRACE_ID)
|
367
|
+
d.run
|
368
|
+
verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
|
369
|
+
assert_equal STACKDRIVER_TRACE_ID, entry['trace'],
|
370
|
+
'trace as stackdriver trace id should not be ' \
|
371
|
+
'autoformatted with config ' \
|
372
|
+
"#{DISABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG}."
|
373
|
+
end
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
def test_no_trace_when_trace_key_not_exists_with_any_autoformat_config
|
378
|
+
[
|
379
|
+
APPLICATION_DEFAULT_CONFIG,
|
380
|
+
ENABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG,
|
381
|
+
DISABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG
|
382
|
+
].each do |config|
|
383
|
+
new_stub_context do
|
384
|
+
setup_gce_metadata_stubs
|
385
|
+
setup_logging_stubs do
|
386
|
+
d = create_driver(config)
|
387
|
+
d.emit('msg' => log_entry(0))
|
388
|
+
d.run
|
389
|
+
verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
|
390
|
+
assert_nil entry['trace']
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
394
|
+
end
|
395
|
+
end
|
396
|
+
|
397
|
+
def test_non_stackdriver_trace_id_compliant_trace_with_any_autoformat_config
|
398
|
+
configs = [
|
399
|
+
APPLICATION_DEFAULT_CONFIG,
|
400
|
+
ENABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG,
|
401
|
+
DISABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG
|
402
|
+
]
|
403
|
+
traces = [
|
404
|
+
TRACE, # Full trace won't be modified.
|
405
|
+
EMPTY_STRING,
|
406
|
+
INVALID_SHORT_STACKDRIVER_TRACE_ID,
|
407
|
+
INVALID_LONG_STACKDRIVER_TRACE_ID,
|
408
|
+
INVALID_NON_HEX_STACKDRIVER_TRACE_ID,
|
409
|
+
INVALID_TRACE_NO_TRACE_ID,
|
410
|
+
INVALID_TRACE_NO_PROJECT_ID,
|
411
|
+
INVALID_TRACE_WITH_SHORT_TRACE_ID,
|
412
|
+
INVALID_TRACE_WITH_LONG_TRACE_ID,
|
413
|
+
INVALID_TRACE_WITH_NON_HEX_TRACE_ID
|
414
|
+
]
|
415
|
+
configs.product(traces).each do |config, trace|
|
416
|
+
new_stub_context do
|
417
|
+
setup_gce_metadata_stubs
|
418
|
+
setup_logging_stubs do
|
419
|
+
d = create_driver(config)
|
420
|
+
d.emit(DEFAULT_TRACE_KEY => trace)
|
421
|
+
d.run
|
422
|
+
verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
|
423
|
+
assert_equal_with_default \
|
424
|
+
entry['trace'], trace, '',
|
425
|
+
'trace as non stackdriver trace id should not be ' \
|
426
|
+
"autoformatted with config #{config}."
|
427
|
+
end
|
428
|
+
end
|
429
|
+
end
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
341
433
|
def test_structured_payload_malformatted_log
|
342
434
|
setup_gce_metadata_stubs
|
343
435
|
message = 'test message'
|
data/test/plugin/constants.rb
CHANGED
@@ -106,6 +106,30 @@ module Constants
|
|
106
106
|
INSERT_ID = 'fah7yr7iw64tg857y'.freeze
|
107
107
|
INSERT_ID2 = 'fah7yr7iw64tgaeuf'.freeze
|
108
108
|
|
109
|
+
STACKDRIVER_TRACE_ID = '1234567890abcdef1234567890abcdef'.freeze
|
110
|
+
FULL_STACKDRIVER_TRACE = \
|
111
|
+
"projects/#{PROJECT_ID}/traces/#{STACKDRIVER_TRACE_ID}".freeze
|
112
|
+
|
113
|
+
# Invalid trace id for stackdriver.
|
114
|
+
EMPTY_STRING = ''.freeze
|
115
|
+
INVALID_SHORT_STACKDRIVER_TRACE_ID = '1234567890abcdef'.freeze
|
116
|
+
INVALID_LONG_STACKDRIVER_TRACE_ID = \
|
117
|
+
'1234567890abcdef1234567890abcdef123'.freeze
|
118
|
+
INVALID_NON_HEX_STACKDRIVER_TRACE_ID = \
|
119
|
+
'1234567890abcdef1234567890abcdeZ'.freeze
|
120
|
+
|
121
|
+
# Invalid full format of stackdriver trace.
|
122
|
+
INVALID_TRACE_NO_TRACE_ID = "projects/#{PROJECT_ID}/traces/".freeze
|
123
|
+
INVALID_TRACE_NO_PROJECT_ID = \
|
124
|
+
"projects//traces/#{STACKDRIVER_TRACE_ID}".freeze
|
125
|
+
INVALID_TRACE_WITH_SHORT_TRACE_ID = \
|
126
|
+
"projects/#{PROJECT_ID}/traces/#{INVALID_SHORT_STACKDRIVER_TRACE_ID}".freeze
|
127
|
+
INVALID_TRACE_WITH_LONG_TRACE_ID = \
|
128
|
+
"projects/#{PROJECT_ID}/traces/#{INVALID_LONG_STACKDRIVER_TRACE_ID}".freeze
|
129
|
+
INVALID_TRACE_WITH_NON_HEX_TRACE_ID = \
|
130
|
+
"projects/#{PROJECT_ID}/" \
|
131
|
+
"traces/#{INVALID_NON_HEX_STACKDRIVER_TRACE_ID}".freeze
|
132
|
+
|
109
133
|
# Docker Container labels.
|
110
134
|
DOCKER_CONTAINER_ID =
|
111
135
|
'0d0f03ff8d3c42688692536d1af77a28cd135c0a5c531f25a31'.freeze
|
@@ -265,6 +289,14 @@ module Constants
|
|
265
289
|
enable_metadata_agent false
|
266
290
|
).freeze
|
267
291
|
|
292
|
+
ENABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG = %(
|
293
|
+
autoformat_stackdriver_trace true
|
294
|
+
).freeze
|
295
|
+
|
296
|
+
DISABLE_AUTOFORMAT_STACKDRIVER_TRACE_CONFIG = %(
|
297
|
+
autoformat_stackdriver_trace false
|
298
|
+
).freeze
|
299
|
+
|
268
300
|
DOCKER_CONTAINER_CONFIG = %(
|
269
301
|
enable_metadata_agent true
|
270
302
|
label_map { "source": "#{DOCKER_CONSTANTS[:service]}/stream" }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-google-cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0.pre.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stackdriver Agents Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.2'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.2.5
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
29
|
+
version: '1.2'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.2.5
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: googleapis-common-protos
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,14 +112,14 @@ dependencies:
|
|
106
112
|
requirements:
|
107
113
|
- - "~>"
|
108
114
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
115
|
+
version: '1.8'
|
110
116
|
type: :runtime
|
111
117
|
prerelease: false
|
112
118
|
version_requirements: !ruby/object:Gem::Requirement
|
113
119
|
requirements:
|
114
120
|
- - "~>"
|
115
121
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
122
|
+
version: '1.8'
|
117
123
|
- !ruby/object:Gem::Dependency
|
118
124
|
name: google-protobuf
|
119
125
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,6 +240,7 @@ files:
|
|
234
240
|
- LICENSE
|
235
241
|
- README.rdoc
|
236
242
|
- Rakefile
|
243
|
+
- fluent-plugin-google-cloud-0.7.0.gem
|
237
244
|
- fluent-plugin-google-cloud.gemspec
|
238
245
|
- lib/fluent/plugin/filter_add_insert_ids.rb
|
239
246
|
- lib/fluent/plugin/monitoring.rb
|
@@ -265,9 +272,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
265
272
|
version: '2.2'
|
266
273
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
274
|
requirements:
|
268
|
-
- - "
|
275
|
+
- - ">"
|
269
276
|
- !ruby/object:Gem::Version
|
270
|
-
version:
|
277
|
+
version: 1.3.1
|
271
278
|
requirements: []
|
272
279
|
rubyforge_project:
|
273
280
|
rubygems_version: 2.6.14
|