Skip to content

CAUSEWAY-3975: Open Telemetry Integration#3464

Draft
andi-huber wants to merge 37 commits intomainfrom
3975-telemetry
Draft

CAUSEWAY-3975: Open Telemetry Integration#3464
andi-huber wants to merge 37 commits intomainfrom
3975-telemetry

Conversation

@andi-huber
Copy link
Copy Markdown
Contributor

@andi-huber andi-huber commented Mar 20, 2026

  • Proof of Concept (using micrometer API internally)
  • Figure out how to configure (OTLP)
  • Govern via ENV var whether to enable Observation
  • Usage Guide (ADOC)

Task-Url: https://issues.apache.org/jira/browse/CAUSEWAY-3975

Proposal: make observation an opt-in choice based on profile observation being active, which allows to opt-in only for deployment scenarios where observation is desired

Minimal Setup (for Applications)

Maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-opentelemetry</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-otlp</artifactId>
</dependency>

Config

spring:
  application:
    name: <name of service>
  
management:
  tracing:
    sampling:
      probability: 1  
  opentelemetry:
    tracing:
      export:
        otlp:
          endpoint: http://<my-endpoint>:4318/v1/traces

Spring

Disables metric export (we are currently only using traces).

@Bean
OtlpConfig otlpConfig() {
    return new OtlpConfig() {
        @Override public @Nullable String get(final String key) { return null;}
        @Override public boolean enabled() { return false; }
    };
}

Docker

One of many options is to use Jaeger as telemetry collector.

docker run -d --name jaeger \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 5778:5778 \
-p 9411:9411 \
cr.jaegertracing.io/jaegertracing/jaeger

Then Jaeger's UI is at http://<my-endpoint>:16686.

@andi-huber andi-huber self-assigned this Mar 20, 2026
@andi-huber andi-huber force-pushed the 3975-telemetry branch 3 times, most recently from 8bbbea2 to fad6996 Compare March 26, 2026 14:28
TODO don't record observations quicker than 2 ms say

With Micrometer Observation API, it seems there is no way to discard
already started Observations.

Perhaps we can prevent those from being sent over the wire later.
*/
InteractionContext interactionContext
) {
Runnable onCloseCallback) implements AutoCloseable {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I don't like that as the final answer, because we don't really know how to handle potential exceptions of the runnable.

@Profile("observation")
@Bean
@ConditionalOnMissingBean
ObservationRegistry observationRegistry() {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

why needed? if done wrong, could be registered too early for other configurations to have a chance

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.

1 participant