Search

Sunday, March 18, 2018

Distributed tracing with Spring Cloud Sleuth

Spring Cloud Sleuth

How to use it

For simple use-case all we need to do is to have Sleuth as dependency in Spring boot project
Maven
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
</dependencies>
Or 
Gradle
dependencyManagement {
     imports {
          mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Edgware.RELEASE'
     }
}
dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
}

Log format

Since we only output the log to the console then default Spring boot log format and configuration is good enough.
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
With Sleuth the log looks like bellow
2017-12-01 12:06:42.651  INFO [jpa.demo,0000001234567879,0000000123456789,true34765 --- [nio-8080-exec-1] com.springjpa.controller.WebController   : Done
[jpa.demo,0000001234567879,0000000123456789,true] part is added by Sleuth, the format is [appname,traceId,spanId,exportable] 
  • spanId - the id of a specific operation that took place
  • appname - the name of the application that logged the span
  • traceId - the id of the latency graph that contains the span
  • exportable - whether the log should be exported to Zipkin or not. When would you like the span not to be exportable? In the case in which you want to wrap some operation in a Span and have it written to the logs only.

Within Spring Boot projects, adding the Spring Cloud Sleuth library to the classpath will automatically add 2 HTTP headers to all calls:
  • X-B3-Traceid Shared by all HTTP calls of a single transaction i.e. the wished-for transaction identifier
  • X-B3-Spanid Identifies the work of a single microservice during a transaction
Non-Spring Boot app may need to handle these 2 headers itself.

2 comments:

  1. Their web site carries their very own product, nicely as|in addition to} goodies from manufacturers like Sliquid, Aneros, and Bijoux Indiscrets, among others. They even have a few of the the} most discreet shipping if that is a concern for you—packages come from "Suki Dunham," so it seems such as you're just getting a surprise from a friend, which is cute. I'd advocate this plug as a solid, high-quality possibility total. It's been comfortable enough to wear dildoes for minutes, but I think I must find a better lube if I'm going to attempt any longer than that.

    ReplyDelete
  2. The only distinction if you play on-line is that you simply play alone. The purpose of the game is to get as close to 21 with out going bust and beating the supplier's hand. These free 다파벳 games give gamers an excellent opportunity to follow their expertise and be taught new strategic strikes. At the identical time, find a way to|you possibly can} discover all the totally different variations and see which one is one of the best for you. The idea behind these tournaments is to spin as many successful mixtures as possible in a given timeframe. Every player performs with the identical number of cash and at the finish, the winner takes the large prize.

    ReplyDelete

Business blockchain use cases