Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Spans

    • Give me all root spans

    • Give me all spans that belong to following trace

    • Give me a parent of a span

    • Give me children of a span

  • Invocations

    • What span I belong to

    • What remote calls I make

    • Give me all spans that are in the same trace as I am

    • Give me all available invocations that are in the same trace as I am

...

  • opentracing.io spans are not perfect fit for inspectIT, as are missing information on which agent the span was created, what's the method id or sensor id. Thus, opentracing.io like spans are transformed to the ones that extend the MethodSensorData class in inspectIT and span context is transformed to the SpanIdent instances. These inspectIT-like spans are not available in the SDK project, but only in the inspectIT shared projects.
  • opentracing.io allows the concrete implementation to define what are relation between spans making the call on one JVM and receiving the call on the other JVM. Many libraries chose to have same identification ids for both span calling (client) and its called span (server). We decided to have normal child-parent relationships (server span is child or client span), as it can occur that one call is making more spans on the receiving end (for example internally forwarded HTTP request).
  • opentracing.io does not force implementation to provide sampling rate for tracing frequency. For now inspectIT does not have any sampler and is tracing every single request. In future this must change in order to decrease the amount of captured data on the agents. 
  • developed tracer is thread context aware, this means that it remembers the order of created spans per thread. Thus when new span is created by default it parent will be the latest created and not finished span by that thread. 

Remote sensors

In oder to make design flexible and support easy addition of support for the new remote communication frameworks on the agent we developed set of remote sensors. Here following rules apply:

...

With this design approach it's easy to add, for example, the implementation for a new HTTP client framework. The only thing needed is basically implementation of the HttpRequest that corresponds to that specific framework and does the actual information reading, headers setting, etc. Everything else is already available via the ClientInterceptor and HttpRequestAdapter/HttpResponseAdapter.

Flow example

View file
nameinspectIT_trace_video.mp4
height250

Link: http://prezi.com/kuvkl0vddepu/?utm_campaign=share&utm_medium=copy

Implementation

SDK project

To support implementation of the opentracing.io new project has been created: inspectit.agent.java.sdk. This project has only dependency to opentracing.io API and Noop tracer implementation.

We need to push the artifact of this project to the maven repository with the correctly defined pom in future, so that users can include it when they want to make their own spans are part of a trace.

Supported technologies and frameworks

Currently we support two technologies for the remote communication: HTTP and JMS. Here is the list of the framework related implementations available:

TechnologyTypeFrameworkVersion(s)Comment
HTTPServerJava ServletAllDoes not support response code reading in version 2.0 or less.
HTTPClientApache Http Client4.xNot including the asynchronous client library.
HTTPClientJetty Http Client6.x-8.x
HTTPClientURL Connectionjava 1.6, 1.7 & 1.8 (1.9)
HTTPClientSpring Rest Template3.x - 4.xSRT is a wrapper. We are independent of the underlying client used.
MQServer / ClientJMS1.x -

UI adaptations

Since tracing requires non-agent focused UI, we needed to make a compromise and create an intermediate state. This means that tracing view is agent-less view and as such must not be in the data explorer tree. We decided that for now access to the tracing view is via the data explorer toolbar.

Screenshots