ApiBoot Logging整合SpringCloud Eur

作者: 恒宇少年 | 来源:发表于2019-11-05 10:57 被阅读0次

    ApiBoot Logging支持整合服务注册中心(Eureka、Consul、Nacos Discovery、Zookeeper...)进行上报请求日志,Logging Client会从服务注册中心内找到指定ServiceIDLogging Admin具体可用实例,通过SpringCloud Discovery内部的负载均衡策略返回Logging Admin的部署服务器IP以及端口号,这样Logging Client就可以完成请求日志的上报流程。

    免费教程专题

    恒宇少年在博客整理三套免费学习教程专题,由于文章偏多特意添加了阅读指南,新文章以及之前的文章都会在专题内陆续填充,希望可以帮助大家解惑更多知识点。

    博客原文:http://blog.yuqiyu.com/apiboot-logging-integrates-eureka-report-logs.html

    搭建Eureka Server

    我们先来搭建一个Eureka Server,请访问【搭建服务注册中心Eureka Server】文章内容查看具体搭建流程。

    将Logging Admin注册到Eureka

    既然使用的是服务注册中心,我们需要将之前章节将的Logging Admin进行简单的改造,添加Eureka客户端相关的依赖,并在application.yml配置文件内添加Eureka Server的相关配置,如果对Logging Admin不了解的同学可以访问【将ApiBoot Logging采集的日志上报到Admin】查看文章内容,文章底部有源码。

    添加Eureka Client依赖

    我们需要将Logging Admin注册到Eureka Server,对于Eureka Server而言Logging Admin是一个客户端(Eureka Client)角色。

    我们在pom.xml文件内添加如下配置:

    <!--Eureka Client-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    

    启用Eureka Client

    添加依赖后我们还需要在XxxApplication入口类添加@EnableDiscoveryClient注解来启用Eureka Client的相关功能,如下所示:

    @SpringBootApplication
    @EnableLoggingAdmin
    @EnableDiscoveryClient
    public class LoggingAdminApplication {
        /**
         * logger instance
         */
        static Logger logger = LoggerFactory.getLogger(LoggingAdminApplication.class);
    
        public static void main(String[] args) {
            SpringApplication.run(LoggingAdminApplication.class, args);
            logger.info("{}服务启动成功.", "日志管理中心");
        }
    }
    

    配置注册到Eureka Server

    我们在application.yml配置文件内添加连接到Eureka Server的相关配置信息,如下所示:

    # Eureka Config
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10000/eureka/
      instance:
        prefer-ip-address: true
    

    将Logging Client注册到Eureka

    Logging Client其实就是我们的业务服务,不要被名称误导,我们在本章源码内创建一个user-service模块来作为测试的业务服务,我们也需要将user-service作为客户端注册到Eureka Server,可参考【使用ApiBoot Logging进行统一管理请求日志】文章内容创建项目。

    添加Eureka Client依赖

    pom.xml配置文件内添加如下依赖:

    <!--Eureka Client-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    

    启用Eureka Client

    添加依赖后同样需要启用Eureak Client,这是必不可少的步骤,在我们的入口类XxxApplication上添加如下所示:

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableLoggingClient
    public class UserServiceApplication {
        /**
         * logger instance
         */
        static Logger logger = LoggerFactory.getLogger(UserServiceApplication.class);
    
        public static void main(String[] args) {
            SpringApplication.run(UserServiceApplication.class, args);
            logger.info("{}服务启动成功.", "用户");
        }
    }
    

    配置注册到Eureka Server

    我们在application.yml配置文件内添加Eureka Server的相关配置信息,如下所示:

    # Eureka Config
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10000/eureka/
      instance:
        prefer-ip-address: true
    

    配置Logging Admin服务信息

    这是本章的核心内容,我们在之前都是通过api.boot.logging.admin.server-address参数进行配置Logging AdminIP地址以及服务端口号,而本章我们就要借助服务注册中心(Eureka Server)来从实例列表中获取Logging Admin服务信息,ApiBoot Logging提供了一个配置参数api.boot.logging.discovery.service-id进行配置Logging AdminServiceID,也就是spring.application.name参数对应的值,如下所示:

    # ApiBoot Config
    api:
      boot:
        logging:
          discovery:
            # Logging Admin ServiceID
            service-id: logging-admin
          show-console-log: true
          format-console-log-json: true
    

    每当我们发起请求时,Logging Client就会从Eureak Server内获取ServiceID = logging-admin的服务列表,负载均衡筛选后获取一个可用的实例信息进行上报日志。

    运行测试

    我们将本章源码内用到的三个服务eureka-serverlogging-adminuser-service依次启动。

    通过curl命令访问user-service提供的Controller地址,如下所示:

    ➜ ~ curl http://localhost:9090/test\?name\=admin
    你好:admin
    

    我们可以在logging-admin控制台看到user-service上报的请求日志信息,如下所示:

    Receiving Service: 【user-service -> 127.0.0.1】, Request Log Report,Logging Content:[
        {
            "endTime":1572921905360,
            "httpStatus":200,
            "requestBody":"",
            "requestHeaders":{
                "host":"localhost:9090",
                "user-agent":"curl/7.64.1",
                "accept":"*/*"
            },
            "requestIp":"0:0:0:0:0:0:0:1",
            "requestMethod":"GET",
            "requestParam":"{\"name\":\"admin\"}",
            "requestUri":"/test",
            "responseBody":"你好:admin",
            "responseHeaders":{},
            "serviceId":"user-service",
            "serviceIp":"127.0.0.1",
            "servicePort":"9090",
            "spanId":"d97c515f-a147-4f89-9c59-398905c95a73",
            "startTime":1572921905336,
            "timeConsuming":24,
            "traceId":"5e6c0357-1625-4a28-af18-cacdddba146a"
        }
    ]
    

    自此我们已经成功的整合EurekaApiBoot Logging

    敲黑板,划重点

    ApiBoot Logging内部提供的两种获取Logging Admin服务信息的方式,分别是:service-idserver-address,都是比较常用的,使用service-id方式可以无缝整合SpringCloud进行使用,而链路信息可以通过OpenfeignRestTemplate进行传递,这会在我们后期的知识点中讲到。

    代码示例

    如果您喜欢本篇文章请为源码仓库点个Star,谢谢!!!
    本篇文章示例源码可以通过以下途径获取,目录为SpringBoot2.x/apiboot-logging-integrates-eureka-report-logs

    作者个人 博客
    使用开源框架 ApiBoot 助你成为Api接口服务架构师

    相关文章

      网友评论

        本文标题:ApiBoot Logging整合SpringCloud Eur

        本文链接:https://www.haomeiwen.com/subject/srjsbctx.html