Commit Graph

814 Commits

Author SHA1 Message Date
Marcin Grzejszczak
f047b39fd8 Made tests less brittle - fixed the stupid change 2016-12-16 14:14:14 +01:00
Marcin Grzejszczak
765e41d6c7 Made tests less brittle 2016-12-16 13:51:50 +01:00
Marcin Grzejszczak
1b832b6029 Spans are continued in Handler Interceptors (#474)
without this change an explicit new span is created on the server side. Its name is equal to the method name of the controller. It introduces some nice advantages in terms of readability of trace.

with this change we're continuing a previous span on the server side. We're attaching the tags and logs to that span with information about controller class and controller name. Also events related to start and finish of the controller are there.

fixes #471 #469 #427
2016-12-16 13:51:37 +01:00
Dave Syer
a0adcecba0 Update to Spring Boot 1.5 2016-12-12 12:52:21 +00:00
Marcin Grzejszczak
7855560fa9 Fixed disabling of Sleuth
without this change it's impossible to disable Sleuth when you have registered a Random bean
with this change the conditions are fixed

fixes #462
2016-12-08 15:25:55 +01:00
Marcin Grzejszczak
8c8c3e919b Continuing Spans (#461)
With this change we change the approach to continue spans (if they already exist) instead of starting new ones. The RPC spans would still be generated but Hystrix, Async, Callables / Runnables will reuse an existing span if there is one.

the scenarios are as follows:

Assuming that we have a trace X with span Y
* if you used tracer.wrap(Callable) or trace.wrap(Runnable) then:
  * previously you'd get a span Z created when the Callable / Runnable is executed
  * with this change you'll continue the span Y
* if you used a HystrixCommand then
  * previously you'd get a span Z together with added tags when the command got executed
  * with this change you'll continue the span Y and the tags will be added to span Y
* if you used a ExecutorService then
  * previously you'd get a span Z together with added tags when a method from ExecutorService got executed
  * with this change you'll continue the span Y and the tags will be added to span Y

Assuming that there was no span then everything will work as previously.

In order to create a new span you just have to create it manually. Example of creating a new span for an `@Async` annotated method.

```
// obviously you should inject via constructor ;)
@Autowired Tracer tracer;

@Async
public Future<String> foo() {
    Span span = tracer.createSpan("newSpan");
    try {
       // do your stuff
    } finally {
       this.tracer.close(span);
    }
}
```

fixes #174
2016-12-07 11:18:13 +01:00
Jean-Philippe Courson
85f8943410 Custom HTTP status codes support (#460)
Provides  custom HTTP status codes support

without this change applications using custom HTTP status codes are currently having issues with Spring Cloud Sleuth. TraceFilter.httpStatusSuccessful() is throwing an IllegalArgumentException on HttpStatus.valueOf(response.getStatus()).

with this change that gets fixed
2016-12-03 17:14:12 +02:00
Marcin Grzejszczak
64c2946d65 Fixed wrong proxying of executors
without this change tracing worked fine but the custom types were not registered as beans. Thus autowiring of them was not possible
with this change the bean post processor is removed and an aspect is used - that way tracing is still working fine but we don't interfere in bean registration

fixes #445
2016-11-21 16:55:42 +01:00
Adrian Cole
bee6956987 Starts 128-bit traces when spring.sleuth.traceId128=true (#455)
This adds autoconfiguration to create 128-bit traces when
`spring.sleuth.traceId128=true`.
2016-11-18 20:10:00 +08:00
Adrian Cole
eb98de3cc4 Updates to latest Zipkin 1.16.2 (#454)
Here are the features relevant to sleuth

* MySQL support of 128-bit group-by
* don't stack overflow on json write bug
* more forgiving of IPv4-mapped addresses in json
2016-11-18 16:41:00 +08:00
Adrian Cole
c596f3f1ae Propagates logs and reports 128-bit trace IDs (#452)
This supports 128-bit traces via a new field traceIdHigh, which matches
other zipkin implementations. In encoded form, the trace ID is simply
twice as long (32 hex characters).

With this change in, a 128-bit trace propagated will not be downgraded
to 64-bits when sending downstream, reporting to Zipkin or adding to
the logging context.

This will be followed by a change to support initiating 128-bit traces.
2016-11-18 08:46:54 +08:00
Adrian Cole
c943e4cd50 Switches ID encoding to fixed-length (#450)
Before, we were using variable encoding for trace and span identifiers.
This complicates search for those who are copy/pasting fixed-length IDs
provisioned upstream. This moves to standard formatting, while
maintaining tolerant reads.

The code added will also be used to support 128-bit (32 char) trace IDs.

Fixes #449
2016-11-16 14:55:28 +08:00
Marcin Grzejszczak
eab6d39cb6 Updated docs 2016-11-10 15:49:22 +01:00
Marcin Grzejszczak
642cf9d7a9 Updated docs 2016-11-10 15:41:03 +01:00
Marcin Grzejszczak
96df523557 Added baggage support (#440)
without this change there is no support for context propagation
with this change whenever you pass the `baggage-...` for http or `baggage_` for messaging headers then such a value will be propagated through your system

fixes #237
2016-11-10 15:36:47 +01:00
Marcin Grzejszczak
9ab37c34fa Wrapping ExecutorService in its own representation
without this change ExecutorService was treated as an Executor and wrapped in the Executor bean. Due to this the bean was missing / bean of invalid type was registered.
with this change we do not wrap ExecutorService with a Executor bean, instead we wrap it in a TraceableExecutorService representation.

fixes #445
2016-11-08 15:22:40 +01:00
Adrian Cole
840d30dd33 Fixes MessagingApplicationTests 2016-11-07 07:29:31 -08:00
Adrian Cole
5e4bf0a2e3 Fixes ZipkinMessageListenerTests 2016-11-07 07:10:18 -08:00
Adrian Cole
77e9328e12 Ensures Span.timestamp/duration are not reported on remote spans
This ensures spans that have remote set to true don't send
Span.timestamp/duration.

In the RPC span model, the client owns the timestamp and duration of the
span. If we were propagated an id, we can assume that we shouldn't
report timestamp or duration, rather let the client do that. Worst case
we were propagated an unreported ID and Zipkin backfills timestamp and
duration.

See https://github.com/openzipkin/openzipkin.github.io/issues/49
2016-11-07 06:59:17 -08:00
Marcin Grzejszczak
2ab2eb1747 Polish 2016-11-06 20:03:44 +01:00
Christoffer Sawicki
3b14e6a1f7 Allow TraceWebAutoConfiguration to work without Web MVC
Fixes #436
2016-11-06 20:03:34 +01:00
Adrian Cole
84b066970a Updates to zipkin 1.14.4 (#441)
* Support for MySQL 5.7 with SQL_MODE=ONLY_FULL_GROUP_BY
* Includes support to store 128-bit trace ID (not yet implemented here)

See https://github.com/openzipkin/b3-propagation/issues/6
2016-11-06 19:38:46 +08:00
Marcin Grzejszczak
9291af89cf Updated docs 2016-11-06 12:31:03 +01:00
Marcin Grzejszczak
e5dce64d71 Added a test for tracing the tracer 2016-11-06 10:06:17 +01:00
Marcin Grzejszczak
718a62ba5b Fixed the missing sampled flag for sleuth stream messages
without this change your message broker will explode due to number of message:sleuth messages
with this change it gets fixed
2016-11-06 09:28:58 +01:00
Marcin Grzejszczak
6f24c8866c Polish 2016-11-04 13:09:36 +01:00
Marcin Grzejszczak
83012a5aa6 Text map introduction (#439)
without this change we had to treat every mean of injecting and extracting span information separately
with this change all means of communications are abstracted. That way you configure things once only.

part of #237
2016-11-04 12:23:14 +01:00
Marcin Grzejszczak
43ae6dd7e3 Updated docs whitelisted branches 2016-11-02 14:13:54 +01:00
Marcin Grzejszczak
69521f37f0 Updated version to 1.2.0 2016-11-02 13:58:40 +01:00
Marcin Grzejszczak
1eefc4c4b3 Ensuring that disabling of modules work
without this change when you disable Sleuth web client the context fails to load
with this change it's working fine. We've moved beans around + the async web client will be turned off automatically if the sync one is also disabled

fixes #433
2016-11-02 12:39:12 +01:00
Marcin Grzejszczak
5e5338869c Added error tag upon exceptions (#435)
without this change there's no error colouring on Zipkin side
with this change we set error tags
- whenever there is an exception thrown on the server side (5xx)
- wheneber on the client side it's impossible to send a message

fixes #384
2016-10-31 13:22:22 +01:00
Marcin Grzejszczak
067242288f Providing examples of how to work with executors
without this example it might be misleading for users how to work with callables and custom executors.
with this example we're showing both the case when you're using a custom executor (in this case you just have to register it as a bean and then use that bean in your callable); and also we show an example of how to reuse the taskScheduler one (it's enough to wrap it with LazyTraceExecutor).

fixes #423
2016-10-28 09:57:16 +02:00
Marcin Grzejszczak
ec3a94b8c5 Updated docs with percentage information
without this change the percentage value might have been set to over 1.0
with this change we explain what are the valid values and what are the reasons for keeping the value as it is

fixes #397
2016-10-27 14:07:07 +02:00
Biju Kunjummen
92cdb8817b Issue 424 - Documentation for adding trace/span headers to http response (#429) 2016-10-27 13:42:48 +02:00
Marcin Grzejszczak
8794971bfe Increased level of TOC 2016-10-20 12:21:09 +02:00
Marcin Grzejszczak
14236cfd97 Propagating exceptions in trace filter
without this change any exception occurring while creating a span will be swallowed.
with this change we're propagating the exception so that it gets handled properly.

fixes #426
2016-10-18 16:23:32 +02:00
Marcin Grzejszczak
17f68f80fd Failure in extracting headers results in new span
without this change if the users sends invalid headers then exceptions are thrown.
with this change extractors catch the exception, log it and then a new span is created. That of course will lead to an invalid trace graph cause a new trace will be created but at least business apps will not be broken due to an issue in instrumentation.

fixes #425
2016-10-18 14:42:47 +02:00
Spencer Gibb
68c582d5cc Merge pull request #418 from dstine/docs
fix small typo
2016-10-13 11:37:58 -04:00
Marcin Grzejszczak
6642a369bc Not throwing an exception when queue size is exceeded
without this change when queue size of spans is exceeded for Stream span propagation, an exception is thrown that terminates business logic processing
with this change we're not propagating the exception - we're incrementing the dropped spans counter

fixes #421
2016-10-11 15:24:48 +02:00
Dave Syer
825ea0ce31 Ensure lifecycle callbacks are applied to delegate
When wrapping a ThreadPoolTaskExecutor in a bean postprocessor
we should take care that the delegate gets the lifecycle callbacks
from the container. Otherwise when it is first used, the thread pool
will not have been initialized, resulting in an exception.

(Can't believe this ever actually worked)
2016-10-10 13:45:03 +01:00
Dave Syer
0e43466b91 Ensure message headers are still mutable after interceptor is called
Some components in Spring assume (perhaps wrongly) that a channel
interceptor will not convert a mutable message into an immutable
one, and they continue to modify the headers dowstream. We can
dosge the issue of whether this is right or wrong by keeping the
message headers mutable, just in case.

It would probably be better to refactor the SpanInjector so that
it works with something other than the MessageBuilder, but we can
defer doing that in favour of this smaller change that works.

Adds a test for mutability. Also tested with the
gs-messaging-stomp-websocket guide from spring.io.

Fixes gh-276
2016-10-10 13:44:46 +01:00
Dan Stine
d30fcd5201 fix small typo 2016-10-08 21:26:36 -04:00
Adrian Cole
b2df9844db Updates to latest Zipkin and avoids Endpoint factory method (#417)
Now that Endpoint has ipv6, the factory method is even worse than it
was before. This switches to a builder instead.

Note: Endpoint now has a nice toString which should help debugging.
2016-10-06 19:05:20 +08:00
Marcin Grzejszczak
4a3b346888 Fixed race condition in tests 2016-10-04 14:31:15 +02:00
Marcin Grzejszczak
31cec3fc79 Fixing ConcurrentModificationException 2016-10-04 14:04:03 +02:00
Marcin Grzejszczak
baad8c404a Wrapping all Executors and ThreadPoolTaskExecutors
without this change there was a gap in passing tracing info to executors.

With this change the Executors are wrapped in LazyTraceExecutor and ThreadPoolTaskExecutors are wrapped in their tracing representation too

fixes #410
2016-10-04 13:50:31 +02:00
Marcin Grzejszczak
155d6aed7c Updating mvnw for all projects 2016-09-19 19:31:57 +02:00
Adrian Cole
60cdafc1bc Updates to adjust for reporter metrics drift (#411) 2016-09-19 22:14:43 +08:00
Marcin Grzejszczak
8a6664c065 Updating mvnw for all projects 2016-09-19 14:19:08 +02:00
Dave Syer
b8b2a6cc17 Move unnecessary dependencies up a level 2016-09-19 12:04:59 +01:00