Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
5df60a4
parse attribute limits
maryliag Sep 23, 2025
2381346
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Sep 23, 2025
b2bfada
set propagators
maryliag Sep 23, 2025
8f60964
parse limit of tracer provider
maryliag Sep 23, 2025
6933b03
add meter and logger
maryliag Sep 23, 2025
9dec6ab
fix lint
maryliag Sep 23, 2025
01497ab
add changelog
maryliag Sep 23, 2025
aaaed79
create check for propagator
maryliag Oct 2, 2025
2d0369c
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 2, 2025
bb00dc8
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 7, 2025
0ce3289
parse trace provider
maryliag Oct 7, 2025
860aae1
add changelog
maryliag Oct 7, 2025
2e06c42
update changelog
maryliag Oct 7, 2025
4f18dd4
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 8, 2025
da7762d
fix post merge
maryliag Oct 8, 2025
2cd03d7
fix pos merge
maryliag Oct 8, 2025
6265f0f
parse logger provider
maryliag Oct 8, 2025
8e0420d
add changelog
maryliag Oct 8, 2025
f26c8d0
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 8, 2025
7d09a23
fix lint
maryliag Oct 8, 2025
d5546b7
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 8, 2025
dd229ae
separate models
maryliag Oct 9, 2025
30fffce
Merge branch 'tracer-parse' into logger-parse
maryliag Oct 9, 2025
79d6a61
updates to model
maryliag Oct 9, 2025
60fafee
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 9, 2025
2ec2b47
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 9, 2025
1061b07
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 10, 2025
6c7f7a9
feedback from PR
maryliag Oct 10, 2025
2b48da4
fix endpoint
maryliag Oct 10, 2025
f40c414
Merge branch 'tracer-parse' into logger-parse
maryliag Oct 10, 2025
b324fd4
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 14, 2025
2b8a2d2
fixes with messed merge
maryliag Oct 14, 2025
e1913b4
Merge branch 'main' into logger-parse
maryliag Oct 15, 2025
eff2f69
Merge branch 'main' into logger-parse
maryliag Oct 16, 2025
43a2640
fix log exporter
maryliag Oct 19, 2025
1e2c925
feat(otlp-exporter-base): accept TLS config for node HTTP exporters f…
david-luna Oct 16, 2025
5b2988f
test(sdk-logs): ensure process.env is cleaned up between tests (#6017)
cjihrig Oct 16, 2025
6556527
chore(deps): Update `import-in-the-middle` (#6020)
timfish Oct 17, 2025
ac553cb
test(otlp-grpc-exporter-base): remove duplicated `delete` statements …
cjihrig Oct 17, 2025
a42ee3f
chore(move-to-emeriuts): create token before checkout (#6018)
pichlermarc Oct 17, 2025
57bd3a2
add tests to improve coverage
maryliag Oct 19, 2025
8cf5a2b
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 19, 2025
faf0c56
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 20, 2025
50dfad0
Merge branch 'main' into logger-parse
maryliag Oct 20, 2025
e472748
feat(opentelemetry-configuration): support file with format rc.2 (#6029)
maryliag Oct 20, 2025
542bd28
Merge branch 'main' of github.com:open-telemetry/opentelemetry-js int…
maryliag Oct 20, 2025
21c8abc
Merge branch 'main' into logger-parse
maryliag Oct 21, 2025
f4d1d0c
Merge branch 'main' into logger-parse
maryliag Oct 21, 2025
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 @@ -59,6 +59,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
* 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
* feat(opentelemetry-configuration): parse trace provider from config file [#5992](https://github.com/open-telemetry/opentelemetry-js/pull/5992) @maryliag
* feat(opentelemetry-configuration): parse logger provider from config file [#5995](https://github.com/open-telemetry/opentelemetry-js/pull/5995) @maryliag
* feat(opentelemetry-configuration): parse config file with format 1.0-rc.2 [#6029](https://github.com/open-telemetry/opentelemetry-js/pull/6029) @maryliag

### :bug: Bug Fixes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export class EnvironmentConfigProvider implements ConfigProvider {
}
}

function setResources(config: ConfigurationModel): void {
export function setResources(config: ConfigurationModel): void {
if (config.resource == null) {
config.resource = {};
}
Expand All @@ -84,7 +84,7 @@ function setResources(config: ConfigurationModel): void {
}
}

function setAttributeLimits(config: ConfigurationModel): void {
export function setAttributeLimits(config: ConfigurationModel): void {
const attributeValueLengthLimit = getNumberFromEnv(
'OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'
);
Expand All @@ -106,7 +106,7 @@ function setAttributeLimits(config: ConfigurationModel): void {
}
}

function setPropagators(config: ConfigurationModel): void {
export function setPropagators(config: ConfigurationModel): void {
if (config.propagator == null) {
config.propagator = {};
}
Expand All @@ -123,7 +123,7 @@ function setPropagators(config: ConfigurationModel): void {
}
}

function setTracerProvider(config: ConfigurationModel): void {
export function setTracerProvider(config: ConfigurationModel): void {
if (config.tracer_provider == null) {
config.tracer_provider = { processors: [] };
}
Expand Down Expand Up @@ -349,17 +349,17 @@ function setMeterProvider(config: ConfigurationModel): void {
}
}

function setLoggerProvider(config: ConfigurationModel): void {
export function setLoggerProvider(config: ConfigurationModel): void {
if (config.logger_provider == null) {
config.logger_provider = { processors: [] };
}
const attributeValueLengthLimit = getNumberFromEnv(
'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT'
);
const attributeCountLimit = getNumberFromEnv(
'OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT'
);
if (attributeValueLengthLimit || attributeCountLimit) {
if (config.logger_provider == null) {
config.logger_provider = {};
}
if (config.logger_provider.limits == null) {
config.logger_provider.limits = { attribute_count_limit: 128 };
}
Expand Down Expand Up @@ -442,12 +442,6 @@ function setLoggerProvider(config: ConfigurationModel): void {
batch.exporter.otlp_http.headers_list = headersList;
}

if (config.logger_provider == null) {
config.logger_provider = { processors: [{}] };
}
if (config.logger_provider?.processors == null) {
config.logger_provider.processors = [{}];
}
config.logger_provider.processors[0].batch = batch;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
import { diagLogLevelFromString, getStringFromEnv } from '@opentelemetry/core';
import {
AttributeLimits,
ConfigAttributes,
LoggerProvider,
MeterProvider,
Propagator,
ConfigurationModel,
Expand All @@ -41,6 +39,12 @@ import {
SpanProcessor,
TracerProvider,
} from './models/tracerProviderModel';
import {
LoggerProvider,
LogRecordExporter,
LogRecordProcessor,
} from './models/loggerProviderModel';
import { AttributeNameValue } from './models/resourceModel';

export class FileConfigProvider implements ConfigProvider {
private _config: ConfigurationModel;
Expand Down Expand Up @@ -71,7 +75,7 @@ export function hasValidConfigFile(): boolean {
return false;
}

function parseConfigFile(config: ConfigurationModel) {
export function parseConfigFile(config: ConfigurationModel) {
const supportedFileVersions = ['1.0-rc.1', '1.0-rc.2'];
const configFile = getStringFromEnv('OTEL_EXPERIMENTAL_CONFIG_FILE') || '';
const file = fs.readFileSync(configFile, 'utf8');
Expand Down Expand Up @@ -125,9 +129,9 @@ function parseConfigFile(config: ConfigurationModel) {
}
}

function setResourceAttributes(
export function setResourceAttributes(
config: ConfigurationModel,
attributes: ConfigAttributes[]
attributes: AttributeNameValue[]
) {
if (attributes) {
if (config.resource == null) {
Expand Down Expand Up @@ -169,7 +173,7 @@ function setResourceAttributes(
}
}

function setAttributeLimits(
export function setAttributeLimits(
config: ConfigurationModel,
attrLimits: AttributeLimits
) {
Expand All @@ -194,7 +198,7 @@ function setAttributeLimits(
}
}

function setPropagator(
export function setPropagator(
config: ConfigurationModel,
propagator: Propagator
): void {
Expand Down Expand Up @@ -254,9 +258,18 @@ function getConfigHeaders(
return null;
}

function parseConfigExporter(exporter: SpanExporter): SpanExporter {
enum ProviderType {
TRACER = 0,
METER = 1,
LOGGER = 2,
}

function parseConfigExporter(
exporter: SpanExporter | LogRecordExporter,
providerType: ProviderType
): SpanExporter | LogRecordExporter {
const exporterType = Object.keys(exporter)[0];
let parsedExporter: SpanExporter = {};
let parsedExporter: SpanExporter | LogRecordExporter = {};
let e;
let certFile;
let clientCertFile;
Expand All @@ -265,15 +278,26 @@ function parseConfigExporter(exporter: SpanExporter): SpanExporter {
let headers;
let headersList;
let insecure;
let endpoint;

switch (providerType) {
case ProviderType.TRACER:
endpoint = 'http://localhost:4318/v1/traces';
parsedExporter = parsedExporter as SpanExporter;
break;
case ProviderType.LOGGER:
endpoint = 'http://localhost:4318/v1/logs';
parsedExporter = parsedExporter as LogRecordExporter;
break;
}

switch (exporterType) {
case 'otlp_http':
e = exporter['otlp_http'];
if (e) {
parsedExporter = {
otlp_http: {
endpoint:
getStringFromConfigFile(e['endpoint']) ??
'http://localhost:4318/v1/traces',
endpoint: getStringFromConfigFile(e['endpoint']) ?? endpoint,
timeout: getNumberFromConfigFile(e['timeout']) ?? 10000,
encoding:
getStringFromConfigFile(e['encoding']) === 'json'
Expand Down Expand Up @@ -370,7 +394,7 @@ function parseConfigExporter(exporter: SpanExporter): SpanExporter {
break;

case 'zipkin':
e = exporter['zipkin'];
e = (exporter as SpanExporter)['zipkin'];
if (e) {
parsedExporter = {
zipkin: {
Expand All @@ -387,7 +411,7 @@ function parseConfigExporter(exporter: SpanExporter): SpanExporter {
return parsedExporter;
}

function setTracerProvider(
export function setTracerProvider(
config: ConfigurationModel,
tracerProvider: TracerProvider
): void {
Expand Down Expand Up @@ -460,7 +484,10 @@ function setTracerProvider(
if (processorType === 'batch') {
const element = tracerProvider['processors'][i]['batch'];
if (element) {
const parsedExporter = parseConfigExporter(element['exporter']);
const parsedExporter = parseConfigExporter(
element['exporter'],
ProviderType.TRACER
);
const batchConfig: SpanProcessor = {
batch: {
schedule_delay:
Expand All @@ -472,7 +499,7 @@ function setTracerProvider(
max_export_batch_size:
getNumberFromConfigFile(element['max_export_batch_size']) ??
512,
exporter: parsedExporter,
exporter: parsedExporter as SpanExporter,
},
};

Expand All @@ -481,10 +508,13 @@ function setTracerProvider(
} else if (processorType === 'simple') {
const element = tracerProvider['processors'][i]['simple'];
if (element) {
const parsedExporter = parseConfigExporter(element['exporter']);
const parsedExporter = parseConfigExporter(
element['exporter'],
ProviderType.TRACER
);
const simpleConfig: SpanProcessor = {
simple: {
exporter: parsedExporter,
exporter: parsedExporter as SpanExporter,
},
};

Expand All @@ -496,7 +526,7 @@ function setTracerProvider(
}
}

function setMeterProvider(
export function setMeterProvider(
config: ConfigurationModel,
meterProvider: MeterProvider
): void {
Expand All @@ -518,14 +548,15 @@ function setMeterProvider(
}
}

function setLoggerProvider(
export function setLoggerProvider(
config: ConfigurationModel,
loggerProvider: LoggerProvider
): void {
if (loggerProvider) {
if (config.logger_provider == null) {
config.logger_provider = {};
config.logger_provider = { processors: [] };
}
// Limits
if (loggerProvider['limits']) {
const attributeValueLengthLimit = getNumberFromConfigFile(
loggerProvider['limits']['attribute_value_length_limit']
Expand All @@ -537,17 +568,124 @@ function setLoggerProvider(
if (config.logger_provider.limits == null) {
config.logger_provider.limits = { attribute_count_limit: 128 };
}

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

if (attributeCountLimit) {
config.logger_provider.limits.attribute_count_limit =
attributeCountLimit;
}
}
}

// Processors
if (loggerProvider['processors']) {
if (loggerProvider['processors'].length > 0) {
if (config.logger_provider == null) {
config.logger_provider = { processors: [] };
}
config.logger_provider.processors = [];
for (let i = 0; i < loggerProvider['processors'].length; i++) {
const processorType = Object.keys(loggerProvider['processors'][i])[0];
if (processorType === 'batch') {
const element = loggerProvider['processors'][i]['batch'];
if (element) {
const parsedExporter = parseConfigExporter(
element['exporter'],
ProviderType.LOGGER
);
const batchConfig: LogRecordProcessor = {
batch: {
schedule_delay:
getNumberFromConfigFile(element['schedule_delay']) ?? 1000,
export_timeout:
getNumberFromConfigFile(element['export_timeout']) ?? 30000,
max_queue_size:
getNumberFromConfigFile(element['max_queue_size']) ?? 2048,
max_export_batch_size:
getNumberFromConfigFile(element['max_export_batch_size']) ??
512,
exporter: parsedExporter as LogRecordExporter,
},
};

config.logger_provider.processors.push(batchConfig);
}
} else if (processorType === 'simple') {
const element = loggerProvider['processors'][i]['simple'];
if (element) {
const parsedExporter = parseConfigExporter(
element['exporter'],
ProviderType.LOGGER
);
const simpleConfig: LogRecordProcessor = {
simple: {
exporter: parsedExporter,
},
};

config.logger_provider.processors.push(simpleConfig);
}
}
}
}
}

// logger_configurator/development
if (loggerProvider['logger_configurator/development']) {
const defaultConfigDisabled = getBooleanFromConfigFile(
loggerProvider['logger_configurator/development']['default_config']?.[
'disabled'
]
);
if (defaultConfigDisabled || defaultConfigDisabled === false) {
if (config.logger_provider == null) {
config.logger_provider = { processors: [] };
}
config.logger_provider['logger_configurator/development'] = {
default_config: {
disabled: defaultConfigDisabled,
},
};
}

if (
loggerProvider['logger_configurator/development'].loggers &&
loggerProvider['logger_configurator/development'].loggers.length > 0
) {
const loggers = [];
for (
let i = 0;
i < loggerProvider['logger_configurator/development'].loggers.length;
i++
) {
const logger =
loggerProvider['logger_configurator/development'].loggers[i];
let disabled = false;
if (logger['config']) {
disabled =
getBooleanFromConfigFile(logger['config']['disabled']) ?? false;
}
const name = getStringFromConfigFile(logger['name']);
if (name) {
loggers.push({
name: name,
config: {
disabled: disabled,
},
});
}
}
if (config.logger_provider == null) {
config.logger_provider = { processors: [] };
}
if (config.logger_provider['logger_configurator/development'] == null) {
config.logger_provider['logger_configurator/development'] = {};
}
config.logger_provider['logger_configurator/development'].loggers =
loggers;
}
}
}
}
Loading