in packages/opentelemetry-node/lib/detectors.js [85:120]
function resolveDetectors(detectors) {
if (detectors) {
detectors.push(distroDetector);
return detectors;
}
let detectorKeys = getStringListFromEnv('OTEL_NODE_RESOURCE_DETECTORS') || [
'all',
];
if (detectorKeys.some((k) => k === 'all')) {
detectorKeys = Object.keys(defaultDetectors);
} else if (detectorKeys.some((k) => k === 'none')) {
return [];
}
// NOTE: Kibana is doing a breakdown by service instance when plotting the metrics dashboard. So it needs the instance ID.
// Dashboard was added in https://github.com/elastic/kibana/pull/215735
if (!detectorKeys.includes('serviceinstance')) {
log.info(
`The "serviceinstance" resource detector has not been selected. This will result in Kibana's APM Service Metrics dashboard not working. See https://elastic.github.io/opentelemetry/edot-sdks/nodejs/configuration.html#otel_node_resource_detectors-details`
);
}
/** @type {Array<ResourceDetector | ResourceDetector[]>} */
const resolvedDetectors = [distroDetector];
for (const key of detectorKeys) {
if (defaultDetectors[key]) {
resolvedDetectors.push(defaultDetectors[key]);
} else {
log.warn(
`Invalid resource detector "${key}" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`
);
}
}
return resolvedDetectors.flat();
}