Skip to content

Commit 71bd458

Browse files
committed
feat: provide cluster_name on GKE resources
For better log categorization in the Logging UI, we need to include the cluster name as part of the resource descriptor.
1 parent a64518e commit 71bd458

3 files changed

Lines changed: 52 additions & 18 deletions

File tree

packages/logging/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"arrify": "^1.0.0",
5858
"eventid": "^0.1.0",
5959
"extend": "^3.0.0",
60+
"gcp-metadata": "^0.2.0",
6061
"google-auto-auth": "^0.7.1",
6162
"google-gax": "^0.13.0",
6263
"google-proto-files": "^0.12.0",

packages/logging/src/metadata.js

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
'use strict';
2222

23+
var gcpMetadata = require('gcp-metadata');
24+
2325
/**
2426
* The Metadata class attempts to contact the metadata service and determine,
2527
* based on request success and environment variables, what type of resource
@@ -95,13 +97,16 @@ Metadata.getGCEDescriptor = function(projectId) {
9597
* @private
9698
*
9799
* @param {string} projectId - The project ID.
100+
* @param {string} clusterName - GKE cluster name.
98101
* @return {object}
99102
*/
100-
Metadata.getGKEDescriptor = function(projectId) {
103+
Metadata.getGKEDescriptor = function(projectId, clusterName) {
101104
return {
102105
type: 'container',
103106
labels: {
104-
project_id: projectId,
107+
// TODO(ofrobots): it would be good to include the namespace_id as well.
108+
cluster_name: clusterName,
109+
project_id: projectId
105110
}
106111
};
107112
};
@@ -138,21 +143,29 @@ Metadata.prototype.getDefaultResource = function(callback) {
138143
}
139144

140145
self.logging.auth.getEnvironment(function(err, env) {
141-
var defaultResource;
142-
143-
if (env.IS_APP_ENGINE) {
144-
defaultResource = Metadata.getGAEDescriptor(projectId);
145-
} else if (env.IS_CLOUD_FUNCTION) {
146-
defaultResource = Metadata.getCloudFunctionDescriptor(projectId);
147-
} else if (env.IS_CONTAINER_ENGINE) {
148-
defaultResource = Metadata.getGKEDescriptor(projectId);
149-
} else if (env.IS_COMPUTE_ENGINE) {
150-
defaultResource = Metadata.getGCEDescriptor(projectId);
146+
if (env.IS_CONTAINER_ENGINE) {
147+
gcpMetadata.instance('attributes/clusterName',
148+
function (err, _, clusterName) {
149+
if (err) {
150+
return callback(err);
151+
}
152+
callback(null, Metadata.getGKEDescriptor(projectId, clusterName));
153+
});
151154
} else {
152-
defaultResource = Metadata.getGlobalDescriptor(projectId);
153-
}
155+
var defaultResource;
156+
157+
if (env.IS_APP_ENGINE) {
158+
defaultResource = Metadata.getGAEDescriptor(projectId);
159+
} else if (env.IS_CLOUD_FUNCTION) {
160+
defaultResource = Metadata.getCloudFunctionDescriptor(projectId);
161+
} else if (env.IS_COMPUTE_ENGINE) {
162+
defaultResource = Metadata.getGCEDescriptor(projectId);
163+
} else {
164+
defaultResource = Metadata.getGlobalDescriptor(projectId);
165+
}
154166

155-
callback(null, defaultResource);
167+
callback(null, defaultResource);
168+
}
156169
});
157170
});
158171
};

packages/logging/test/metadata.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,20 @@
1818

1919
var assert = require('assert');
2020
var extend = require('extend');
21+
var proxyquire = require('proxyquire');
2122

22-
var Metadata = require('../src/metadata.js');
23+
var instanceValueOverride;
24+
var fakeGcpMetadata = {
25+
instance: function(path, cb) {
26+
setImmediate(function () {
27+
cb(null, null, instanceValueOverride || 'fake-instance-value');
28+
});
29+
}
30+
};
31+
32+
var Metadata = proxyquire('../src/metadata.js', {
33+
'gcp-metadata': fakeGcpMetadata
34+
});
2335

2436
describe('metadata', function() {
2537
var MetadataCached;
@@ -40,6 +52,7 @@ describe('metadata', function() {
4052
};
4153
extend(Metadata, MetadataCached);
4254
metadata = new Metadata(LOGGING);
55+
instanceValueOverride = null;
4356
});
4457

4558
afterEach(function() {
@@ -104,10 +117,13 @@ describe('metadata', function() {
104117
});
105118

106119
describe('getGKEDescriptor', function() {
120+
var CLUSTER_NAME = 'gke-cluster-name';
121+
107122
it('should return the correct descriptor', function() {
108-
assert.deepEqual(Metadata.getGKEDescriptor(PROJECT_ID), {
123+
assert.deepEqual(Metadata.getGKEDescriptor(PROJECT_ID, CLUSTER_NAME), {
109124
type: 'container',
110125
labels: {
126+
cluster_name: CLUSTER_NAME,
111127
project_id: PROJECT_ID
112128
}
113129
});
@@ -246,10 +262,14 @@ describe('metadata', function() {
246262

247263
describe('container engine', function() {
248264
it('should return correct descriptor', function(done) {
265+
var RETURNED_CLUSTER_NAME = 'fake-cluster-name';
249266
var DESCRIPTOR = {};
250267

251-
Metadata.getGKEDescriptor = function(projectId) {
268+
instanceValueOverride = RETURNED_CLUSTER_NAME;
269+
270+
Metadata.getGKEDescriptor = function(projectId, clusterName) {
252271
assert.strictEqual(projectId, RETURNED_PROJECT_ID);
272+
assert.strictEqual(clusterName, RETURNED_CLUSTER_NAME);
253273
return DESCRIPTOR;
254274
};
255275

0 commit comments

Comments
 (0)