fluent-plugin-google-cloud 0.6.15 → 0.6.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +13 -12
- data/fluent-plugin-google-cloud.gemspec +1 -1
- data/lib/fluent/plugin/out_google_cloud.rb +27 -9
- data/test/plugin/base_test.rb +33 -8
- data/test/plugin/constants.rb +12 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc441330446e0c25bc08501530b66b7d6564dc37
|
4
|
+
data.tar.gz: 55a4592b58913b49b23cab5ddfc469a97afd5c4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55d494d4e51e821a800b06a3cf936fdbb0fa01305d4e04531f5c0f34001188be0da9b90ea8b84111a6d5f77abd9745f91cf3ec4465939c7af5d2ff11edd55b9f
|
7
|
+
data.tar.gz: 55566646fd0f2656df5fc9d8373d17fc6ddb364b527b74ae6a1be24173e7d0aaec141ea8e90c2bf0a4f7c66d7f471e8a85b9ecc4ef65d1985d164fb86b51126f
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-google-cloud (0.6.
|
4
|
+
fluent-plugin-google-cloud (0.6.16)
|
5
5
|
fluentd (~> 0.10)
|
6
6
|
google-api-client (~> 0.17)
|
7
7
|
google-cloud-logging (~> 1.3, >= 1.3.2)
|
@@ -34,21 +34,21 @@ GEM
|
|
34
34
|
tzinfo (~> 1.0)
|
35
35
|
tzinfo-data (~> 1.0)
|
36
36
|
yajl-ruby (~> 1.0)
|
37
|
-
google-api-client (0.19.
|
37
|
+
google-api-client (0.19.8)
|
38
38
|
addressable (~> 2.5, >= 2.5.1)
|
39
39
|
googleauth (>= 0.5, < 0.7.0)
|
40
40
|
httpclient (>= 2.8.1, < 3.0)
|
41
41
|
mime-types (~> 3.0)
|
42
42
|
representable (~> 3.0)
|
43
43
|
retriable (>= 2.0, < 4.0)
|
44
|
-
google-cloud-core (1.
|
44
|
+
google-cloud-core (1.2.0)
|
45
45
|
google-cloud-env (~> 1.0)
|
46
46
|
google-cloud-env (1.0.1)
|
47
47
|
faraday (~> 0.11)
|
48
|
-
google-cloud-logging (1.
|
49
|
-
google-cloud-core (~> 1.
|
48
|
+
google-cloud-logging (1.5.0)
|
49
|
+
google-cloud-core (~> 1.2)
|
50
50
|
google-gax (~> 1.0)
|
51
|
-
stackdriver-core (~> 1.
|
51
|
+
stackdriver-core (~> 1.3)
|
52
52
|
google-gax (1.0.1)
|
53
53
|
google-protobuf (~> 3.2)
|
54
54
|
googleapis-common-protos (>= 1.3.5, < 2.0)
|
@@ -70,7 +70,7 @@ GEM
|
|
70
70
|
multi_json (~> 1.11)
|
71
71
|
os (~> 0.9)
|
72
72
|
signet (~> 0.7)
|
73
|
-
grpc (1.
|
73
|
+
grpc (1.9.1)
|
74
74
|
google-protobuf (~> 3.1)
|
75
75
|
googleapis-common-protos-types (~> 1.0.0)
|
76
76
|
googleauth (>= 0.5.1, < 0.7)
|
@@ -94,13 +94,13 @@ GEM
|
|
94
94
|
multi_json (1.13.1)
|
95
95
|
multipart-post (2.0.0)
|
96
96
|
os (0.9.6)
|
97
|
-
parser (2.
|
98
|
-
ast (~> 2.
|
97
|
+
parser (2.5.0.2)
|
98
|
+
ast (~> 2.4.0)
|
99
99
|
power_assert (1.1.1)
|
100
100
|
powerpack (0.1.1)
|
101
101
|
prometheus-client (0.7.1)
|
102
102
|
quantile (~> 0.2.0)
|
103
|
-
public_suffix (3.0.
|
103
|
+
public_suffix (3.0.2)
|
104
104
|
quantile (0.2.0)
|
105
105
|
rainbow (2.2.2)
|
106
106
|
rake
|
@@ -128,12 +128,13 @@ GEM
|
|
128
128
|
faraday (~> 0.9)
|
129
129
|
jwt (>= 1.5, < 3.0)
|
130
130
|
multi_json (~> 1.10)
|
131
|
-
stackdriver-core (1.
|
131
|
+
stackdriver-core (1.3.0)
|
132
|
+
google-cloud-core (~> 1.2)
|
132
133
|
strptime (0.1.9)
|
133
134
|
test-unit (3.2.7)
|
134
135
|
power_assert
|
135
136
|
thread_safe (0.3.6)
|
136
|
-
tzinfo (1.2.
|
137
|
+
tzinfo (1.2.5)
|
137
138
|
thread_safe (~> 0.1)
|
138
139
|
tzinfo-data (1.2018.3)
|
139
140
|
tzinfo (>= 1.0.0)
|
@@ -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.6.
|
13
|
+
gem.version = '0.6.16'
|
14
14
|
gem.authors = ['Todd Derr', 'Alex Robinson']
|
15
15
|
gem.email = ['salty@google.com']
|
16
16
|
gem.required_ruby_version = Gem::Requirement.new('>= 2.0')
|
@@ -124,6 +124,7 @@ module Fluent
|
|
124
124
|
|
125
125
|
DEFAULT_METADATA_AGENT_URL =
|
126
126
|
'http://local-metadata-agent.stackdriver.com:8000'.freeze
|
127
|
+
METADATA_AGENT_URL_ENV_VAR = 'STACKDRIVER_METADATA_AGENT_URL'.freeze
|
127
128
|
end
|
128
129
|
|
129
130
|
# Internal constants.
|
@@ -198,7 +199,7 @@ module Fluent
|
|
198
199
|
Fluent::Plugin.register_output('google_cloud', self)
|
199
200
|
|
200
201
|
PLUGIN_NAME = 'Fluentd Google Cloud Logging plugin'.freeze
|
201
|
-
PLUGIN_VERSION = '0.6.
|
202
|
+
PLUGIN_VERSION = '0.6.16'.freeze
|
202
203
|
|
203
204
|
# Name of the the Google cloud logging write scope.
|
204
205
|
LOGGING_SCOPE = 'https://www.googleapis.com/auth/logging.write'.freeze
|
@@ -350,8 +351,13 @@ module Fluent
|
|
350
351
|
|
351
352
|
# Whether to call metadata agent to retrieve monitored resource.
|
352
353
|
config_param :enable_metadata_agent, :bool, :default => false
|
353
|
-
|
354
|
-
|
354
|
+
|
355
|
+
# The URL of the Metadata Agent.
|
356
|
+
# If this option is set, its value is used to contact the Metadata Agent.
|
357
|
+
# Otherwise, the value of the STACKDRIVER_METADATA_AGENT_URL environment
|
358
|
+
# variable is used. If that is also unset, this defaults to
|
359
|
+
# 'http://local-metadata-agent.stackdriver.com:8000'.
|
360
|
+
config_param :metadata_agent_url, :string, :default => nil
|
355
361
|
|
356
362
|
# Whether to split log entries with different log tags into different
|
357
363
|
# requests when talking to Stackdriver Logging API.
|
@@ -387,6 +393,20 @@ module Fluent
|
|
387
393
|
' ignored.'
|
388
394
|
end
|
389
395
|
|
396
|
+
# 1. If @metadata_agent_url is customized (aka not nil), use that.
|
397
|
+
# 2. Otherwise check the presence of the environment variable
|
398
|
+
# STACKDRIVER_METADATA_AGENT_URL and use that if set.
|
399
|
+
# 3. Fall back to the default if neither is set.
|
400
|
+
if @enable_metadata_agent
|
401
|
+
# Convert to string to capture empty string.
|
402
|
+
@metadata_agent_url ||=
|
403
|
+
if ENV[METADATA_AGENT_URL_ENV_VAR].to_s.empty?
|
404
|
+
DEFAULT_METADATA_AGENT_URL
|
405
|
+
else
|
406
|
+
ENV[METADATA_AGENT_URL_ENV_VAR]
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
390
410
|
# If monitoring is enabled, register metrics in the default registry
|
391
411
|
# and store metric objects for future use.
|
392
412
|
if @enable_monitoring
|
@@ -1181,11 +1201,9 @@ module Fluent
|
|
1181
1201
|
# inferred from the tag) if failed to get a monitored resource from
|
1182
1202
|
# Metadata Agent with this key.
|
1183
1203
|
#
|
1184
|
-
#
|
1185
|
-
#
|
1186
|
-
#
|
1187
|
-
# GKE container:
|
1188
|
-
# "gke_containerName.<namespace_id>.<pod_name>.<container_name>"
|
1204
|
+
# Examples:
|
1205
|
+
# "container.<container_id>" // Docker container.
|
1206
|
+
# "k8s_pod.<namespace_name>.<pod_name>" // GKE pod.
|
1189
1207
|
if @enable_metadata_agent && local_resource_id
|
1190
1208
|
@log.debug 'Calling metadata agent with local_resource_id: ' \
|
1191
1209
|
"#{local_resource_id}."
|
@@ -1384,7 +1402,7 @@ module Fluent
|
|
1384
1402
|
return parsed_hash
|
1385
1403
|
end
|
1386
1404
|
rescue StandardError => e
|
1387
|
-
@log.error
|
1405
|
+
@log.error "Error calling Metadata Agent at #{url}.", error: e
|
1388
1406
|
end
|
1389
1407
|
|
1390
1408
|
# TODO: This functionality should eventually be available in another
|
data/test/plugin/base_test.rb
CHANGED
@@ -116,6 +116,30 @@ module BaseTest
|
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
+
def test_metadata_agent_url_customization
|
120
|
+
[
|
121
|
+
# If @metadata_agent_url is set, use that even if the environment
|
122
|
+
# variable is set.
|
123
|
+
[CUSTOM_METADATA_AGENT_URL_CONFIG, true, CUSTOM_METADATA_AGENT_URL],
|
124
|
+
# If @metadata_agent_url is set and the environment variable is
|
125
|
+
# not set, use @metadata_agent_url.
|
126
|
+
[CUSTOM_METADATA_AGENT_URL_CONFIG, false, CUSTOM_METADATA_AGENT_URL],
|
127
|
+
# If @metadata_agent_url is not set and the environment variable is set,
|
128
|
+
# use the env.
|
129
|
+
[APPLICATION_DEFAULT_CONFIG, true, METADATA_AGENT_URL_FROM_ENV],
|
130
|
+
# If @metadata_agent_url is not set and the environment variable is
|
131
|
+
# not set, fall back to the default.
|
132
|
+
[APPLICATION_DEFAULT_CONFIG, false, DEFAULT_METADATA_AGENT_URL]
|
133
|
+
].each do |(config, url_from_env, expected_url)|
|
134
|
+
ENV[METADATA_AGENT_URL_ENV_VAR] = METADATA_AGENT_URL_FROM_ENV if
|
135
|
+
url_from_env
|
136
|
+
setup_gce_metadata_stubs
|
137
|
+
d = create_driver(ENABLE_METADATA_AGENT_CONFIG + config)
|
138
|
+
assert_equal expected_url, d.instance.metadata_agent_url
|
139
|
+
ENV.delete(METADATA_AGENT_URL_ENV_VAR)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
119
143
|
def test_metadata_loading
|
120
144
|
setup_gce_metadata_stubs
|
121
145
|
d = create_driver
|
@@ -1260,7 +1284,7 @@ module BaseTest
|
|
1260
1284
|
|
1261
1285
|
# Test logs from applications running in Docker containers. These logs have
|
1262
1286
|
# the label "logging.googleapis.com/local_resource_id" set in the format of
|
1263
|
-
# "
|
1287
|
+
# "container.<container_name>".
|
1264
1288
|
def test_docker_container_application_logs
|
1265
1289
|
new_stub_context do
|
1266
1290
|
setup_gce_metadata_stubs
|
@@ -1274,7 +1298,7 @@ module BaseTest
|
|
1274
1298
|
end
|
1275
1299
|
verify_log_entries(1, DOCKER_CONTAINER_PARAMS_NO_STREAM)
|
1276
1300
|
assert_requested_metadata_agent_stub(
|
1277
|
-
"
|
1301
|
+
"#{DOCKER_CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{DOCKER_CONTAINER_NAME}")
|
1278
1302
|
end
|
1279
1303
|
end
|
1280
1304
|
|
@@ -1298,7 +1322,7 @@ module BaseTest
|
|
1298
1322
|
entry['timestamp']['nanos'], entry
|
1299
1323
|
end
|
1300
1324
|
assert_requested_metadata_agent_stub(
|
1301
|
-
"
|
1325
|
+
"#{DOCKER_CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{DOCKER_CONTAINER_NAME}")
|
1302
1326
|
end
|
1303
1327
|
end
|
1304
1328
|
|
@@ -1333,7 +1357,7 @@ module BaseTest
|
|
1333
1357
|
|
1334
1358
|
# Test GKE container logs. These logs have the label
|
1335
1359
|
# "logging.googleapis.com/local_resource_id" set in the format of
|
1336
|
-
# "
|
1360
|
+
# "gke_container.<namespace_id>.<pod_name>.<container_name>".
|
1337
1361
|
def test_gke_container_logs
|
1338
1362
|
[1, 2, 3, 5, 11, 50].each do |n|
|
1339
1363
|
new_stub_context do
|
@@ -1349,8 +1373,8 @@ module BaseTest
|
|
1349
1373
|
end
|
1350
1374
|
verify_log_entries(n, CONTAINER_FROM_APPLICATION_PARAMS)
|
1351
1375
|
assert_requested_metadata_agent_stub(
|
1352
|
-
"
|
1353
|
-
"
|
1376
|
+
"#{CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{CONTAINER_NAMESPACE_ID}" \
|
1377
|
+
".#{CONTAINER_POD_NAME}.#{CONTAINER_CONTAINER_NAME}")
|
1354
1378
|
end
|
1355
1379
|
end
|
1356
1380
|
end
|
@@ -1533,7 +1557,7 @@ module BaseTest
|
|
1533
1557
|
{
|
1534
1558
|
log: log,
|
1535
1559
|
LOCAL_RESOURCE_ID_KEY =>
|
1536
|
-
"
|
1560
|
+
"#{CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{CONTAINER_NAMESPACE_ID}" \
|
1537
1561
|
".#{CONTAINER_POD_NAME}.#{CONTAINER_CONTAINER_NAME}"
|
1538
1562
|
}
|
1539
1563
|
end
|
@@ -1559,7 +1583,8 @@ module BaseTest
|
|
1559
1583
|
{
|
1560
1584
|
log: log,
|
1561
1585
|
time: DOCKER_CONTAINER_TIMESTAMP,
|
1562
|
-
LOCAL_RESOURCE_ID_KEY => "
|
1586
|
+
LOCAL_RESOURCE_ID_KEY => "#{DOCKER_CONTAINER_LOCAL_RESOURCE_ID_PREFIX}." \
|
1587
|
+
"#{DOCKER_CONTAINER_NAME}"
|
1563
1588
|
}
|
1564
1589
|
end
|
1565
1590
|
|
data/test/plugin/constants.rb
CHANGED
@@ -21,6 +21,8 @@ module Constants
|
|
21
21
|
# Generic attributes.
|
22
22
|
HOSTNAME = Socket.gethostname
|
23
23
|
CUSTOM_LOGGING_API_URL = 'http://localhost:52000'.freeze
|
24
|
+
CUSTOM_METADATA_AGENT_URL = 'http://localhost:12345'.freeze
|
25
|
+
METADATA_AGENT_URL_FROM_ENV = 'http://localhost:54321'.freeze
|
24
26
|
|
25
27
|
# TODO(qingling128) Separate constants into different submodules.
|
26
28
|
# Attributes used for the GCE metadata service.
|
@@ -71,6 +73,7 @@ module Constants
|
|
71
73
|
DOCKER_CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'.freeze
|
72
74
|
DOCKER_CONTAINER_SECONDS_EPOCH = 1_234_567_890
|
73
75
|
DOCKER_CONTAINER_NANOS = 987_654_321
|
76
|
+
DOCKER_CONTAINER_LOCAL_RESOURCE_ID_PREFIX = 'container'.freeze
|
74
77
|
|
75
78
|
# Container Engine / Kubernetes specific labels.
|
76
79
|
CONTAINER_CLUSTER_NAME = 'cluster-1'.freeze
|
@@ -87,6 +90,7 @@ module Constants
|
|
87
90
|
CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'.freeze
|
88
91
|
CONTAINER_SECONDS_EPOCH = 1_234_567_890
|
89
92
|
CONTAINER_NANOS = 987_654_321
|
93
|
+
CONTAINER_LOCAL_RESOURCE_ID_PREFIX = 'gke_container'.freeze
|
90
94
|
|
91
95
|
# Cloud Functions specific labels.
|
92
96
|
CLOUDFUNCTIONS_FUNCTION_NAME = '$My_Function.Name-@1'.freeze
|
@@ -146,6 +150,10 @@ module Constants
|
|
146
150
|
logging_api_url #{CUSTOM_LOGGING_API_URL}
|
147
151
|
).freeze
|
148
152
|
|
153
|
+
CUSTOM_METADATA_AGENT_URL_CONFIG = %(
|
154
|
+
metadata_agent_url #{CUSTOM_METADATA_AGENT_URL}
|
155
|
+
).freeze
|
156
|
+
|
149
157
|
DETECT_JSON_CONFIG = %(
|
150
158
|
detect_json true
|
151
159
|
).freeze
|
@@ -605,7 +613,7 @@ module Constants
|
|
605
613
|
# Map from the local_resource_id to the retrieved monitored resource.
|
606
614
|
MONITORED_RESOURCE_STUBS = {
|
607
615
|
# Docker container stderr / stdout logs.
|
608
|
-
"
|
616
|
+
"#{DOCKER_CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{DOCKER_CONTAINER_ID}" =>
|
609
617
|
{
|
610
618
|
'type' => DOCKER_CONSTANTS[:resource_type],
|
611
619
|
'labels' => {
|
@@ -614,7 +622,7 @@ module Constants
|
|
614
622
|
}
|
615
623
|
}.to_json,
|
616
624
|
# Docker container application logs.
|
617
|
-
"
|
625
|
+
"#{DOCKER_CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{DOCKER_CONTAINER_NAME}" =>
|
618
626
|
{
|
619
627
|
'type' => DOCKER_CONSTANTS[:resource_type],
|
620
628
|
'labels' => {
|
@@ -623,8 +631,8 @@ module Constants
|
|
623
631
|
}
|
624
632
|
}.to_json,
|
625
633
|
# GKE container logs.
|
626
|
-
"
|
627
|
-
"
|
634
|
+
"#{CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{CONTAINER_NAMESPACE_ID}" \
|
635
|
+
".#{CONTAINER_POD_NAME}.#{CONTAINER_CONTAINER_NAME}" =>
|
628
636
|
{
|
629
637
|
'type' => GKE_CONSTANTS[:resource_type],
|
630
638
|
'labels' => {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-google-cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Derr
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-01
|
12
|
+
date: 2018-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
@@ -249,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
249
|
version: '0'
|
250
250
|
requirements: []
|
251
251
|
rubyforge_project:
|
252
|
-
rubygems_version: 2.6.
|
252
|
+
rubygems_version: 2.6.14
|
253
253
|
signing_key:
|
254
254
|
specification_version: 4
|
255
255
|
summary: fluentd output plugin for the Stackdriver Logging API
|