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

Sign up to get free protection for your applications and to get access to all the features.
@@ -503,7 +503,7 @@ module BaseTest
503
503
  end
504
504
  params = CONTAINER_FROM_METADATA_PARAMS.merge(
505
505
  labels: CONTAINER_FROM_METADATA_PARAMS[:labels].merge(
506
- "#{CONTAINER_CONSTANTS[:service]}/container_name" =>
506
+ "#{GKE_CONSTANTS[:service]}/container_name" =>
507
507
  URI.decode(encoded_name)),
508
508
  log_name: encoded_name)
509
509
  verify_log_entries(0, params, 'textPayload')
@@ -830,7 +830,7 @@ module BaseTest
830
830
  d.run
831
831
  end
832
832
  expected_params = CONTAINER_FROM_TAG_PARAMS.merge(
833
- labels: { "#{CONTAINER_CONSTANTS[:service]}/stream" => 'stderr' }
833
+ labels: { "#{GKE_CONSTANTS[:service]}/stream" => 'stderr' }
834
834
  ) { |_, oldval, newval| oldval.merge(newval) }
835
835
  verify_log_entries(1, expected_params) do |entry, i|
836
836
  verify_default_log_entry_text(entry['textPayload'], i, entry)
@@ -1106,6 +1106,197 @@ module BaseTest
1106
1106
  end
1107
1107
  end
1108
1108
 
1109
+ # Metadata Agent related tests.
1110
+
1111
+ # Test enable_metadata_agent not set or set to false.
1112
+ def test_configure_enable_metadata_agent_default_and_false
1113
+ setup_gce_metadata_stubs
1114
+ [create_driver, create_driver(DISABLE_METADATA_AGENT_CONFIG)].each do |d|
1115
+ assert_false d.instance.instance_variable_get(:@enable_metadata_agent)
1116
+ end
1117
+ end
1118
+
1119
+ # Test enable_metadata_agent set to true.
1120
+ def test_configure_enable_metadata_agent_true
1121
+ new_stub_context do
1122
+ setup_gce_metadata_stubs
1123
+ setup_metadata_agent_stubs
1124
+ d = create_driver(ENABLE_METADATA_AGENT_CONFIG)
1125
+ assert_true d.instance.instance_variable_get(:@enable_metadata_agent)
1126
+ assert_requested_metadata_agent_stub(IMPLICIT_LOCAL_RESOURCE_ID)
1127
+ end
1128
+ end
1129
+
1130
+ # Test that an implicit monitored resource can be retrieved from Metadata
1131
+ # Agent with an empty string as the local_resource_id.
1132
+ def test_retrieve_implicit_monitored_resource
1133
+ # GCE metadata stubs has VM_ID and ZONE, while the Metadata Agent stub has
1134
+ # METADATA_VM_ID and METADATA_ZONE.
1135
+ new_stub_context do
1136
+ setup_gce_metadata_stubs
1137
+ setup_metadata_agent_stubs
1138
+ setup_logging_stubs do
1139
+ d = create_driver(ENABLE_METADATA_AGENT_CONFIG)
1140
+ d.emit('message' => log_entry(0))
1141
+ d.run
1142
+ end
1143
+ verify_log_entries(1, COMPUTE_PARAMS_WITH_METADATA_VM_ID_AND_ZONE)
1144
+ assert_requested_metadata_agent_stub(IMPLICIT_LOCAL_RESOURCE_ID)
1145
+ end
1146
+ end
1147
+
1148
+ # Docker Container.
1149
+
1150
+ # Test textPayload logs from Docker container stdout / stderr.
1151
+ def test_docker_container_stdout_stderr_logs_text_payload
1152
+ [1, 2, 3, 5, 11, 50].each do |n|
1153
+ new_stub_context do
1154
+ setup_gce_metadata_stubs
1155
+ setup_metadata_agent_stubs
1156
+ setup_logging_stubs do
1157
+ d = create_driver(DOCKER_CONTAINER_CONFIG)
1158
+ n.times do |i|
1159
+ d.emit(docker_container_stdout_stderr_log_entry(log_entry(i)))
1160
+ end
1161
+ d.run
1162
+ end
1163
+ verify_log_entries(n, DOCKER_CONTAINER_PARAMS)
1164
+ assert_requested_metadata_agent_stub(IMPLICIT_LOCAL_RESOURCE_ID)
1165
+ assert_requested_metadata_agent_stub("container.#{DOCKER_CONTAINER_ID}")
1166
+ end
1167
+ end
1168
+ end
1169
+
1170
+ # Test jsonPayload logs from Docker container stdout / stderr.
1171
+ def test_docker_container_stdout_stderr_logs_json_payload
1172
+ [1, 2, 3, 5, 11, 50].each do |n|
1173
+ new_stub_context do
1174
+ setup_gce_metadata_stubs
1175
+ setup_metadata_agent_stubs
1176
+ setup_logging_stubs do
1177
+ d = create_driver(DOCKER_CONTAINER_CONFIG)
1178
+ n.times do
1179
+ d.emit(docker_container_stdout_stderr_log_entry(
1180
+ '{"msg": "test log entry ' \
1181
+ "#{n}" \
1182
+ '", "tag2": "test", "data": ' \
1183
+ '5000, "severity": "WARNING"}'))
1184
+ end
1185
+ d.run
1186
+ end
1187
+ verify_log_entries(n, DOCKER_CONTAINER_PARAMS, 'jsonPayload') do |entry|
1188
+ fields = get_fields(entry['jsonPayload'])
1189
+ assert_equal 3, fields.size, entry
1190
+ assert_equal "test log entry #{n}", get_string(fields['msg']), entry
1191
+ assert_equal 'test', get_string(fields['tag2']), entry
1192
+ assert_equal 5000, get_number(fields['data']), entry
1193
+ end
1194
+ assert_requested_metadata_agent_stub(IMPLICIT_LOCAL_RESOURCE_ID)
1195
+ assert_requested_metadata_agent_stub("container.#{DOCKER_CONTAINER_ID}")
1196
+ end
1197
+ end
1198
+ end
1199
+
1200
+ # Test logs from applications running in Docker containers. These logs have
1201
+ # the label "logging.googleapis.com/local_resource_id" set in the format of
1202
+ # "containerName.<container_name>".
1203
+ def test_docker_container_application_logs
1204
+ new_stub_context do
1205
+ setup_gce_metadata_stubs
1206
+ setup_metadata_agent_stubs
1207
+ setup_logging_stubs do
1208
+ # Metadata Agent is not enabled. Will call Docker Remote API for
1209
+ # container info.
1210
+ d = create_driver(ENABLE_METADATA_AGENT_CONFIG)
1211
+ d.emit(docker_container_application_log_entry(log_entry(0)))
1212
+ d.run
1213
+ end
1214
+ verify_log_entries(1, DOCKER_CONTAINER_PARAMS_NO_STREAM)
1215
+ assert_requested_metadata_agent_stub(IMPLICIT_LOCAL_RESOURCE_ID)
1216
+ assert_requested_metadata_agent_stub(
1217
+ "containerName.#{DOCKER_CONTAINER_NAME}")
1218
+ end
1219
+ end
1220
+
1221
+ # Test that the 'time' field from the json record is extracted and set to
1222
+ # entry.timestamp for Docker container logs.
1223
+ def test_time_field_extraction_for_docker_container_logs
1224
+ new_stub_context do
1225
+ setup_gce_metadata_stubs
1226
+ setup_metadata_agent_stubs
1227
+ setup_logging_stubs do
1228
+ d = create_driver(ENABLE_METADATA_AGENT_CONFIG)
1229
+ d.emit(docker_container_application_log_entry(log_entry(0)))
1230
+ d.run
1231
+ end
1232
+ verify_log_entries(1, DOCKER_CONTAINER_PARAMS_NO_STREAM) do |entry, i|
1233
+ verify_default_log_entry_text(entry['textPayload'], i, entry)
1234
+ # Timestamp in 'time' field from log entry should be set properly.
1235
+ assert_equal DOCKER_CONTAINER_SECONDS_EPOCH,
1236
+ entry['timestamp']['seconds'], entry
1237
+ assert_equal DOCKER_CONTAINER_NANOS,
1238
+ entry['timestamp']['nanos'], entry
1239
+ end
1240
+ assert_requested_metadata_agent_stub(IMPLICIT_LOCAL_RESOURCE_ID)
1241
+ assert_requested_metadata_agent_stub(
1242
+ "containerName.#{DOCKER_CONTAINER_NAME}")
1243
+ end
1244
+ end
1245
+
1246
+ # Test that the 'source' field is properly extracted from the record json and
1247
+ # set as a common label 'stream'.
1248
+ def test_source_for_docker_container_logs
1249
+ {
1250
+ docker_container_stdout_stderr_log_entry(
1251
+ log_entry(0), DOCKER_CONTAINER_STREAM_STDOUT) =>
1252
+ DOCKER_CONTAINER_PARAMS,
1253
+ docker_container_stdout_stderr_log_entry(
1254
+ log_entry(0), DOCKER_CONTAINER_STREAM_STDERR) =>
1255
+ DOCKER_CONTAINER_PARAMS_STREAM_STDERR,
1256
+ docker_container_application_log_entry(log_entry(0)) =>
1257
+ DOCKER_CONTAINER_PARAMS_NO_STREAM,
1258
+ docker_container_application_log_entry(log_entry(0)) \
1259
+ .merge('severity' => 'warning') =>
1260
+ DOCKER_CONTAINER_PARAMS_NO_STREAM
1261
+ }.each do |log_entry, expected_params|
1262
+ new_stub_context do
1263
+ setup_gce_metadata_stubs
1264
+ setup_metadata_agent_stubs
1265
+ setup_logging_stubs do
1266
+ d = create_driver(DOCKER_CONTAINER_CONFIG)
1267
+ d.emit(log_entry)
1268
+ d.run
1269
+ end
1270
+ verify_log_entries(1, expected_params)
1271
+ end
1272
+ end
1273
+ end
1274
+
1275
+ # Test GKE container logs. These logs have the label
1276
+ # "logging.googleapis.com/local_resource_id" set in the format of
1277
+ # "gke_containerName.<namespace_id>.<pod_name>.<container_name>".
1278
+ def test_gke_container_logs
1279
+ [1, 2, 3, 5, 11, 50].each do |n|
1280
+ new_stub_context do
1281
+ setup_gce_metadata_stubs
1282
+ setup_container_metadata_stubs
1283
+ setup_metadata_agent_stubs
1284
+ setup_logging_stubs do
1285
+ d = create_driver(ENABLE_METADATA_AGENT_CONFIG)
1286
+ n.times do |i|
1287
+ d.emit(gke_container_log_entry(log_entry(i)))
1288
+ end
1289
+ d.run
1290
+ end
1291
+ verify_log_entries(n, CONTAINER_FROM_APPLICATION_PARAMS)
1292
+ assert_requested_metadata_agent_stub(IMPLICIT_LOCAL_RESOURCE_ID)
1293
+ assert_requested_metadata_agent_stub(
1294
+ "gke_containerName.#{CONTAINER_NAMESPACE_ID}.#{CONTAINER_POD_NAME}." \
1295
+ "#{CONTAINER_CONTAINER_NAME}")
1296
+ end
1297
+ end
1298
+ end
1299
+
1109
1300
  private
1110
1301
 
1111
1302
  def stub_metadata_request(metadata_path, response_body)
@@ -1221,6 +1412,33 @@ module BaseTest
1221
1412
  Prometheus::Client.registry.instance_variable_set('@metrics', {})
1222
1413
  end
1223
1414
 
1415
+ # Metadata Agent.
1416
+
1417
+ def metadata_request_url(local_resource_id)
1418
+ "#{DEFAULT_METADATA_AGENT_URL}/monitoredResource/#{local_resource_id}"
1419
+ end
1420
+
1421
+ # Provide a stub context that initializes @logs_sent, executes the block and
1422
+ # resets WebMock at the end.
1423
+ def new_stub_context
1424
+ @logs_sent = []
1425
+ yield
1426
+ WebMock.reset!
1427
+ end
1428
+
1429
+ def setup_metadata_agent_stubs
1430
+ MONITORED_RESOURCE_STUBS.each do |local_resource_id, resource|
1431
+ stub_request(:get, metadata_request_url(local_resource_id))
1432
+ .to_return(status: 200, body: resource)
1433
+ end
1434
+ end
1435
+
1436
+ def assert_requested_metadata_agent_stub(local_resource_id)
1437
+ assert_requested :get, metadata_request_url(local_resource_id)
1438
+ end
1439
+
1440
+ # GKE Container.
1441
+
1224
1442
  def container_tag_with_container_name(container_name)
1225
1443
  "kubernetes.#{CONTAINER_POD_NAME}_#{CONTAINER_NAMESPACE_NAME}_" \
1226
1444
  "#{container_name}"
@@ -1253,6 +1471,40 @@ module BaseTest
1253
1471
  }
1254
1472
  end
1255
1473
 
1474
+ def gke_container_log_entry(log)
1475
+ {
1476
+ log: log,
1477
+ LOCAL_RESOURCE_ID_KEY =>
1478
+ "gke_containerName.#{CONTAINER_NAMESPACE_ID}" \
1479
+ ".#{CONTAINER_POD_NAME}.#{CONTAINER_CONTAINER_NAME}"
1480
+ }
1481
+ end
1482
+
1483
+ # Docker Container.
1484
+
1485
+ def docker_container_stdout_stderr_log_entry(
1486
+ log, stream = DOCKER_CONTAINER_STREAM_STDOUT)
1487
+ severity = if stream == DOCKER_CONTAINER_STREAM_STDOUT
1488
+ 'INFO'
1489
+ else
1490
+ 'ERROR'
1491
+ end
1492
+ {
1493
+ log: log,
1494
+ source: stream,
1495
+ severity: severity,
1496
+ LOCAL_RESOURCE_ID_KEY => "container.#{DOCKER_CONTAINER_ID}"
1497
+ }
1498
+ end
1499
+
1500
+ def docker_container_application_log_entry(log)
1501
+ {
1502
+ log: log,
1503
+ time: DOCKER_CONTAINER_TIMESTAMP,
1504
+ LOCAL_RESOURCE_ID_KEY => "containerName.#{DOCKER_CONTAINER_NAME}"
1505
+ }
1506
+ end
1507
+
1256
1508
  def cloudfunctions_log_entry(i)
1257
1509
  {
1258
1510
  stream: 'stdout',
@@ -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'
@@ -149,6 +165,20 @@ module Constants
149
165
  monitoring_type prometheus
150
166
  )
151
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
+
152
182
  CUSTOM_METADATA_CONFIG = %(
153
183
  project_id #{CUSTOM_PROJECT_ID}
154
184
  zone #{CUSTOM_ZONE}
@@ -205,6 +235,8 @@ module Constants
205
235
  )
206
236
 
207
237
  # Service configurations for various services.
238
+
239
+ # GCE.
208
240
  COMPUTE_PARAMS = {
209
241
  resource: {
210
242
  type: COMPUTE_CONSTANTS[:resource_type],
@@ -219,7 +251,16 @@ module Constants
219
251
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
220
252
  }
221
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
+ )
222
262
 
263
+ # GAE.
223
264
  VMENGINE_PARAMS = {
224
265
  resource: {
225
266
  type: APPENGINE_CONSTANTS[:resource_type],
@@ -237,12 +278,13 @@ module Constants
237
278
  }
238
279
  }
239
280
 
281
+ # GKE Container.
240
282
  CONTAINER_TAG = "kubernetes.#{CONTAINER_POD_NAME}_" \
241
283
  "#{CONTAINER_NAMESPACE_NAME}_#{CONTAINER_CONTAINER_NAME}"
242
284
 
243
285
  CONTAINER_FROM_METADATA_PARAMS = {
244
286
  resource: {
245
- type: CONTAINER_CONSTANTS[:resource_type],
287
+ type: GKE_CONSTANTS[:resource_type],
246
288
  labels: {
247
289
  'cluster_name' => CONTAINER_CLUSTER_NAME,
248
290
  'namespace_id' => CONTAINER_NAMESPACE_ID,
@@ -255,10 +297,10 @@ module Constants
255
297
  log_name: CONTAINER_CONTAINER_NAME,
256
298
  project_id: PROJECT_ID,
257
299
  labels: {
258
- "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
300
+ "#{GKE_CONSTANTS[:service]}/namespace_name" =>
259
301
  CONTAINER_NAMESPACE_NAME,
260
- "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
261
- "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
302
+ "#{GKE_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
303
+ "#{GKE_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
262
304
  "label/#{CONTAINER_LABEL_KEY}" => CONTAINER_LABEL_VALUE,
263
305
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
264
306
  }
@@ -268,7 +310,7 @@ module Constants
268
310
  # namespace and pod names.
269
311
  CONTAINER_FROM_TAG_PARAMS = {
270
312
  resource: {
271
- type: CONTAINER_CONSTANTS[:resource_type],
313
+ type: GKE_CONSTANTS[:resource_type],
272
314
  labels: {
273
315
  'cluster_name' => CONTAINER_CLUSTER_NAME,
274
316
  'namespace_id' => CONTAINER_NAMESPACE_NAME,
@@ -281,14 +323,56 @@ module Constants
281
323
  log_name: CONTAINER_CONTAINER_NAME,
282
324
  project_id: PROJECT_ID,
283
325
  labels: {
284
- "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
326
+ "#{GKE_CONSTANTS[:service]}/namespace_name" =>
285
327
  CONTAINER_NAMESPACE_NAME,
286
- "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
287
- "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
328
+ "#{GKE_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
329
+ "#{GKE_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
288
330
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
289
331
  }
290
332
  }
291
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_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_NO_STREAM = DOCKER_CONTAINER_PARAMS.merge(labels: {})
374
+
375
+ # Cloud Functions.
292
376
  CLOUDFUNCTIONS_TAG = "kubernetes.#{CLOUDFUNCTIONS_POD_NAME}_" \
293
377
  "#{CLOUDFUNCTIONS_NAMESPACE_NAME}_" \
294
378
  "#{CLOUDFUNCTIONS_CONTAINER_NAME}"
@@ -305,8 +389,8 @@ module Constants
305
389
  project_id: PROJECT_ID,
306
390
  labels: {
307
391
  'execution_id' => CLOUDFUNCTIONS_EXECUTION_ID,
308
- "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
309
- "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
392
+ "#{GKE_CONSTANTS[:service]}/instance_id" => VM_ID,
393
+ "#{GKE_CONSTANTS[:service]}/cluster_name" =>
310
394
  CLOUDFUNCTIONS_CLUSTER_NAME,
311
395
  "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
312
396
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
@@ -325,8 +409,8 @@ module Constants
325
409
  log_name: 'cloud-functions',
326
410
  project_id: PROJECT_ID,
327
411
  labels: {
328
- "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
329
- "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
412
+ "#{GKE_CONSTANTS[:service]}/instance_id" => VM_ID,
413
+ "#{GKE_CONSTANTS[:service]}/cluster_name" =>
330
414
  CLOUDFUNCTIONS_CLUSTER_NAME,
331
415
  "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
332
416
  "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
@@ -334,6 +418,7 @@ module Constants
334
418
  }
335
419
  }
336
420
 
421
+ # Cloud Dataflow.
337
422
  DATAFLOW_PARAMS = {
338
423
  resource: {
339
424
  type: DATAFLOW_CONSTANTS[:resource_type],
@@ -353,6 +438,7 @@ module Constants
353
438
  }
354
439
  }
355
440
 
441
+ # Cloud Dataproc.
356
442
  DATAPROC_PARAMS = {
357
443
  resource: {
358
444
  type: DATAPROC_CONSTANTS[:resource_type],
@@ -371,6 +457,7 @@ module Constants
371
457
  }
372
458
  }
373
459
 
460
+ # Cloud ML.
374
461
  ML_PARAMS = {
375
462
  resource: {
376
463
  type: ML_CONSTANTS[:resource_type],
@@ -481,4 +568,50 @@ module Constants
481
568
  '' => '_'
482
569
  }
483
570
  ALL_TAGS = VALID_TAGS.merge(INVALID_TAGS)
571
+
572
+ # Stub value for Monitored resources from Metadata Agent.
573
+ # Map from the local_resource_id to the retrieved monitored resource.
574
+ MONITORED_RESOURCE_STUBS = {
575
+ # Implicit GCE instance.
576
+ IMPLICIT_LOCAL_RESOURCE_ID =>
577
+ {
578
+ 'type' => COMPUTE_CONSTANTS[:resource_type],
579
+ 'labels' => {
580
+ 'zone' => METADATA_ZONE,
581
+ 'instance_id' => METADATA_VM_ID
582
+ }
583
+ }.to_json,
584
+ # Docker container stderr / stdout logs.
585
+ "container.#{DOCKER_CONTAINER_ID}" =>
586
+ {
587
+ 'type' => DOCKER_CONSTANTS[:resource_type],
588
+ 'labels' => {
589
+ 'location' => ZONE,
590
+ 'container_id' => DOCKER_CONTAINER_ID
591
+ }
592
+ }.to_json,
593
+ # Docker container application logs.
594
+ "containerName.#{DOCKER_CONTAINER_NAME}" =>
595
+ {
596
+ 'type' => DOCKER_CONSTANTS[:resource_type],
597
+ 'labels' => {
598
+ 'location' => ZONE,
599
+ 'container_id' => DOCKER_CONTAINER_ID
600
+ }
601
+ }.to_json,
602
+ # GKE container logs.
603
+ "gke_containerName.#{CONTAINER_NAMESPACE_ID}.#{CONTAINER_POD_NAME}." \
604
+ "#{CONTAINER_CONTAINER_NAME}" =>
605
+ {
606
+ 'type' => GKE_CONSTANTS[:resource_type],
607
+ 'labels' => {
608
+ 'cluster_name' => CONTAINER_CLUSTER_NAME,
609
+ 'container_name' => CONTAINER_CONTAINER_NAME,
610
+ 'instance_id' => VM_ID,
611
+ 'namespace_id' => CONTAINER_NAMESPACE_ID,
612
+ 'pod_id' => CONTAINER_POD_ID,
613
+ 'zone' => ZONE
614
+ }
615
+ }.to_json
616
+ }
484
617
  end