Skip to content

Commit 5491461

Browse files
authored
feat(serverless-collector): added service name detection (#1468)
refs https://jsw.ibm.com/browse/INSTA-20571
1 parent d2996e1 commit 5491461

File tree

5 files changed

+61
-8
lines changed

5 files changed

+61
-8
lines changed

example-apps/serverless-collector/src/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
'use strict';
66

77
const path = require('path');
8-
const cors = require('cors');
9-
108
const MODE = process.env.MODE || 'npm';
119
const APP_PORT = process.env.APP_PORT || 9191;
1210
const DOWNSTREAM_URL = process.env.DOWNSTREAM_URL;
11+
1312
let packageToRequire = path.join(__dirname, '..', '..', '..', 'packages', 'serverless-collector');
1413

1514
if (MODE === 'npm') {
1615
packageToRequire = '@instana/serverless-collector';
1716
}
1817

19-
console.log(`Enabling @instana/serverless-collector (requiring ${packageToRequire})`);
2018
require(packageToRequire);
2119

20+
const cors = require('cors');
21+
2222
const express = require('express');
2323
const app = express();
2424

@@ -45,5 +45,5 @@ app.get('/trace', (req, res) => {
4545
});
4646

4747
app.listen(APP_PORT, () => {
48-
console.log('Listening on port', APP_PORT);
48+
console.log(`serverless-collector app started on port ${APP_PORT} in mode ${MODE}`);
4949
});

packages/serverless-collector/src/activate.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,43 @@
66

77
const instanaCore = require('@instana/core');
88
const { backendConnector, consoleLogger } = require('@instana/serverless');
9-
109
const identityProvider = require('./identity_provider');
1110

1211
const { tracing, util: coreUtil } = instanaCore;
1312
const { normalizeConfig } = coreUtil;
13+
const customMetrics = require('./metrics');
1414

1515
let logger = consoleLogger;
1616

1717
const config = normalizeConfig({});
1818
config.logger = logger;
1919

20-
function init() {
20+
async function init() {
21+
// NOTE: We accept for `process.env.INSTANA_DEBUG` any string value - does not have to be "true".
2122
if (process.env.INSTANA_DEBUG || process.env.INSTANA_LOG_LEVEL) {
2223
logger.setLevel(process.env.INSTANA_DEBUG ? 'debug' : process.env.INSTANA_LOG_LEVEL);
2324
}
2425

25-
// NOTE: This package will not collect metrics.
2626
// NOTE: This package does not support autotracing.
27+
// NOTE: This package does not support metrics.
2728

2829
try {
30+
// NOTE: We have to call pre-init because we are running an async call to get the service name.
31+
// The goal is to register our instrumentations as early as possible.
32+
// Otherwise we can easily run into errors e.g. from `hasThePackageBeenInitializedTooLate`.
33+
instanaCore.preInit();
34+
35+
const serviceName = await customMetrics.name(config, logger);
36+
if (serviceName) {
37+
config.serviceName = serviceName;
38+
}
39+
2940
identityProvider.init();
3041
backendConnector.init(identityProvider, logger, false, true, 950);
3142
instanaCore.init(config, backendConnector, identityProvider);
3243
tracing.activate();
3344

34-
logger.debug('@instana/serverless-collector initialized.');
45+
logger.info('@instana/serverless-collector initialized.');
3546

3647
// eslint-disable-next-line no-unused-expressions
3748
process.send && process.send('instana.serverless-collector.initialized');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* (c) Copyright IBM Corp. 2024
3+
*/
4+
5+
'use strict';
6+
7+
module.exports = {
8+
get name() {
9+
return require('./name');
10+
}
11+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* (c) Copyright IBM Corp. 2024
3+
*/
4+
5+
'use strict';
6+
7+
const instanaCore = require('@instana/core');
8+
9+
// NOTE:
10+
// The service name will be "localhost" because the serverless collector does not support
11+
// metrics. Metrics contain the package.json name. AFAIK there is currently
12+
// no way to connect metrics with spans for **agentless non serverless** environments.
13+
// https://jsw.ibm.com/browse/INSTA-3607
14+
module.exports = (config, logger) => {
15+
if (process.env.INSTANA_SERVICE_NAME) {
16+
return process.env.INSTANA_SERVICE_NAME;
17+
}
18+
19+
return new Promise(resolve => {
20+
instanaCore.util.applicationUnderMonitoring.getMainPackageJsonStartingAtMainModule(config, (err, packageJson) => {
21+
if (err) {
22+
logger.debug('Failed to determine main package.json.', err);
23+
return resolve();
24+
}
25+
26+
logger.debug(`Found main package.json: ${packageJson.name}`);
27+
resolve(packageJson.name);
28+
});
29+
});
30+
};

packages/serverless/src/console_logger.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
'use strict';
99

10+
// 30 = info
1011
let minLevel = 30;
1112

1213
module.exports = exports = {

0 commit comments

Comments
 (0)