热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务架构系列主题:SpringCloud分布式日志采集方案

本文转自:Java高性能架构目录01sleuth02搭建ELK03查询日志由于微服务架构中每个服务可能分散在不同的服务器上,因此需要一套分布式日

本文转自:Java高性能架构

目录

01 sleuth

02 搭建ELK

03 查询日志


由于微服务架构中每个服务可能分散在不同的服务器上,因此需要一套分布式日志的解决方案。spring-cloud提供了一个用来trace服务的组件sleuth。它可以通过日志获得服务的依赖关系。基于sleuth,可以通过现有的日志工具实现分布式日志的采集。

这里使用的是ELK,也就是elasticsearch、logstash、kibana。

01 sleuth

第一步:sleuth管理端

sleuth一般单独放在一个工程中。需要添加如下依赖

  io.zipkin.java  zipkin-autoconfigure-ui  runtime     io.zipkin.java  zipkin-server    

配置服务注册中心的地址

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  
@SpringBootApplication  
public class Application {public static void main(String[] args) {  SpringApplication.run(Application.class, args);  }  }

这个时候启动并访问该微服务的地址,可以看到zipkin的管理页面了

第二步:被管理的微服务端

在我们的其他微服务端需要简单的配置,纳入到zipkin的管理之中

引入依赖

  org.springframework.cloud  spring-cloud-starter-sleuth      org.springframework.cloud  spring-cloud-sleuth-zipkin  

加入如下配置

spring: sleuth: sampler: percentage: 1zipkin: 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微服务

02 搭建ELK

1、elasticsearch的安装与配置,由于之前的文章已经介绍了elasticsearch的单点,集群的安装,head插件的安装。这里不再总结。

2、kibana的安装,没什么好说的,解压,运行就可以了

3、logstash的安装,解压即可

在config下新建配置文件

output {
input {tcp {port => 4560codec => 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.name配置提到bootstrap.yml中。

加载顺序为bootstrap.yml,logback-spring.xml,application.yml

相比普通的logback-spring.xml,我们主要配置这几样东西spring.application.name,logstash的appender

这里提供一个logback-spring.xml的例子


                          true${CONSOLE_LOG_PATTERN}utf8      192.168.160.66:4560 UTC{"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"  }main.logmain.%d{yyyy-MM-dd}.log30         %d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n        DEBUG                  

我们把message信息配置到了rest字段中。

03 查询日志

启动服务注册中心,网关,需要的微服务,以及sleuth。

启动elasticsearch,head,kibana,logstash,随便运行一个服务,比如

这里会输出一行日志,内容为myService-provider userController,通过网关调用

eclipse控制台输出日志

在kibana中搜索日志

我们看到日志信息在rest字段中。另外,通过trace和span还可以跟踪到整个微服务的调用过程。到此为止,整个日志采集就搭建完成了。系统上线后只需要在elasticsearch中就能搜索到各个服务器上,各个微服务的日志内容了。


推荐阅读
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细解释了如何使用@IfProfileValue注解来检测Spring框架中的配置文件是否处于活动状态,并探讨其与@Profile和@activeProfiles的区别。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 我有一个SpringRestController,它处理API调用的版本1。继承在SpringRestControllerpackagerest.v1;RestCon ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
author-avatar
lookadgo_544
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有