diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceManager.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceManager.java index 0e150adad..408216630 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceManager.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceManager.java @@ -90,9 +90,9 @@ public interface TraceManager extends TraceAccessor { Trace continueSpan(Span s); /** - * Adds a data annotation to the current span if tracing is currently on. + * Adds a tag to the current span if tracing is currently on. */ - void addAnnotation(String key, String value); + void addTag(String key, String value); /** * Remove this span from the current thread, but don't stop it yet or send it for diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceKeys.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceKeys.java new file mode 100644 index 000000000..edc580f3b --- /dev/null +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceKeys.java @@ -0,0 +1,95 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.instrument; + +/** + * Well-known {@link org.springframework.cloud.sleuth.Span#tag(String, String) span tag} keys. + * + *

Overhead of adding Trace Data

+ * + * Overhead is directly related to the size of trace data exported out of process. Accordingly, it + * is better to tag what's important for latency troubleshooting, ie a whitelist, vs collecting + * everything and filtering downstream. The keys listed here are very common in tracing tools, and + * are considerate to the issue of overhead. + * + *

When evaluating new keys, consider how much additional data it implies, and if that data is + * critical to classifying, filtering or displaying traces. More data often means larger systems, + * less retention, or a lower sample rate. + * + *

For example, in zipkin, a thrift-encoded span with an "sr" annotation is 82 bytes plus the + * size of its name and associated service. The maximum size of an HTTP cookie is 4096 bytes, + * roughly 50x that. Even if compression helps, if you aren't analyzing based on cookies, storing + * them displaces resources that could be used for more traces. Meanwhile, you have another system + * storing private data! The takeaway isn't never store cookies, as there are valid cases for this. + * The takeaway is to be conscious about what's you are storing. + */ +public final class TraceKeys { + + /** + * The domain portion of the URL or host header. Ex. "mybucket.s3.amazonaws.com" + * + *

Used to filter by host as opposed to ip address. + */ + public static final String HTTP_HOST = "http/host"; + + /** + * The HTTP method, or verb, such as "GET" or "POST". + * + *

Used to filter against an http route. + */ + public static final String HTTP_METHOD = "http/method"; + + /** + * The absolute http path, without any query parameters. Ex. "/objects/abcd-ff" + * + *

Used to filter against an http route, portably with zipkin v1. + * + *

In zipkin v1, only equals filters are supported. Dropping query parameters makes the number + * of distinct URIs less. For example, one can query for the same resource, regardless of signing + * parameters encoded in the query line. This does not reduce cardinality to a HTTP single route. + * For example, it is common to express a route as an http URI template like + * "/resource/{resource_id}". In systems where only equals queries are available, searching for + * {@code http.uri=/resource} won't match if the actual request was "/resource/abcd-ff". + * + *

Historical note: This was commonly expressed as "http.uri" in zipkin, eventhough it was most + * often just a path. + */ + public static final String HTTP_PATH = "http/path"; + + /** + * The entire URL, including the scheme, host and query parameters if available. Ex. + * "https://mybucket.s3.amazonaws.com/objects/abcd-ff?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Algorithm=AWS4-HMAC-SHA256..." + * + *

Combined with {@link #HTTP_METHOD}, you can understand the fully-qualified request line. + * + *

This is optional as it may include private data or be of considerable length. + */ + public static final String HTTP_URL = "http/url"; + + /** + * The HTTP response code, when not in 2xx range. Ex. "503" + * + *

Used to filter for error status. + * + *

2xx range are not logged as success codes are less interesting for latency troubleshooting. + * Omitting saves at least 20 bytes per span. + */ + public static final String HTTP_STATUS_CODE = "http/status_code"; + + private TraceKeys() { // no instances + } +} diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java index 88f8a0cf0..9fe15281a 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java @@ -18,7 +18,6 @@ package org.springframework.cloud.sleuth.instrument.web; import static org.springframework.util.StringUtils.hasText; import java.io.IOException; -import java.util.Enumeration; import java.util.Random; import java.util.regex.Pattern; @@ -34,6 +33,7 @@ import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceManager; import org.springframework.cloud.sleuth.event.ServerReceivedEvent; import org.springframework.cloud.sleuth.event.ServerSentEvent; +import org.springframework.cloud.sleuth.instrument.TraceKeys; import org.springframework.cloud.sleuth.sampler.IsTracingSampler; import org.springframework.cloud.sleuth.trace.TraceContextHolder; import org.springframework.context.ApplicationEvent; @@ -50,7 +50,13 @@ import org.springframework.web.util.UrlPathHelper; * {@link Trace#TRACE_ID_NAME} header from either request or response and uses them to * create a new span. * + *

In order to keep the size of spans manageable, this only add tags defined in {@link TraceKeys}. + * If you need to add additional tags, such as headers subtype this and override + * {@link #addRequestTags} or {@link #addResponseTags}. + * * @see TraceManager + * @see TraceKeys + * @see TraceWebAutoConfiguration#traceWebFilter(TraceFilter) * * @author Jakub Nabrdalik, 4financeIT * @author Tomasz Nurkiewicz, 4financeIT @@ -156,7 +162,7 @@ public class TraceFilter extends OncePerRequestFilter Throwable exception = null; try { - addRequestAnnotations(request); + addRequestTags(request); filterChain.doFilter(request, response); } @@ -173,7 +179,7 @@ public class TraceFilter extends OncePerRequestFilter addToResponseIfNotPresent(response, Trace.NOT_SAMPLED_NAME, ""); } if (trace != null) { - addResponseAnnotations(response, exception); + addResponseTags(response, exception); addResponseHeaders(response, trace.getSpan()); if (trace.getSaved() != null) { publish(new ServerSentEvent(this, trace.getSaved().getSpan(), @@ -198,45 +204,28 @@ public class TraceFilter extends OncePerRequestFilter } } - // TODO: move annotation keys to constants - protected void addRequestAnnotations(HttpServletRequest request) { + /** Override to add annotations not defined in {@link TraceKeys}. */ + protected void addRequestTags(HttpServletRequest request) { String uri = this.urlPathHelper.getPathWithinApplication(request); - this.traceManager.addAnnotation("/http/request/uri", - request.getRequestURL().toString()); - this.traceManager.addAnnotation("/http/request/endpoint", uri); - this.traceManager.addAnnotation("/http/request/method", request.getMethod()); - - Enumeration headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String name = headerNames.nextElement(); - Enumeration values = request.getHeaders(name); - while (values.hasMoreElements()) { - String value = values.nextElement(); - String key = "/http/request/headers/" + name.toLowerCase(); - this.traceManager.addAnnotation(key, value); - - } - } + this.traceManager.addTag(TraceKeys.HTTP_URL, getFullUrl(request)); + this.traceManager.addTag(TraceKeys.HTTP_HOST, request.getServerName()); + this.traceManager.addTag(TraceKeys.HTTP_PATH, uri); + this.traceManager.addTag(TraceKeys.HTTP_METHOD, request.getMethod()); } - private void addResponseAnnotations(HttpServletResponse response, Throwable e) { - if (response.getStatus() == HttpServletResponse.SC_OK && e != null) { + /** Override to add annotations not defined in {@link TraceKeys}. */ + protected void addResponseTags(HttpServletResponse response, Throwable e) { + int httpStatus = response.getStatus(); + if (httpStatus == HttpServletResponse.SC_OK && e != null) { // Filter chain threw exception but the response status may not have been set // yet, so we have to guess. - this.traceManager.addAnnotation("/http/response/status_code", + this.traceManager.addTag(TraceKeys.HTTP_STATUS_CODE, String.valueOf(HttpServletResponse.SC_INTERNAL_SERVER_ERROR)); } - else { - this.traceManager.addAnnotation("/http/response/status_code", + else if ((httpStatus < 200) || (httpStatus > 299)){ + this.traceManager.addTag(TraceKeys.HTTP_STATUS_CODE, String.valueOf(response.getStatus())); } - - for (String name : response.getHeaderNames()) { - for (String value : response.getHeaders(name)) { - String key = "/http/response/headers/" + name.toLowerCase(); - this.traceManager.addAnnotation(key, value); - } - } } private boolean hasHeader(HttpServletRequest request, HttpServletResponse response, @@ -262,4 +251,15 @@ public class TraceFilter extends OncePerRequestFilter protected boolean shouldNotFilterAsyncDispatch() { return false; } + + private String getFullUrl(HttpServletRequest request) { + StringBuffer requestURI = request.getRequestURL(); + String queryString = request.getQueryString(); + + if (queryString == null) { + return requestURI.toString(); + } else { + return requestURI.append('?').append(queryString).toString(); + } + } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java index f848ee25d..b6775dea4 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java @@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.context.embedded.FilterRegistrationBean; @@ -66,12 +67,17 @@ public class TraceWebAutoConfiguration { } @Bean - public FilterRegistrationBean traceWebFilter(ApplicationEventPublisher publisher, Random random) { + @ConditionalOnMissingBean + public TraceFilter traceFilter(ApplicationEventPublisher publisher, Random random) { Pattern pattern = StringUtils.hasText(this.skipPattern) ? Pattern.compile(this.skipPattern) : TraceFilter.DEFAULT_SKIP_PATTERN; TraceFilter filter = new TraceFilter(this.traceManager, pattern, random); filter.setApplicationEventPublisher(publisher); - return new FilterRegistrationBean(filter); + return filter; } + @Bean + public FilterRegistrationBean traceWebFilter(TraceFilter filter) { + return new FilterRegistrationBean(filter); + } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTraceManager.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTraceManager.java index f136b375d..b5e3cb040 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTraceManager.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTraceManager.java @@ -198,7 +198,7 @@ public class DefaultTraceManager implements TraceManager { } @Override - public void addAnnotation(String key, String value) { + public void addTag(String key, String value) { Span s = getCurrentSpan(); if (s != null && s.isExportable()) { s.tag(key, value); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java index ee4a0fc8b..29ce5f14a 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java @@ -39,6 +39,8 @@ import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilde import java.util.Random; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; @@ -80,7 +82,7 @@ public class TraceFilterTests { } public MockHttpServletRequestBuilder builder() { - return get("/").accept(MediaType.APPLICATION_JSON).header("User-Agent", + return get("/?foo=bar").accept(MediaType.APPLICATION_JSON).header("User-Agent", "MockMvc"); } @@ -102,7 +104,7 @@ public class TraceFilterTests { public void startsNewTrace() throws Exception { TraceFilter filter = new TraceFilter(this.traceManager); filter.doFilter(this.request, this.response, this.filterChain); - verifyHttpAnnotations(); + verifyHttpTags(); assertNull(TraceContextHolder.getCurrentTrace()); } @@ -115,7 +117,7 @@ public class TraceFilterTests { TraceFilter filter = new TraceFilter(this.traceManager); filter.doFilter(this.request, this.response, this.filterChain); - verifyHttpAnnotations(); + verifyHttpTags(); assertNull(TraceContextHolder.getCurrentTrace()); } @@ -129,7 +131,7 @@ public class TraceFilterTests { TraceFilter filter = new TraceFilter(this.traceManager); filter.doFilter(this.request, this.response, this.filterChain); - verifyHttpAnnotations(); + verifyHttpTags(); assertNull(TraceContextHolder.getCurrentTrace()); } @@ -151,30 +153,34 @@ public class TraceFilterTests { catch (RuntimeException e) { assertEquals("Planned", e.getMessage()); } - verifyHttpAnnotations(HttpStatus.INTERNAL_SERVER_ERROR); + verifyHttpTags(HttpStatus.INTERNAL_SERVER_ERROR); assertNull(TraceContextHolder.getCurrentTrace()); } - public void verifyHttpAnnotations() { - verifyHttpAnnotations(HttpStatus.OK); + public void verifyHttpTags() { + verifyHttpTags(HttpStatus.OK); } - public void verifyHttpAnnotations(HttpStatus status) { - hasAnnotation(this.span, "/http/request/uri", "http://localhost/"); - hasAnnotation(this.span, "/http/request/endpoint", "/"); - hasAnnotation(this.span, "/http/request/method", "GET"); - hasAnnotation(this.span, "/http/request/headers/accept", - MediaType.APPLICATION_JSON_VALUE); - hasAnnotation(this.span, "/http/request/headers/user-agent", "MockMvc"); + /** + * Shows the expansion of {@link import org.springframework.cloud.sleuth.instrument.TraceKeys}. + */ + public void verifyHttpTags(HttpStatus status) { + assertThat(this.span.tags()).contains( + entry("http/host", "localhost"), + entry("http/url", "http://localhost/?foo=bar"), + entry("http/path", "/"), + entry("http/method", "GET") + ); - hasAnnotation(this.span, "/http/response/status_code", status.toString()); - hasAnnotation(this.span, "/http/response/headers/content-type", - MediaType.APPLICATION_JSON_VALUE); - } - - private void hasAnnotation(Span span, String name, String value) { - assertEquals(value, span.tags().get(name)); + // Status is only interesting in non-success case. Omitting it saves at least 20bytes per span. + if (status.is2xxSuccessful()) { + assertThat(this.span.tags()) + .doesNotContainKey("http/status_code"); + } else { + assertThat(this.span.tags()) + .containsEntry("http/status_code", status.toString()); + } } private class DelegateSampler implements Sampler { diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleBackground.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleBackground.java index 61152ba4e..0a625f579 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleBackground.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleBackground.java @@ -40,7 +40,7 @@ public class SampleBackground { public void background() { int millis = random.nextInt(1000); Thread.sleep(millis); - this.traceManager.addAnnotation("background-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("background-sleep-millis", String.valueOf(millis)); } } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleBackground.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleBackground.java index d7d1fa6d7..e988d5064 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleBackground.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleBackground.java @@ -40,7 +40,7 @@ public class SampleBackground { final Random random = new Random(); int millis = random.nextInt(1000); Thread.sleep(millis); - this.traceManager.addAnnotation("background-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("background-sleep-millis", String.valueOf(millis)); } } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java index 38de64a39..5ffa1980c 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java @@ -69,7 +69,7 @@ ApplicationListener { public String call() throws Exception { int millis = random.nextInt(1000); Thread.sleep(millis); - SampleController.this.traceManager.addAnnotation("callable-sleep-millis", String.valueOf(millis)); + SampleController.this.traceManager.addTag("callable-sleep-millis", String.valueOf(millis)); Span currentSpan = SampleController.this.accessor.getCurrentSpan(); return "async hi: " + currentSpan; } @@ -87,7 +87,7 @@ ApplicationListener { public String hi2() { int millis = random.nextInt(1000); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); return "hi2"; } @@ -99,7 +99,7 @@ ApplicationListener { int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); @@ -113,7 +113,7 @@ ApplicationListener { int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleBackground.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleBackground.java index 61152ba4e..0a625f579 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleBackground.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleBackground.java @@ -40,7 +40,7 @@ public class SampleBackground { public void background() { int millis = random.nextInt(1000); Thread.sleep(millis); - this.traceManager.addAnnotation("background-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("background-sleep-millis", String.valueOf(millis)); } } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java index 38de64a39..5ffa1980c 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java @@ -69,7 +69,7 @@ ApplicationListener { public String call() throws Exception { int millis = random.nextInt(1000); Thread.sleep(millis); - SampleController.this.traceManager.addAnnotation("callable-sleep-millis", String.valueOf(millis)); + SampleController.this.traceManager.addTag("callable-sleep-millis", String.valueOf(millis)); Span currentSpan = SampleController.this.accessor.getCurrentSpan(); return "async hi: " + currentSpan; } @@ -87,7 +87,7 @@ ApplicationListener { public String hi2() { int millis = random.nextInt(1000); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); return "hi2"; } @@ -99,7 +99,7 @@ ApplicationListener { int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); @@ -113,7 +113,7 @@ ApplicationListener { int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleBackground.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleBackground.java index 61152ba4e..0a625f579 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleBackground.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleBackground.java @@ -40,7 +40,7 @@ public class SampleBackground { public void background() { int millis = random.nextInt(1000); Thread.sleep(millis); - this.traceManager.addAnnotation("background-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("background-sleep-millis", String.valueOf(millis)); } } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java index 38de64a39..5ffa1980c 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java @@ -69,7 +69,7 @@ ApplicationListener { public String call() throws Exception { int millis = random.nextInt(1000); Thread.sleep(millis); - SampleController.this.traceManager.addAnnotation("callable-sleep-millis", String.valueOf(millis)); + SampleController.this.traceManager.addTag("callable-sleep-millis", String.valueOf(millis)); Span currentSpan = SampleController.this.accessor.getCurrentSpan(); return "async hi: " + currentSpan; } @@ -87,7 +87,7 @@ ApplicationListener { public String hi2() { int millis = random.nextInt(1000); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); return "hi2"; } @@ -99,7 +99,7 @@ ApplicationListener { int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); @@ -113,7 +113,7 @@ ApplicationListener { int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); Thread.sleep(millis); - this.traceManager.addAnnotation("random-sleep-millis", String.valueOf(millis)); + this.traceManager.addTag("random-sleep-millis", String.valueOf(millis)); String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class);