function resolveDetectors()

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();
}