Per-Instrumentation Configuration via Environment Variables
I maintainer di solito rispondono entro 2 giorni
@wpessers ci sta già lavorando.
Dal 30/11/2025.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Is your feature request related to a problem? Please describe.
Yes. Currently, users cannot configure instrumentation-specific options (like GraphQLInstrumentation.mergeItems, PinoInstrumentation.disableLogSending, etc.) without using global.configureInstrumentations(), which requires code changes and defeats the "zero-code" promise.
The problem: When you define global.configureInstrumentations(), it completely replaces the default instrumentation system. You must manually import and configure ALL instrumentations you want, and OTEL_NODE_ENABLED_INSTRUMENTATIONS is ignored.
Example: To configure GraphQL with mergeItems: true while keeping http, grpc, pg, pino enabled, you must manually import and configure all 5 instrumentations in code, even though you only want to customize GraphQL.
// Must be at the top of handler file, before any imports
global.configureInstrumentations = async () => {
// Must import ALL instrumentations manually
const { GraphQLInstrumentation } = await import(
"@opentelemetry/instrumentation-graphql"
);
const { HttpInstrumentation } = await import(
"@opentelemetry/instrumentation-http"
);
const { GrpcInstrumentation } = await import(
"@opentelemetry/instrumentation-grpc"
);
const { PgInstrumentation } = await import(
"@opentelemetry/instrumentation-pg"
);
const { PinoInstrumentation } = await import(
"@opentelemetry/instrumentation-pino"
);
return [
new GraphQLInstrumentation({ mergeItems: true }), // Only GraphQL needs custom config
new HttpInstrumentation(), // But must still include all others
new GrpcInstrumentation(),
new PgInstrumentation(),
new PinoInstrumentation(),
];
};
Describe the solution you'd like
Add support for OTEL_INSTRUMENTATION_CONFIGS environment variable that accepts a JSON object mapping instrumentation names to their configurations. This works alongside OTEL_NODE_ENABLED_INSTRUMENTATIONS:
# Environment variables only - no code changes needed!
OTEL_NODE_ENABLED_INSTRUMENTATIONS="graphql,http,grpc,pg,pino"
OTEL_INSTRUMENTATION_CONFIGS={"graphql":{"mergeItems":true},"pino":{"disableLogSending":true}}
This would:
- Use
OTEL_NODE_ENABLED_INSTRUMENTATIONSto determine which instrumentations to load (existing behavior) - Apply configuration from
OTEL_INSTRUMENTATION_CONFIGSto respective instrumentations - Use defaults for instrumentations not specified in the config
Implementation: Add loadInstrumentationConfigs() function to parse the env var, and update defaultConfigureInstrumentations() in nodejs/packages/layer/src/wrapper.ts to merge user configs with defaults when creating instrumentations.
Describe alternatives you've considered
- Per-instrumentation environment variables (e.g.,
OTEL_PINO_CONFIG) - Rejected: Would pollute env vars and doesn't scale with 30+ instrumentations - Keep current
global.configureInstrumentations()approach - Rejected: Requires code changes, breaks zero-code promise - Configuration file - Rejected: Environment variables are more standard for Lambda and work better with AWS Systems Manager Parameter Store/Secrets Manager
Additional context
Benefits:
- True zero-code configuration via environment variables
- Works seamlessly with existing
OTEL_NODE_ENABLED_INSTRUMENTATIONS - Fully backwards compatible
- No code changes required in Lambda functions
Affected instrumentations: All 30+ instrumentations in the layer
Tip: React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.
- Lingua principale
- Go
- Stelle
- 433
- Fork
- 249
- Merge medio
- 1g 12h
- PR unite (30g)
- 39
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di open-telemetry/opentelemetry-lambda
-
enhancement ruby
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
open-telemetry/opentelemetry-lambda#2741 ·
I maintainer di solito rispondono entro 2 giorni
-
processor/cold_start
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
open-telemetry/opentelemetry-lambda#2738 ·
I maintainer di solito rispondono entro 2 giorni
-
Fix install-toolsApertago
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
open-telemetry/opentelemetry-lambda#2736 ·
I maintainer di solito rispondono entro 2 giorni
-
enhancement javascript
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
open-telemetry/opentelemetry-lambda#2744 ·
I maintainer di solito rispondono entro 2 giorni
-
enhancement python
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
open-telemetry/opentelemetry-lambda#2742 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di open-telemetry/opentelemetry-lambda
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
php/frankenphp#2829 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
tech-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
kind/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
teradata-labs/loom#624 ·
I maintainer di solito rispondono entro 1 giorno