因为微服务架构中每个服务可能扩散在不同的服务器上,因而须要一套分布式日志的解决方案。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: http://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@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
这个时候启动并拜访该微服务的地址,能够看到zipkin的治理页面了。
举荐一个 Spring Boot 基础教程及实战示例:
https://github.com/javastacks...
第二步:被治理的微服务端
在咱们的其余微服务端须要简略的配置,纳入到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: http://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的,因而须要为微服务配置好相应的logback-spring.xml
这里值得注意的是,在spring-boot中,logback-spring.xml的加载在application.yml之前。而咱们须要在logback-spring.xml中应用spring.application.name
。因而,咱们须要把spring.application.nam
e配置提到bootstrap.yml中。
加载程序为bootstrap.yml,logback-spring.xml,application.yml
相比一般的logback-spring.xml,咱们次要配置这几样货色spring.application.name
,logstash的appender
这里提供一个logback-spring.xml的例子
<?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.qos.logback.core.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.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> <pattern> { "severity":"%level", "service": "${springAppName:-}", "trace": "%X{X-B3-TraceId:-}", "span": "%X{X-B3-SpanId:-}", "exportable": "%X{X-Span-Export:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" } </pattern> </pattern> </providers> </encoder> </appender> <appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>main.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>main.%d{yyyy-MM-dd}.log</FileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> </appender> <springProfile name="!production"> <logger name="com.myfee" level="DEBUG" /> <logger name="org.springframework.web" level="INFO"/> <root level="info"> <appender-ref ref="stdout" /> <appender-ref ref="dailyRollingFileAppender" /> <appender-ref ref="logstash" /> </root> </springProfile> <springProfile name="production"> <logger name="com.myfee" level="DEBUG" /> <logger name="org.springframework.web" level="INFO"/> <root level="info"> <appender-ref ref="stdout" /> <appender-ref ref="dailyRollingFileAppender" /> <appender-ref ref="logstash" /> </root> </springProfile></configuration>
咱们把message信息配置到了rest字段中。
三、查问日志
启动服务注册核心,网关,须要的微服务,以及sleuth。
启动elasticsearch,head,kibana,logstash,轻易运行一个服务,比方
这里会输入一行日志,内容为myService-provider userController
,通过网关调用
eclipse控制台输入日志
在kibana中搜寻日志
咱们看到日志信息在rest字段中。另外,通过trace和span还能够跟踪到整个微服务的调用过程。到此为止,整个日志采集就搭建实现了。
零碎上线后只须要在elasticsearch中就能搜寻到各个服务器上,各个微服务的日志内容了。
版权申明:本文为CSDN博主「guduyishuai」的原创文章,遵循CC 4.0 BY-SA版权协定,转载请附上原文出处链接及本申明。
原文链接:https://blog.csdn.net/guduyis...
近期热文举荐:
1.1,000+ 道 Java面试题及答案整顿(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!