opentelemetry-lambda
opentelemetry-lambda copied to clipboard
Telemetry data not sent when using ESM
Hi everyone, we are trying to implement OTEL for our lambdas and have problem with ESM support. When lambda is compiled to commonjs and has a nodejs lambda layer configured ( for example the prebuilt one ), it sends out logs and other things properly. When lambda is built to ESM, no logs or any other telemetry data are sent.
I've tried to use --import instead of --require as part of the otel-handler script and also to compile the lambda layer itself to ESM, but that did not do the trick.
The same layer version with same lambda version works fine when compiled to commonjs instead of ESM.
Steps to reproduce
- Build any simple lambda, and compile it to ESM. Ive done it with this lambda:
import { pino } from "pino";
const logger = pino();
// @ts-ignore
export async function handler() {
logger.info(`Lets log a current date: ${new Date().toLocaleDateString()}` );
return JSON.stringify({ "success": true });
}
- Add lambda layer for nodejs
- Try to send logs to collector ( we have collector as ECS service in AWS )
- Logs or any other metrics didn't come
What did you expect to see? Logs, metrics and traces would be expected in Grafana.
What did you see instead? No errors, lambda finishes as expected but no telemetery data are sent.
What version of collector/language SDK version did you use?
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/api-logs": "^0.53.0",
"@opentelemetry/auto-configuration-propagators": "^0.3.0",
"@opentelemetry/core": "^1.26.0",
"@opentelemetry/exporter-logs-otlp-http": "^0.53.0",
"@opentelemetry/exporter-metrics-otlp-http": "^0.53.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.53.0",
"@opentelemetry/instrumentation": "^0.53.0",
"@opentelemetry/instrumentation-aws-lambda": "^0.44.0",
"@opentelemetry/instrumentation-aws-sdk": "^0.44.0",
"@opentelemetry/instrumentation-dns": "^0.39.0",
"@opentelemetry/instrumentation-http": "^0.53.0",
"@opentelemetry/instrumentation-net": "^0.39.0",
"@opentelemetry/instrumentation-pino": "^0.42.0",
"@opentelemetry/propagator-aws-xray": "^1.26.0",
"@opentelemetry/resource-detector-aws": "^1.6.1",
"@opentelemetry/resources": "^1.26.0",
"@opentelemetry/sdk-logs": "^0.53.0",
"@opentelemetry/sdk-metrics": "^1.26.0",
"@opentelemetry/sdk-trace-base": "^1.26.0",
"@opentelemetry/sdk-trace-node": "^1.26.0",
"@opentelemetry/semantic-conventions": "^1.27.0"
What language layer did you use? Config: Nodejs v20, Typescript