当前位置: 首页 > 科技观察

SpringCloud搭建微服务架构:分布式服务追踪(集成logstash)

时间:2023-03-13 00:38:53 科技观察

通过前面介绍的例子,我们已经介绍了SpringCloudSleuth的基础模块spring-cloud-starter-sleuthfortrace-1和trace-2,实现了功能在每个微服务的日志信息中添加跟踪信息。但是,由于日志文件是分散存储在各个服务实例的文件系统上的,仅仅通过查看日志文件来分析我们的请求链接还是比较麻烦的,所以我们还是需要一些工具来帮助我们集中收集、存储和处理。搜索此跟踪信息。引入基于日志的分析系统是一个不错的选择,比如ELK平台,可以很方便的帮我们收集和存储这些trace日志,同时我们可以很方便的根据TraceID需要时与Road相关的详细日志。ELK平台主要由三个开源免费工具组成:ElasticSearch、Logstash和Kiabana:Elasticsearch是一个开源的分布式搜索引擎。其特点是:分布式、零配置、自动发现、索引自动分片、索引复制机制、restful风格接口、多数据源、自动搜索负载等。Logstash是一个完全开源的工具,收集、过滤、存储你的数据日志供以后使用。Kibana也是一个开源和免费的工具。Kibana可以为Logstash和ElasticSearch提供一个日志分析友好的Web界面,可以帮助您汇总、分析和搜索重要的数据日志。当SpringCloudSleuth与ELK平台集成时,其实我们只需要完成与负责日志收集的Logstash的数据连接即可,所以我们需要为Logstash准备json格式的日志输出。由于SpringBoot应用默认使用logback来记录日志,而Logstash本身也有logback日志工具的支持工具,所以我们可以在logback配置中为logstash添加appender,直接将日志转换成下面这样。json的格式存储和输出。下面根据快速入门示例详细介绍如何实现面向Logstash的日志输出配置:在pom.xml依赖中引入logstash-logback-encoder依赖,如下:net.logstash。logbacklogstash-logback-encoder4.6在project/resource目录下创建bootstrap.properties配置文件,设置spring.application.name=trace-1配置已移至此文件。由于logback-spring.xml先于application.properties加载,之前配置的logback-spring.xml无法获取spring.application.name属性,所以将此属性移至***中加载的bootstrap.properties配置文件中。在project/resource目录下创建logback配置文件logback-spring.xml,具体内容如下:INFO${CONSOLE_LOG_PATTERN}utf8${LOG_FILE}.json${LOG_FILE}.json.%d{yyyy-MM-dd}.gz7UTC{"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}","re??st":"%message"}对logstash的支持主要是通过一个名为logstash的appender实现的。内容并不复杂,主要是日志信息的格式化。为了方便调试,我们先勾选Outputthejsonlogtoafile完成上述改造后,运行快速启动示例,并发起访问trace-1的接口。此时,我们可以在trace-1和trace-2的项目目录下找到一个build目录,在下面创建以各自应用名命名的json文件,配置在logback-spring.xml中,命名为logstash的日志文件appender输出,记录json日志格式如下:{"@timestamp":"2016-12-04T06:57:58.970+00:00","severity":"INFO","service":"trace-1","trace":"589ee5f7b860132f","span":"a9e891273affb7fc","exportable":"false","pid":"19756","thread":"http-nio-9101-exec-1","class":"c.d.TraceApplication$$EnhancerBySpringCGLIB$$a9604da6","re??st":"======"}{"@timestamp":"2016-12-04T06:57:59.061+00:00","severity":"INFO","service":"trace-1","trace":"589ee5f7b860132f","span":"2df8511ddf3d79a2","exportable":"false",“pid”:“19756”,“thread":"http-nio-9101-exec-1","class":"o.s.c.a.AnnotationConfigApplicationContext","re??st":"Refreshingorg.springframework.context.annotation.AnnotationConfigApplicationContext@64951f38:startupdate[SunDec0414:57:59CST2016];parent:org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4b8c8f15"}除了通过上述方法生成json文件外,我们还可以使用LogstashTcpSocketAppender将日志内容通过TcpSocket直接输出到logstash服务器,例如:127.0.0.1:9250...本文完整示例:读者可选择下面两个根据自己喜好查看两个仓库的trace-1和trace-2项目:Github:https://github.com/dyc87112/SpringCloud-Learning/Gitee:https://gitee.com/didispace/SpringCloud-Learning/【本文为专栏作家“翟永超”原创稿件,转载请联系作者获得授权】点此查看该作者更多好文