fluent-plugin-google-cloud 0.6.6 → 0.6.7.pre.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,7 +14,9 @@
14
14
 
15
15
  # Constants used by unit tests for Google Cloud Logging plugin.
16
16
  module Constants
17
- include Fluent::GoogleCloudOutput::Constants
17
+ include Fluent::GoogleCloudOutput::ServiceConstants
18
+ include Fluent::GoogleCloudOutput::ConfigConstants
19
+ include Fluent::GoogleCloudOutput::InternalConstants
18
20
 
19
21
  # Generic attributes.
20
22
  HOSTNAME = Socket.gethostname
@@ -26,6 +28,10 @@ module Constants
26
28
  FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
27
29
  VM_ID = '9876543210'
28
30
 
31
+ # Attributes used for the Metadata Agent resources.
32
+ METADATA_ZONE = 'us-central1-c'
33
+ METADATA_VM_ID = '0123456789'
34
+
29
35
  # Attributes used for custom (overridden) configs.
30
36
  CUSTOM_PROJECT_ID = 'test-custom-project-id'
31
37
  CUSTOM_ZONE = 'us-custom-central1-b'
@@ -51,6 +57,16 @@ module Constants
51
57
  MANAGED_VM_BACKEND_NAME = 'default'
52
58
  MANAGED_VM_BACKEND_VERSION = 'guestbook2.0'
53
59
 
60
+ # Docker Container labels.
61
+ DOCKER_CONTAINER_ID = '0d0f03ff8d3c42688692536d1af77a28cd135c0a5c531f25a31'
62
+ DOCKER_CONTAINER_NAME = 'happy_hippo'
63
+ DOCKER_CONTAINER_STREAM_STDOUT = 'stdout'
64
+ DOCKER_CONTAINER_STREAM_STDERR = 'stderr'
65
+ # Timestamp for 1234567890 seconds and 987654321 nanoseconds since epoch.
66
+ DOCKER_CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'
67
+ DOCKER_CONTAINER_SECONDS_EPOCH = 1_234_567_890
68
+ DOCKER_CONTAINER_NANOS = 987_654_321
69
+
54
70
  # Container Engine / Kubernetes specific labels.
55
71
  CONTAINER_CLUSTER_NAME = 'cluster-1'
56
72
  CONTAINER_NAMESPACE_ID = '898268c8-4a36-11e5-9d81-42010af0194c'
@@ -120,6 +136,10 @@ module Constants
120
136
  APPLICATION_DEFAULT_CONFIG = %(
121
137
  )
122
138
 
139
+ DETECT_JSON_CONFIG = %(
140
+ detect_json true
141
+ )
142
+
123
143
  # rubocop:disable Metrics/LineLength
124
144
  PRIVATE_KEY_CONFIG = %(
125
145
  auth_method private_key
@@ -145,6 +165,20 @@ module Constants
145
165
  monitoring_type prometheus
146
166
  )
147
167
 
168
+ ENABLE_METADATA_AGENT_CONFIG = %(
169
+ enable_metadata_agent true
170
+ )
171
+
172
+ DISABLE_METADATA_AGENT_CONFIG = %(
173
+ enable_metadata_agent false
174
+ )
175
+
176
+ DOCKER_CONTAINER_CONFIG = %(
177
+ enable_metadata_agent true
178
+ label_map { "source": "#{DOCKER_CONSTANTS[:service]}/stream" }
179
+ detect_json true
180
+ )
181
+
148
182
  CUSTOM_METADATA_CONFIG = %(
149
183
  project_id #{CUSTOM_PROJECT_ID}
150
184
  zone #{CUSTOM_ZONE}
@@ -201,6 +235,8 @@ module Constants
201
235
  )
202
236
 
203
237
  # Service configurations for various services.
238
+
239
+ # GCE.
204
240
  COMPUTE_PARAMS = {
205
241
  resource: {
206
242
  type: COMPUTE_CONSTANTS[:resource_type],
@@ -215,7 +251,16 @@ module Constants
215
251
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
216
252
  }
217
253
  }
254
+ COMPUTE_PARAMS_WITH_METADATA_VM_ID_AND_ZONE = COMPUTE_PARAMS.merge(
255
+ resource: COMPUTE_PARAMS[:resource].merge(
256
+ labels: {
257
+ 'instance_id' => METADATA_VM_ID,
258
+ 'zone' => METADATA_ZONE
259
+ }
260
+ )
261
+ )
218
262
 
263
+ # GAE.
219
264
  VMENGINE_PARAMS = {
220
265
  resource: {
221
266
  type: APPENGINE_CONSTANTS[:resource_type],
@@ -233,12 +278,13 @@ module Constants
233
278
  }
234
279
  }
235
280
 
281
+ # GKE Container.
236
282
  CONTAINER_TAG = "kubernetes.#{CONTAINER_POD_NAME}_" \
237
283
  "#{CONTAINER_NAMESPACE_NAME}_#{CONTAINER_CONTAINER_NAME}"
238
284
 
239
285
  CONTAINER_FROM_METADATA_PARAMS = {
240
286
  resource: {
241
- type: CONTAINER_CONSTANTS[:resource_type],
287
+ type: GKE_CONSTANTS[:resource_type],
242
288
  labels: {
243
289
  'cluster_name' => CONTAINER_CLUSTER_NAME,
244
290
  'namespace_id' => CONTAINER_NAMESPACE_ID,
@@ -251,10 +297,10 @@ module Constants
251
297
  log_name: CONTAINER_CONTAINER_NAME,
252
298
  project_id: PROJECT_ID,
253
299
  labels: {
254
- "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
300
+ "#{GKE_CONSTANTS[:service]}/namespace_name" =>
255
301
  CONTAINER_NAMESPACE_NAME,
256
- "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
257
- "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
302
+ "#{GKE_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
303
+ "#{GKE_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
258
304
  "label/#{CONTAINER_LABEL_KEY}" => CONTAINER_LABEL_VALUE,
259
305
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
260
306
  }
@@ -264,7 +310,7 @@ module Constants
264
310
  # namespace and pod names.
265
311
  CONTAINER_FROM_TAG_PARAMS = {
266
312
  resource: {
267
- type: CONTAINER_CONSTANTS[:resource_type],
313
+ type: GKE_CONSTANTS[:resource_type],
268
314
  labels: {
269
315
  'cluster_name' => CONTAINER_CLUSTER_NAME,
270
316
  'namespace_id' => CONTAINER_NAMESPACE_NAME,
@@ -277,14 +323,58 @@ module Constants
277
323
  log_name: CONTAINER_CONTAINER_NAME,
278
324
  project_id: PROJECT_ID,
279
325
  labels: {
280
- "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
326
+ "#{GKE_CONSTANTS[:service]}/namespace_name" =>
281
327
  CONTAINER_NAMESPACE_NAME,
282
- "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
283
- "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
328
+ "#{GKE_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
329
+ "#{GKE_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
284
330
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
285
331
  }
286
332
  }
287
333
 
334
+ CONTAINER_FROM_APPLICATION_PARAMS = {
335
+ resource: {
336
+ type: GKE_CONSTANTS[:resource_type],
337
+ labels: {
338
+ 'cluster_name' => CONTAINER_CLUSTER_NAME,
339
+ 'namespace_id' => CONTAINER_NAMESPACE_ID,
340
+ 'instance_id' => VM_ID,
341
+ 'pod_id' => CONTAINER_POD_ID,
342
+ 'container_name' => CONTAINER_CONTAINER_NAME,
343
+ 'zone' => ZONE
344
+ }
345
+ },
346
+ log_name: 'redis',
347
+ project_id: PROJECT_ID,
348
+ labels: {
349
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
350
+ }
351
+ }
352
+
353
+ # Docker Container.
354
+ DOCKER_CONTAINER_PARAMS = {
355
+ resource: {
356
+ type: DOCKER_CONSTANTS[:resource_type],
357
+ labels: {
358
+ 'container_id' => DOCKER_CONTAINER_ID,
359
+ 'location' => ZONE
360
+ }
361
+ },
362
+ log_name: 'test',
363
+ project_id: PROJECT_ID,
364
+ labels: {
365
+ "#{DOCKER_CONSTANTS[:service]}/stream" => DOCKER_CONTAINER_STREAM_STDOUT
366
+ }
367
+ }
368
+ DOCKER_CONTAINER_PARAMS_WITH_STREAM_STDERR = DOCKER_CONTAINER_PARAMS.merge(
369
+ labels: DOCKER_CONTAINER_PARAMS[:labels].merge(
370
+ "#{DOCKER_CONSTANTS[:service]}/stream" => DOCKER_CONTAINER_STREAM_STDERR
371
+ )
372
+ )
373
+ DOCKER_CONTAINER_PARAMS_WITH_NO_STREAM = DOCKER_CONTAINER_PARAMS.merge(
374
+ labels: {}
375
+ )
376
+
377
+ # Cloud Functions.
288
378
  CLOUDFUNCTIONS_TAG = "kubernetes.#{CLOUDFUNCTIONS_POD_NAME}_" \
289
379
  "#{CLOUDFUNCTIONS_NAMESPACE_NAME}_" \
290
380
  "#{CLOUDFUNCTIONS_CONTAINER_NAME}"
@@ -301,8 +391,8 @@ module Constants
301
391
  project_id: PROJECT_ID,
302
392
  labels: {
303
393
  'execution_id' => CLOUDFUNCTIONS_EXECUTION_ID,
304
- "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
305
- "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
394
+ "#{GKE_CONSTANTS[:service]}/instance_id" => VM_ID,
395
+ "#{GKE_CONSTANTS[:service]}/cluster_name" =>
306
396
  CLOUDFUNCTIONS_CLUSTER_NAME,
307
397
  "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
308
398
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
@@ -321,8 +411,8 @@ module Constants
321
411
  log_name: 'cloud-functions',
322
412
  project_id: PROJECT_ID,
323
413
  labels: {
324
- "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
325
- "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
414
+ "#{GKE_CONSTANTS[:service]}/instance_id" => VM_ID,
415
+ "#{GKE_CONSTANTS[:service]}/cluster_name" =>
326
416
  CLOUDFUNCTIONS_CLUSTER_NAME,
327
417
  "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
328
418
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
@@ -330,6 +420,7 @@ module Constants
330
420
  }
331
421
  }
332
422
 
423
+ # Cloud Dataflow.
333
424
  DATAFLOW_PARAMS = {
334
425
  resource: {
335
426
  type: DATAFLOW_CONSTANTS[:resource_type],
@@ -349,6 +440,7 @@ module Constants
349
440
  }
350
441
  }
351
442
 
443
+ # Cloud Dataproc.
352
444
  DATAPROC_PARAMS = {
353
445
  resource: {
354
446
  type: DATAPROC_CONSTANTS[:resource_type],
@@ -367,6 +459,7 @@ module Constants
367
459
  }
368
460
  }
369
461
 
462
+ # Cloud ML.
370
463
  ML_PARAMS = {
371
464
  resource: {
372
465
  type: ML_CONSTANTS[:resource_type],
@@ -477,4 +570,50 @@ module Constants
477
570
  '' => '_'
478
571
  }
479
572
  ALL_TAGS = VALID_TAGS.merge(INVALID_TAGS)
573
+
574
+ # Stub value for Monitored resources from Metadata Agent.
575
+ # Map from the local_resource_id to the retrieved monitored resource.
576
+ MONITORED_RESOURCE_STUBS = {
577
+ # Implicit GCE instance.
578
+ IMPLICIT_LOCAL_RESOURCE_ID =>
579
+ {
580
+ 'type' => COMPUTE_CONSTANTS[:resource_type],
581
+ 'labels' => {
582
+ 'zone' => METADATA_ZONE,
583
+ 'instance_id' => METADATA_VM_ID
584
+ }
585
+ }.to_json,
586
+ # Docker container stderr / stdout logs.
587
+ "container.#{DOCKER_CONTAINER_ID}" =>
588
+ {
589
+ 'type' => DOCKER_CONSTANTS[:resource_type],
590
+ 'labels' => {
591
+ 'location' => ZONE,
592
+ 'container_id' => DOCKER_CONTAINER_ID
593
+ }
594
+ }.to_json,
595
+ # Docker container application logs.
596
+ "containerName.#{DOCKER_CONTAINER_NAME}" =>
597
+ {
598
+ 'type' => DOCKER_CONSTANTS[:resource_type],
599
+ 'labels' => {
600
+ 'location' => ZONE,
601
+ 'container_id' => DOCKER_CONTAINER_ID
602
+ }
603
+ }.to_json,
604
+ # GKE container logs.
605
+ "gke_containerName.#{CONTAINER_NAMESPACE_ID}.#{CONTAINER_POD_NAME}." \
606
+ "#{CONTAINER_CONTAINER_NAME}" =>
607
+ {
608
+ 'type' => GKE_CONSTANTS[:resource_type],
609
+ 'labels' => {
610
+ 'cluster_name' => CONTAINER_CLUSTER_NAME,
611
+ 'container_name' => CONTAINER_CONTAINER_NAME,
612
+ 'instance_id' => VM_ID,
613
+ 'namespace_id' => CONTAINER_NAMESPACE_ID,
614
+ 'pod_id' => CONTAINER_POD_ID,
615
+ 'zone' => ZONE
616
+ }
617
+ }.to_json
618
+ }
480
619
  end
@@ -185,6 +185,7 @@ class GoogleCloudOutputTest < Test::Unit::TestCase
185
185
 
186
186
  # synonyms for existing log levels
187
187
  assert_equal('ERROR', test_obj.parse_severity('ERR'))
188
+ assert_equal('ERROR', test_obj.parse_severity('SEVERE'))
188
189
  assert_equal('WARNING', test_obj.parse_severity('WARN'))
189
190
  assert_equal('CRITICAL', test_obj.parse_severity('FATAL'))
190
191
  assert_equal('DEBUG', test_obj.parse_severity('TRACE'))
@@ -192,6 +193,7 @@ class GoogleCloudOutputTest < Test::Unit::TestCase
192
193
  assert_equal('DEBUG', test_obj.parse_severity('FINE'))
193
194
  assert_equal('DEBUG', test_obj.parse_severity('FINER'))
194
195
  assert_equal('DEBUG', test_obj.parse_severity('FINEST'))
196
+ assert_equal('DEBUG', test_obj.parse_severity('CONFIG'))
195
197
 
196
198
  # single letters.
197
199
  assert_equal('DEBUG', test_obj.parse_severity('D'))
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.6
4
+ version: 0.6.7.pre.1
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: 2017-08-29 00:00:00.000000000 Z
12
+ date: 2017-09-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -249,9 +249,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
249
249
  version: '2.0'
250
250
  required_rubygems_version: !ruby/object:Gem::Requirement
251
251
  requirements:
252
- - - ">="
252
+ - - ">"
253
253
  - !ruby/object:Gem::Version
254
- version: '0'
254
+ version: 1.3.1
255
255
  requirements: []
256
256
  rubyforge_project:
257
257
  rubygems_version: 2.4.8