Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Load OTel SDK config from environment variables and system properties.… #1434

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

cyrille-leclerc
Copy link
Member

Description:

Load OTel SDK config from environment variables and system properties.

Existing Issue(s):

Testing:

See added unit tests

Documentation:

< Describe the documentation added.
Please be sure to modify relevant existing documentation if needed. >

Outstanding items:

< Anything that these changes are intentionally missing
that will be needed or can be helpful in the future. >

AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk =
AutoConfiguredOpenTelemetrySdk.builder()
.setServiceClassLoader(getClass().getClassLoader())
.addPropertiesSupplier(() -> properties)
.addPropertiesCustomizer(configProperties -> {
// Change default of "otel.[traces,metrics,logs].exporter" from "otlp" to "none"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor] Could you elaborate a bit in a comment on why we need to override the default here ? For example, if I understand correctly when there is no endpoint configured then we assume the extension should silently skip exporting signals.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review Sylvain, please see updated comment

@trask
Copy link
Member

trask commented Sep 16, 2024

@cyrille-leclerc just a heads up looks like there's a failing test

@cyrille-leclerc
Copy link
Member Author

Thanks @trask , unit test fixed.

@trask
Copy link
Member

trask commented Sep 27, 2024

cc @kenfinnigan in case you have a chance to review

@cyrille-leclerc
Copy link
Member Author

@SylvainJuge could you by any chance review this PR?

@trask trask added this to the v1.40.0 milestone Oct 8, 2024
Comment on lines +73 to +89
if (Objects.equals(
"otlp", configProperties.getString("otel.traces.exporter", "otlp"))
&& configProperties.getString("otel.exporter.otlp.traces.endpoint")
== null) {
properties.put("otel.traces.exporter", "none");
}
if (Objects.equals(
"otlp", configProperties.getString("otel.metrics.exporter", "otlp"))
&& configProperties.getString("otel.exporter.otlp.metrics.endpoint")
== null) {
properties.put("otel.metrics.exporter", "none");
}
if (Objects.equals(
"otlp", configProperties.getString("otel.logs.exporter", "otlp"))
&& configProperties.getString("otel.exporter.otlp.logs.endpoint") == null) {
properties.put("otel.logs.exporter", "none");
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor] it would be more readable to create a helper method to check this as it takes quite an effort to read and understand it that we check two config options to not be explicitly set and set one of them in the modified config, all of that 3 times with close but slightly different variables for logs, traces and metrics.

Comment on lines +111 to +116
if (this.resource == null) {
this.resource = Resource.empty();
}
if (this.configProperties == null) {
this.configProperties = DefaultConfigProperties.createFromMap(Collections.emptyMap());
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor] in order to avoid any ambiguity and possible concurrent modification by the SDK init (I'm pretty sure it's synchronous but we'd better be safe than sorry), it would be better to set this.resource and this.configProperties before the call to AutoConfiguredOpenTelemetrySdk.builder().

Comment on lines +20 to +22
System.clearProperty("otel.exporter.otlp.endpoint");
System.clearProperty("otel.service.name");
System.clearProperty("otel.resource.attributes");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor] As an alternative you could use JUnit @ClearSystemProperty and @SetSystemProperty as it helps to prevent global state side-effects and allows to preserve existing values (if any), see docs for more details.

@cyrille-leclerc
Copy link
Member Author

Thanks @SylvainJuge , I'll improve ASAP

@cyrille-leclerc cyrille-leclerc requested a review from a team as a code owner October 18, 2024 10:48
@trask trask removed this from the v1.40.0 milestone Oct 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants