微服务监控跟踪组件sleuth集成ELK

分布式系统如果服务数量很多的情况下,对微服务的监控和日志查询将会是一件很困难的事情。那么springcloud提供了一个分布式的服务跟踪组件:

<!--服务跟踪组件-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
微服务在启动就回输入如下的跟踪日志:
 Handling span [Trace: aa7237dd9a5ce651, Span: aa7237dd9a5ce651, Parent: null, exportable:true]

第一个:traceId表明当前请求链路的唯一识别id

第二个:spanId表明当前链路每一次请求包含一个开始spanid,一个结束spanId

spring:
  application:
    name: microservice-provider-user
#  zipkin:
    #指定zipkin客户端链接zipkin服务器的地址
#    base-url: http://localhost:9411
  #日志收集的比例100%
  sleuth:
    sampler:
      percentage: 1.0

sample接口提供一个

public interface Sampler {
	/**
	 * @return true if the span is not null and should be exported to the tracing system
	 */
	boolean isSampled(Span span);
}

接口是否对日志进行输出到第三方的如:ELK  日志分析组件

二:

sleuth整合LogStash.

logStash可以对日志的输入、过滤、输出。springboot默认采用logback作为日志分析。而logstash已经实现了logback的支持。所以只需要在logback-spring.xml添加对logstash对应的appender即可实现以json的格式对日志进行收集,需要添加以下依赖:

<dependency>
			<groupId>net.logstash.logback</groupId>
			<artifactId>logstash-logback-encoder</artifactId>
			<version>4.11</version>
		</dependency>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>
                <pattern>
                    <pattern>
                        {
                        "service" : "${springAppName:-}",
                        "trace" : "%X{X-B3-TraceId:-}",
                        "span" : "%X{X-B3-SpanId:-}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>

整合zipkin

ELK在日志收集对日志内容分析方面有着很好的解决办法,但是微服务在调用过程中。A----B---D---C---E

没一次调用的性能和时间则无法通过日志获取到。那么就无法对微服务进行性能优化。所以zipkin是对微服务

链路跟踪的可以查询某一个时间段请求的各个链路的请求时间。

配置如下:

1:搭建zipkin-server服务器,引入以下依赖

<dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>

2:启动类添加注解如下:

@EnableZipkinServer

3:默认端口:9411

4:为zipkin客户端添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

5:指定客户端链接的服务端的url:

spring:
  zipkin:
    #指定zipkin客户端链接zipkin服务器的地址
    base-url: http://localhost:9411

测试访问:http://localhost:9411即可打开客户端查询时间段内的请求性能指标信息

这样有一个问题。就是有多少个客户端。每个客户端都要配置zipkinserver的地址信息。这样对维护产生不便。所以

就可以使用异步的方式消息中间件对日志进行收集,可以很容易将信息输出到消息中间件中。同时zipkin服务端从

消息中间件上异步的消费这些跟踪信息。

接一下通过对原有服务进行改造,实现通过消息中间件收集日志并进行跟踪信息。

1:修改客户端添加如下依赖

第一个依赖:sleuth对zipkin的扩展

第二个依赖:集成消息中间件rabbitmq

2:配置文件中就可以删除在配置zipkin-server的url配置信息,并添加mq的相关配置

3:修改zipkin-server的依赖如下:增加如下配置

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
        </dependency>

4:测试如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值