1. 程式人生 > 程式設計 >ApiBoot Logging整合SpringCloud Eureka負載均衡上報日誌

ApiBoot Logging整合SpringCloud Eureka負載均衡上報日誌

ApiBoot Logging支援整合服務註冊中心(Eureka、Consul、Nacos Discovery、Zookeeper...)進行上報請求日誌,Logging Client會從服務註冊中心內找到指定ServiceIDLogging Admin具體可用例項,通過SpringCloud Discovery內部的負載均衡策略返回Logging Admin的部署伺服器IP以及埠號,這樣Logging Client就可以完成請求日誌的上報流程。

部落格原文:blog.yuqiyu.com/apiboot-log…

搭建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,"使用者");
    }
}
複製程式碼

配置註冊到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介面服務架構師