Skip to content

Commit 8ab82d2

Browse files
committed
remove metrics from traces
1 parent fb30ebc commit 8ab82d2

File tree

2 files changed

+28
-47
lines changed

2 files changed

+28
-47
lines changed

exercises/manual-instrumentation-java-traces/solution/todobackend-springboot/src/main/java/io/novatec/todobackend/OpenTelemetryConfiguration.java

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
11
package io.novatec.todobackend;
22

3-
import java.time.Duration;
4-
3+
import java.util.concurrent.TimeUnit;
54
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
65
import org.springframework.context.annotation.Bean;
76
import org.springframework.context.annotation.Configuration;
87
import org.springframework.context.annotation.Scope;
98

109
//Basic Otel API & SDK
1110
import io.opentelemetry.api.OpenTelemetry;
12-
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
13-
import io.opentelemetry.context.propagation.ContextPropagators;
14-
import io.opentelemetry.exporter.logging.LoggingMetricExporter;
1511
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
1612
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
1713
import io.opentelemetry.sdk.OpenTelemetrySdk;
18-
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
19-
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
2014
import io.opentelemetry.sdk.resources.Resource;
15+
2116
//Tracing and Spans
2217
import io.opentelemetry.sdk.trace.SdkTracerProvider;
2318
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
24-
import io.opentelemetry.semconv.ResourceAttributes;
19+
import io.opentelemetry.semconv.ServiceAttributes;
2520

26-
@SuppressWarnings("deprecation")
2721
@Configuration
2822
public class OpenTelemetryConfiguration {
2923

3024
@Bean
3125
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
3226
public OpenTelemetry openTelemetry() {
3327

34-
Resource resource = Resource.getDefault().toBuilder().put(ResourceAttributes.SERVICE_NAME, "todobackend")
35-
.put(ResourceAttributes.SERVICE_VERSION, "0.1.0").build();
28+
Resource resource = Resource.getDefault().toBuilder()
29+
.put(ServiceAttributes.SERVICE_NAME, "todobackend")
30+
.put(ServiceAttributes.SERVICE_VERSION, "0.1.0")
31+
.build();
3632

3733
OtlpGrpcSpanExporter jaegerOtlpExporter = OtlpGrpcSpanExporter.builder()
3834
.setEndpoint("http://localhost:4317")
35+
.setTimeout(30, TimeUnit.SECONDS)
3936
.build();
4037

4138
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
@@ -44,20 +41,8 @@ public OpenTelemetry openTelemetry() {
4441
.setResource(resource)
4542
.build();
4643

47-
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
48-
.registerMetricReader(
49-
PeriodicMetricReader
50-
.builder(LoggingMetricExporter.create())
51-
.setInterval(Duration.ofSeconds(10))
52-
.build())
53-
.setResource(resource)
54-
.build();
55-
56-
5744
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
5845
.setTracerProvider(sdkTracerProvider)
59-
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
60-
.setMeterProvider(sdkMeterProvider)
6146
.build();
6247

6348
return openTelemetry;

exercises/manual-instrumentation-java-traces/solution/todobackend-springboot/src/main/java/io/novatec/todobackend/TodobackendApplication.java

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.novatec.todobackend;
22

3-
import static io.opentelemetry.api.common.AttributeKey.stringKey;
3+
import static io.opentelemetry.api.common.AttributeKey.booleanKey;
44

55
import java.util.ArrayList;
66
import java.util.List;
@@ -21,8 +21,9 @@
2121

2222
import io.opentelemetry.api.OpenTelemetry;
2323
import io.opentelemetry.api.common.Attributes;
24-
import io.opentelemetry.api.metrics.LongCounter;
25-
import io.opentelemetry.api.metrics.Meter;
24+
import io.opentelemetry.semconv.ClientAttributes;
25+
import io.opentelemetry.semconv.HttpAttributes;
26+
import io.opentelemetry.semconv.UserAgentAttributes;
2627
import io.opentelemetry.api.trace.Span;
2728
import io.opentelemetry.api.trace.SpanKind;
2829
import io.opentelemetry.api.trace.StatusCode;
@@ -43,8 +44,6 @@ public class TodobackendApplication {
4344

4445
private OpenTelemetry openTelemetry;
4546
private Tracer tracer;
46-
private Meter meter;
47-
private LongCounter counter;
4847

4948
@Value("${HOSTNAME:not_set}")
5049
String hostname;
@@ -58,13 +57,6 @@ public class TodobackendApplication {
5857
public TodobackendApplication(OpenTelemetry openTelemetry) {
5958
this.openTelemetry = openTelemetry;
6059
tracer = this.openTelemetry.getTracer(TodobackendApplication.class.getName(), "0.1.0");
61-
meter = this.openTelemetry.getMeter(TodobackendApplication.class.getName());
62-
63-
counter = meter.counterBuilder("todobackend.requests.counter")
64-
.setDescription("How many times the GET call has been invoked.")
65-
.setUnit("requests")
66-
.build();
67-
6860
}
6961

7062
private String getInstanceId() {
@@ -79,7 +71,6 @@ private String getInstanceId() {
7971
String hello() {
8072

8173
return getInstanceId() + " Hallo, Welt ! ";
82-
8374
}
8475

8576
@GetMapping("/fail")
@@ -96,39 +87,40 @@ List<String> getTodos() {
9687

9788
todoRepository.findAll().forEach(todo -> todos.add(todo.getTodo()));
9889
logger.info("GET /todos/ " + todos.toString());
99-
counter.add(1,Attributes.of(stringKey("http.method"), "GET"));
10090

10191
return todos;
10292
}
10393

10494
@PostMapping("/todos/{todo}")
10595
String addTodo(HttpServletRequest request, HttpServletResponse response, @PathVariable String todo) {
10696

107-
logger.info("POST /todos/ " + todo.toString());
108-
10997
Span span = tracer.spanBuilder("addTodo").setSpanKind(SpanKind.SERVER).startSpan();
11098

111-
span.setAttribute("http.method", request.getMethod());
112-
span.setAttribute("http.url", request.getRequestURL().toString());
113-
span.setAttribute("client.address", request.getRemoteAddr());
114-
span.setAttribute("user.agent", request.getHeader("User-Agent"));
99+
boolean valid = this.isValid(todo);
100+
span.addEvent("todo validated", Attributes.of(booleanKey("valid"), valid));
101+
102+
span.setAttribute(HttpAttributes.HTTP_REQUEST_METHOD, request.getMethod());
103+
span.setAttribute(HttpAttributes.HTTP_ROUTE, request.getRequestURL().toString());
104+
span.setAttribute(ClientAttributes.CLIENT_ADDRESS, request.getRemoteAddr());
105+
span.setAttribute(UserAgentAttributes.USER_AGENT_ORIGINAL, request.getHeader("User-Agent"));
115106

116107
try (Scope scope = span.makeCurrent()) {
117108
this.someInternalMethod(todo);
118109
response.setStatus(HttpServletResponse.SC_CREATED);
119-
span.setAttribute("response.status", HttpServletResponse.SC_CREATED);
110+
span.setAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, HttpServletResponse.SC_CREATED);
120111
} catch (Throwable t) {
121112
span.setStatus(StatusCode.ERROR, "Error on server side!");
122113
span.recordException(t);
123114
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
124-
span.setAttribute("response.status", HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
115+
span.setAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
125116
} finally {
126117
span.end();
127118
}
128119

129-
logger.info("Span.toString():" + span.toString());
130-
return todo;
120+
logger.info("POST /todos/ "+todo.toString());
121+
logger.info("Span.toString():"+span.toString());
131122

123+
return todo;
132124
}
133125

134126
String someInternalMethod(String todo) {
@@ -157,6 +149,10 @@ String someInternalMethod(String todo) {
157149

158150
}
159151

152+
boolean isValid(String todo) {
153+
return todo != null && !todo.isBlank();
154+
}
155+
160156
@DeleteMapping("/todos/{todo}")
161157
String removeTodo(@PathVariable String todo) {
162158

0 commit comments

Comments
 (0)