ApiBoot Logging整合SpringCloud Eureka負載均衡上報日誌
ApiBoot Logging
支援整合服務註冊中心
(Eureka、Consul、Nacos Discovery、Zookeeper...)進行上報請求日誌,Logging Client
會從服務註冊中心內找到指定ServiceID
的Logging Admin
具體可用例項,通過SpringCloud Discovery
內部的負載均衡策略返回Logging Admin
的部署伺服器IP
以及埠號
,這樣Logging Client
就可以完成請求日誌的上報流程。
部落格原文:blog.yuqiyu.com/apiboot-log…
搭建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 Admin
的IP地址
以及服務埠號
,而本章我們就要藉助服務註冊中心
(Eureka Server)來從例項列表中獲取Logging Admin
服務資訊,ApiBoot Logging
提供了一個配置引數api.boot.logging.discovery.service-id
進行配置Logging Admin
的ServiceID
,也就是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-server
、logging-admin
、user-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"
}
]
複製程式碼
自此我們已經成功的整合Eureka
與ApiBoot Logging
。
敲黑板,劃重點
ApiBoot Logging
內部提供的兩種獲取Logging Admin
服務資訊的方式,分別是:service-id
、server-address
,都是比較常用的,使用service-id
方式可以無縫整合SpringCloud
進行使用,而鏈路資訊可以通過Openfeign
、RestTemplate
進行傳遞,這會在我們後期的知識點中講到。
程式碼示例
如果您喜歡本篇文章請為原始碼倉庫點個Star
,謝謝!!!
本篇文章示例原始碼可以通過以下途徑獲取,目錄為SpringBoot2.x/apiboot-logging-integrates-eureka-report-logs
:
- Gitee:gitee.com/hengboy/spr…