in packages/opentelemetry-node/lib/detector-gcp.js [30:83]
detect() {
const metadataPromise = context.with(
suppressTracing(context.active()),
async () => {
const available = await isAvailable();
if (!available) {
return undefined;
}
return {
projectId: metadataQuery('project/project-id'),
instanceId: metadataQuery('instance/id').then((id) =>
id.toString()
),
zoneId: metadataQuery('instance/zone'),
clusterName: metadataQuery(
'instance/attributes/cluster-name'
),
hostname: metadataQuery('instance/hostname'),
};
}
);
const attributes = {
[SEMRESATTRS_CLOUD_PROVIDER]: metadataPromise.then(
(md) => md && CLOUDPROVIDERVALUES_GCP
),
[SEMRESATTRS_CLOUD_ACCOUNT_ID]: metadataPromise.then(
(md) => md?.projectId
),
[SEMRESATTRS_HOST_ID]: metadataPromise.then((md) => md?.instanceId),
[SEMRESATTRS_HOST_NAME]: metadataPromise.then((md) => md?.hostname),
[SEMRESATTRS_CLOUD_AVAILABILITY_ZONE]: metadataPromise.then(
(md) => md?.zoneId
),
};
// Add resource attributes for K8s.
// ref: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/detectors/node/opentelemetry-resource-detector-gcp/src/detectors/GcpDetector.ts#L69-L80
if (process.env.KUBERNETES_SERVICE_HOST) {
attributes[SEMRESATTRS_K8S_CLUSTER_NAME] = metadataPromise.then(
(md) => md?.clusterName
);
attributes[SEMRESATTRS_K8S_NAMESPACE_NAME] = metadataPromise.then(
(md) => md && process.env.NAMESPACE
);
attributes[SEMRESATTRS_K8S_POD_NAME] = metadataPromise.then(
(md) => md && process.env.HOSTNAME
);
attributes[SEMRESATTRS_CONTAINER_NAME] = metadataPromise.then(
(md) => md && process.env.CONTAINER_NAME
);
}
return {attributes};
},