Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions experimental/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
* feat(opentelemetry-configuration): Parse of Configuration File [#5875](https://github.com/open-telemetry/opentelemetry-js/pull/5875) @maryliag
* feat(opentelemetry-configuration): parse of array objects on configuration file [#5947](https://github.com/open-telemetry/opentelemetry-js/pull/5947) @maryliag
* feat(opentelemetry-configuration): parse of environment variables on configuration file [#5947](https://github.com/open-telemetry/opentelemetry-js/pull/5947) @maryliag
* feat(opentelemetry-configuration): parse more parameters from config file [#5955](https://github.com/open-telemetry/opentelemetry-js/pull/5955) @maryliag
* feat(exporter-prometheus): support withoutTargetInfo option [#5962](https://github.com/open-telemetry/opentelemetry-js/pull/5962) @cjihrig

### :bug: Bug Fixes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,16 @@ function setAttributeLimits(config: ConfigurationModel): void {
}

function setPropagators(config: ConfigurationModel): void {
const propagators = getStringListFromEnv('OTEL_PROPAGATORS');
if (propagators) {
config.propagator = {
composite: propagators,
composite_list:
getStringFromEnv('OTEL_PROPAGATORS') || 'tracecontext,baggage',
};
const composite = getStringListFromEnv('OTEL_PROPAGATORS');
if (composite && composite.length > 0) {
config.propagator.composite = [];
for (let i = 0; i < composite.length; i++) {
config.propagator.composite.push({ [composite[i]]: null });
}
}
const compositeList = getStringFromEnv('OTEL_PROPAGATORS');
if (compositeList) {
config.propagator.composite_list = compositeList;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@

import { diagLogLevelFromString, getStringFromEnv } from '@opentelemetry/core';
import {
AttributeLimits,
ConfigAttributes,
ConfigLoggerProvider,
ConfigMeterProvider,
ConfigPropagator,
ConfigTracerProvider,
ConfigurationModel,
initializeDefaultConfiguration,
} from './configModel';
Expand Down Expand Up @@ -98,6 +103,11 @@ function parseConfigFile(config: ConfigurationModel) {
}

setResourceAttributes(config, parsedContent['resource']?.['attributes']);
setAttributeLimits(config, parsedContent['attribute_limits']);
setPropagator(config, parsedContent['propagator']);
setTracerProvider(config, parsedContent['tracer_provider']);
setMeterProvider(config, parsedContent['meter_provider']);
setLoggerProvider(config, parsedContent['logger_provider']);
} else {
throw new Error(
`Unsupported File Format: ${parsedContent['file_format']}. It must be one of the following: ${supportedFileVersions}`
Expand Down Expand Up @@ -145,3 +155,156 @@ function setResourceAttributes(
}
}
}

function setAttributeLimits(
config: ConfigurationModel,
attrLimits: AttributeLimits
) {
if (attrLimits) {
const lengthLimit = getNumberFromConfigFile(
attrLimits['attribute_value_length_limit']
);
if (lengthLimit) {
config.attribute_limits.attribute_value_length_limit = lengthLimit;
}
const countLimit = getNumberFromConfigFile(
attrLimits['attribute_count_limit']
);
if (countLimit) {
config.attribute_limits.attribute_count_limit = countLimit;
}
}
}

function setPropagator(
config: ConfigurationModel,
propagator: ConfigPropagator
): void {
if (propagator) {
const auxList = [];
const composite = [];
for (let i = 0; i < propagator.composite.length; i++) {
const key = Object.keys(propagator.composite[i])[0];
auxList.push(key);
composite.push({ [key]: null });
}
const compositeList = getStringListFromConfigFile(
propagator['composite_list']
);
if (compositeList) {
for (let i = 0; i < compositeList.length; i++) {
if (!auxList.includes(compositeList[i])) {
composite.push({ [compositeList[i]]: null });
}
}
}
if (composite.length > 0) {
config.propagator.composite = composite;
}

const compositeListString = getStringFromConfigFile(
propagator['composite_list']
);
if (compositeListString) {
config.propagator.composite_list = compositeListString;
}
}
}

function setTracerProvider(
config: ConfigurationModel,
tracerProvider: ConfigTracerProvider
): void {
if (tracerProvider) {
// Limits
if (tracerProvider['limits']) {
const attributeValueLengthLimit = getNumberFromConfigFile(
tracerProvider['limits']['attribute_value_length_limit']
);

if (attributeValueLengthLimit) {
config.tracer_provider.limits.attribute_value_length_limit =
attributeValueLengthLimit;
}

const attributeCountLimit = getNumberFromConfigFile(
tracerProvider['limits']['attribute_count_limit']
);
if (attributeCountLimit) {
config.tracer_provider.limits.attribute_count_limit =
attributeCountLimit;
}

const eventCountLimit = getNumberFromConfigFile(
tracerProvider['limits']['event_count_limit']
);
if (eventCountLimit) {
config.tracer_provider.limits.event_count_limit = eventCountLimit;
}

const linkCountLimit = getNumberFromConfigFile(
tracerProvider['limits']['link_count_limit']
);
if (linkCountLimit) {
config.tracer_provider.limits.link_count_limit = linkCountLimit;
}

const eventAttributeCountLimit = getNumberFromConfigFile(
tracerProvider['limits']['event_attribute_count_limit']
);
if (eventAttributeCountLimit) {
config.tracer_provider.limits.event_attribute_count_limit =
eventAttributeCountLimit;
}

const linkAttributeCountLimit = getNumberFromConfigFile(
tracerProvider['limits']['link_attribute_count_limit']
);
if (linkAttributeCountLimit) {
config.tracer_provider.limits.link_attribute_count_limit =
linkAttributeCountLimit;
}
}
}
}

function setMeterProvider(
config: ConfigurationModel,
meterProvider: ConfigMeterProvider
): void {
if (meterProvider) {
const exemplarFilter = getStringFromConfigFile(
meterProvider['exemplar_filter']
);
if (
exemplarFilter &&
(exemplarFilter === 'trace_based' ||
exemplarFilter === 'always_on' ||
exemplarFilter === 'always_off')
) {
config.meter_provider.exemplar_filter = exemplarFilter;
}
}
}

function setLoggerProvider(
config: ConfigurationModel,
loggerProvider: ConfigLoggerProvider
): void {
if (loggerProvider) {
const attributeValueLengthLimit = getNumberFromConfigFile(
loggerProvider['limits']['attribute_value_length_limit']
);
if (attributeValueLengthLimit) {
config.logger_provider.limits.attribute_value_length_limit =
attributeValueLengthLimit;
}

const attributeCountLimit = getNumberFromConfigFile(
loggerProvider['limits']['attribute_count_limit']
);
if (attributeCountLimit) {
config.logger_provider.limits.attribute_count_limit = attributeCountLimit;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export function initializeDefaultConfiguration(): ConfigurationModel {
attribute_count_limit: 128,
},
propagator: {
composite: ['tracecontext', 'baggage'],
composite: [{ tracecontext: null }, { baggage: null }],
composite_list: 'tracecontext,baggage',
},
tracer_provider: {
Expand Down Expand Up @@ -227,7 +227,7 @@ export interface ConfigPropagator {
* Known third party keys include: xray.
* If the resolved list of propagators (from .composite and .composite_list) is empty, a noop propagator is used.
*/
composite: string[];
composite: object[];

/**
* Configure the propagators in the composite text map propagator.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ export function envVariableSubstitution(value: unknown): string | undefined {
return undefined;
}

const matches = String(value).match(/\$\{[a-zA-Z0-9_:.-]*\}/g);
const matches = String(value).match(/\$\{[a-zA-Z0-9,=_:.-]*\}/g);
if (matches) {
let stringValue = String(value);
for (const match of matches) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const defaultConfig: Configuration = {
attribute_count_limit: 128,
},
propagator: {
composite: ['tracecontext', 'baggage'],
composite: [{ tracecontext: null }, { baggage: null }],
composite_list: 'tracecontext,baggage',
},
tracer_provider: {
Expand Down Expand Up @@ -164,10 +164,19 @@ const configFromFile: Configuration = {
},
attribute_limits: {
attribute_count_limit: 128,
attribute_value_length_limit: 4096,
},
propagator: {
composite: ['tracecontext', 'baggage'],
composite_list: 'tracecontext,baggage',
composite: [
{ tracecontext: null },
{ baggage: null },
{ b3: null },
{ b3multi: null },
{ jaeger: null },
{ ottrace: null },
{ xray: null },
],
composite_list: 'tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray',
},
tracer_provider: {
processors: [
Expand All @@ -188,6 +197,7 @@ const configFromFile: Configuration = {
],
limits: {
attribute_count_limit: 128,
attribute_value_length_limit: 4096,
event_count_limit: 128,
link_count_limit: 128,
event_attribute_count_limit: 128,
Expand Down Expand Up @@ -241,6 +251,7 @@ const configFromFile: Configuration = {
],
limits: {
attribute_count_limit: 128,
attribute_value_length_limit: 4096,
},
},
};
Expand All @@ -262,7 +273,7 @@ const defaultConfigFromFileWithEnvVariables: Configuration = {
attribute_count_limit: 128,
},
propagator: {
composite: ['tracecontext', 'baggage'],
composite: [{ tracecontext: null }, { baggage: null }],
composite_list: 'tracecontext,baggage',
},
tracer_provider: {
Expand Down Expand Up @@ -504,7 +515,7 @@ describe('ConfigProvider', function () {
const expectedConfig: Configuration = {
...defaultConfig,
propagator: {
composite: ['tracecontext', 'jaeger'],
composite: [{ tracecontext: null }, { jaeger: null }],
composite_list: 'tracecontext,jaeger',
},
};
Expand Down Expand Up @@ -844,7 +855,7 @@ describe('ConfigProvider', function () {
'metric-temporality';
process.env.OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION =
'metric-hist-agg';
process.env.OTEL_METRICS_EXEMPLAR_FILTER = 'metric-exemplar-filter';
process.env.OTEL_METRICS_EXEMPLAR_FILTER = 'always_off';
process.env.OTEL_BLRP_SCHEDULE_DELAY = '23';
process.env.OTEL_BLRP_EXPORT_TIMEOUT = '24';
process.env.OTEL_BLRP_MAX_QUEUE_SIZE = '25';
Expand All @@ -861,7 +872,7 @@ describe('ConfigProvider', function () {
process.env.OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT = '29';
const configProvider = createConfigProvider();
const expectedConfig: Configuration = {
...defaultConfig,
...defaultConfigFromFileWithEnvVariables,
resource: {
attributes_list: 'attributes',
attributes: [
Expand All @@ -872,6 +883,36 @@ describe('ConfigProvider', function () {
},
],
},
attribute_limits: {
attribute_count_limit: 7,
attribute_value_length_limit: 23,
},
propagator: {
composite: [{ prop: null }],
composite_list: 'prop',
},
tracer_provider: {
...defaultConfigFromFileWithEnvVariables.tracer_provider,
limits: {
attribute_value_length_limit: 14,
attribute_count_limit: 15,
event_count_limit: 16,
link_count_limit: 17,
event_attribute_count_limit: 18,
link_attribute_count_limit: 19,
},
},
meter_provider: {
...defaultConfigFromFileWithEnvVariables.meter_provider,
exemplar_filter: 'always_off',
},
logger_provider: {
...defaultConfigFromFileWithEnvVariables.logger_provider,
limits: {
attribute_value_length_limit: 28,
attribute_count_limit: 29,
},
},
};

assert.deepStrictEqual(
Expand Down