SpringCloud分布式⽇志采集⽅案
由于微服务架构中每个服务可能分散在不同的服务器上,因此需要⼀套分布式⽇志的解决⽅案。spring-cloud提供了⼀个⽤来trace服务的组件sleuth。它可以通过⽇志获得服务的依赖关系。基于sleuth,可以通过现有的⽇志⼯具实现分布式⽇志的采集。
这⾥使⽤的是ELK,也就是elasticsearch、logstash、kibana。
⼀、sleuth
第⼀步:sleuth管理端
sleuth⼀般单独放在⼀个⼯程中。需要添加如下依赖
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
配置服务注册中⼼的地址
eureka:
client:
serviceUrl:
defaultZone: localhost:1111/eureka/
启动类加⼊服务发现的注解和zipkin的注解,如下
package com.wlf.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import zipkin.server.EnableZipkinServer;
@EnableDiscoveryClient
@EnableZipkinServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这个时候启动并访问该微服务的地址,可以看到zipkin的管理页⾯了
第⼆步:被管理的微服务端
在我们的其他微服务端需要简单的配置,纳⼊到zipkin的管理之中
引⼊依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
加⼊如下配置
spring:
sleuth:
sampler:
percentage: 1
zipkin:
base-url: localhost:9411
spring.sleuth.sampler.percentage:这个参数的意思是抓取100%的⽇志,只有通过抓取⽇志,才能获
知依赖关系。但是如果始终抓取⽇志的话对性能会有影响,因此可以⾃⼰配置。⼀般在开发环境,该值设置为1,⽣产环境视情况⽽定。
spring.zipkin.base-url:为第⼀步配置的zipkin管理端微服务的地址
现在分别启动服务注册中⼼,⽹关,需要的微服务,以及sleuth。
随便调⽤⼀个微服务
然后我们可以看到相关的跟踪⽇志
同样我们也可以看到微服务之间的依赖关系,这⾥是通过⽹关调⽤了myservice-consumer-feign微服务,然后通过myservice-consumer-feign微服务调⽤了myservice-provider微服务
⼆、搭建ELK
1、elasticsearch的安装与配置,由于之前的⽂章已经介绍了elasticsearch的单点,集的安装,head插件的安装。这⾥不再总结。
2、kibana的安装,没什么好说的,解压,运⾏就可以了
3、logstash的安装,解压即可
在config下新建配置⽂件
output {
input {
tcp {
port => 4560
微服务注册中心有哪些
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["192.168.160.66:9200","192.168.160.88:9200","192.168.160.166:9200"]
index => "applog"
}
}
其中port为端⼝号,codec表⽰通过json格式,elasticsearch.hosts表⽰elasticsearch的地址,这⾥是集。index 为⽇志存储的elasticsearch索引。
启动需要调⽤bin下的logstash命令,通过-f指定配置⽂件
4、使⽤kibana
启动elasticsearch、head、kibana、logstash
创建索引applog
将applog配置到kibana中,在index pattern中输⼊我们的applog索引
最后点击create即可
点击菜单中的discover即可查看⽇志
三、logback配置
spring-cloud、logstash都是⽀持logback的,因此需要为微服务配置好相应的l
这⾥值得注意的是,在spring-boot中,l的加载在l之前。⽽我们需要在l中使⽤spring.application.name。因此,我们需要把spring.application.nam e配置提到l中。
加载顺序为l,l,l
相⽐普通的l,我们主要配置这⼏样东西spring.application.name,logstash的appender
这⾥提供⼀个l的例⼦
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<springProperty scope="context" name="springAppName"
source="spring.application.name" />
<property name="CONSOLE_LOG_PATTERN"
value="%date [%thread] %-5level %logger{36} - %msg%n" />
<appender name="stdout" class="ch.ConsoleAppender">
<withJansi>true</withJansi>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.160.66:4560</destination>
<encoder class="net.der.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity":"%level",
"service": "${springAppName:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。