欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot?sleuth?日志跟蹤問題記錄

 更新時間:2023年07月06日 10:42:11   作者:xiaogui918  
Spring?Cloud?Sleuth是一個在應(yīng)用中實(shí)現(xiàn)日志跟蹤的強(qiáng)有力的工具,使用Sleuth庫可以應(yīng)用于計(jì)劃任務(wù)?、多線程服務(wù)或復(fù)雜的Web請求,尤其是在一個由多個服務(wù)組成的系統(tǒng)中,這篇文章主要介紹了springboot?sleuth?日志跟蹤,需要的朋友可以參考下

springboot sleuth 日志跟蹤

Spring Cloud Sleuth是一個在應(yīng)用中實(shí)現(xiàn)日志跟蹤的強(qiáng)有力的工具。使用Sleuth庫可以應(yīng)用于計(jì)劃任務(wù) 、多線程服務(wù)或復(fù)雜的Web請求,尤其是在一個由多個服務(wù)組成的系統(tǒng)中。當(dāng)我們在這些應(yīng)用中來診斷問題時,即使有日志記錄也很難判斷出一個請求需要將哪些操作關(guān)聯(lián)在一起。

如果想要診斷復(fù)雜操作,通常的解決方案是在請求中傳遞唯一的ID到每個方法來識別日志。而Sleuth可以與日志框架Logback、SLF4J輕松地集成,通過添加獨(dú)特的標(biāo)識符來使用日志跟蹤和診斷問題。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

SLF4J 配置 http://www.dbjr.com.cn/article/71692.htm

在使用slf4j打印日志時會打印traceId,通過這ID可以把整個請求鏈給找出來.

如下是打印出來的實(shí)例

2019-06-19 17:16:21.453 [00c62017e97b7823,00c62017e97b7823] [http-nio-8777-exec-1]

需要把traceId給前端,使用aop,在每個返回結(jié)果中增加traceId字段

import brave.Tracer;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;;import javax.servlet.http.HttpServletRequest;
@Aspect   //定義一個切面
@Configuration
@Slf4j
public class TraceAspect {
    // 定義切點(diǎn)Pointcut
    @Pointcut("execution(* com.gf.controller..*.*(..))")
    public void excudeService() {
    }
    @Autowired
    Tracer tracer;
    @Around("excudeService()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
        HttpServletRequest request = sra.getRequest();
        String url = request.getRequestURL().toString();
        String method = request.getMethod();
        String uri = request.getRequestURI();
        String queryString = request.getQueryString();
        log.info("請求開始, 各個參數(shù), url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString);
        // result的值就是被攔截方法的返回值
        Object result = pjp.proceed();
        JSONObject dd = JSONObject.parseObject(JSON.toJSONString(result));
        dd.put("traceId",tracer.currentSpan().context().traceIdString());
        log.info("請求結(jié)束,controller的返回值是 {} - {}", tracer.currentSpan().toString(), dd.toJSONString());
        return dd;
    }
}

Spring Boot 中的分布式追蹤及使用

隨著互聯(lián)網(wǎng)應(yīng)用程序的復(fù)雜性不斷增加,分布式系統(tǒng)已經(jīng)成為了許多企業(yè)級應(yīng)用程序的標(biāo)配。在分布式系統(tǒng)中,由于服務(wù)之間的調(diào)用關(guān)系錯綜復(fù)雜,很難追蹤到一個請求在整個系統(tǒng)中的執(zhí)行路徑和時間,這就給排查問題和性能優(yōu)化帶來了巨大的挑戰(zhàn)。為了解決這個問題,分布式追蹤技術(shù)應(yīng)運(yùn)而生。本文將介紹 Spring Boot 中的分布式追蹤技術(shù)及其使用方法。

分布式追蹤的概念

分布式追蹤(Distributed Tracing)是一種用于追蹤分布式系統(tǒng)中請求的執(zhí)行路徑和時間的技術(shù)。在分布式系統(tǒng)中,由于請求可能會經(jīng)過多個服務(wù)節(jié)點(diǎn),因此需要在請求流程中添加唯一的標(biāo)識符(Trace ID),并將 Trace ID 傳遞給所有相關(guān)的服務(wù)節(jié)點(diǎn)。每個服務(wù)節(jié)點(diǎn)在處理請求時,都需要將 Trace ID 記錄在請求的上下文中,并將請求的上下文信息傳遞給下一個服務(wù)節(jié)點(diǎn)。這樣,就可以通過 Trace ID 來追蹤一個請求在整個系統(tǒng)中的執(zhí)行路徑和時間。在追蹤過程中,還需要記錄每個服務(wù)節(jié)點(diǎn)處理請求的時間和耗時,以便分析和優(yōu)化系統(tǒng)性能。

Spring Cloud Sleuth

Spring Cloud Sleuth 是 Spring Cloud 中的一個分布式追蹤框架,它提供了基于 Trace ID 的請求追蹤功能,可以協(xié)助開發(fā)人員快速追蹤分布式系統(tǒng)中的請求執(zhí)行路徑和時間,并幫助排查問題和優(yōu)化性能。

Spring Cloud Sleuth 使用 Zipkin 來存儲和展示分布式追蹤信息,Zipkin 是一個開源的分布式追蹤系統(tǒng),可以用于存儲和展示分布式系統(tǒng)中的請求追蹤信息。

Spring Boot 中的分布式追蹤

Spring Boot 集成了 Spring Cloud Sleuth,可以非常方便地實(shí)現(xiàn)分布式追蹤功能。在 Spring Boot 應(yīng)用程序中,只需要添加以下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

添加這些依賴后,Spring Boot 應(yīng)用程序就可以自動配置分布式追蹤功能,并將追蹤信息發(fā)送到 Zipkin 服務(wù)器。

在應(yīng)用程序中,可以通過 Tracer 接口來創(chuàng)建 Trace ID,并將 Trace ID 記錄在請求的上下文中:

@Autowired
private Tracer tracer;
@GetMapping("/hello")
public String hello() {
    Span span = tracer.nextSpan().name("hello").start();
    try (Tracer.SpanInScope ws = tracer.withSpan(span)) {
        // 處理請求
        return "Hello World!";
    } finally {
        span.finish();
    }
}

在每個服務(wù)節(jié)點(diǎn)中,都需要將 Trace ID 記錄在請求的上下文中,并將請求的上下文信息傳遞給下一個服務(wù)節(jié)點(diǎn)。Spring Boot 可以通過 RestTemplateFeign 來自動傳遞請求的上下文信息,只需要在 RestTemplateFeign 中添加相應(yīng)的配置即可:

@Bean
public RestTemplate restTemplate() {
    return new RestTemplateBuilder()
            .interceptors(new TraceRestTemplateInterceptor(tracer()))
            .build();
}
@Bean
public Feign.Builder feignBuilder() {
    return Feign.builder().requestInterceptor(new TraceFeignRequestInterceptor(tracer()));
}

Zipkin 的使用

Zipkin 是一個用于存儲和展示分布式追蹤信息的系統(tǒng),可以用于分析和優(yōu)化分布式系統(tǒng)的性能。在 Spring Boot 中,可以通過以下步驟來使用 Zipkin:

1.下載并啟動 Zipkin 服務(wù)器

可以從 Zipkin 的官網(wǎng)下載 Zipkin 服務(wù)器,并啟動 Zipkin 服務(wù)器。啟動 Zipkin 服務(wù)器后,可以在瀏覽器中訪問 http://localhost:9411 來查看 Zipkin 的 Web 界面。

2.配置 Spring Boot 應(yīng)用程序發(fā)送追蹤信息到 Zipkin 服務(wù)器

在 Spring Boot 應(yīng)用程序中,可以通過以下配置來將追蹤信息發(fā)送到 Zipkin 服務(wù)器:

spring:
  zipkin:
    base-url: http://localhost:9411

3.查看分布式追蹤信息

在啟動 Spring Boot 應(yīng)用程序后,可以通過訪問應(yīng)用程序的端點(diǎn)來觸發(fā)請求,并在 Zipkin 的 Web 界面中查看分布式追蹤信息。在 Zipkin 的 Web 界面中,可以查看每個請求的 Trace ID、請求流程中的服務(wù)節(jié)點(diǎn)、服務(wù)節(jié)點(diǎn)的執(zhí)行時間和耗時等信息。

總結(jié)

分布式追蹤技術(shù)是解決分布式系統(tǒng)中請求執(zhí)行路徑和時間無法追蹤的問題的關(guān)鍵技術(shù)之一。

Spring Boot 集成了 Spring Cloud Sleuth 和 Zipkin,使得分布式追蹤變得非常簡單。

在 Spring Boot 應(yīng)用程序中,可以通過添加相應(yīng)的依賴和配置來實(shí)現(xiàn)分布式追蹤功能,并將追蹤信息發(fā)送到 Zipkin 服務(wù)器。

使用分布式追蹤技術(shù)可以幫助開發(fā)人員更好地管理和監(jiān)控分布式系統(tǒng),并提高系統(tǒng)的可靠性和性能。

到此這篇關(guān)于Spring Boot 中的 Sleuth 簡介及使用方法的文章就介紹到這了,更多相關(guān)Spring Boot Sleuth使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java通過CMD方式讀取注冊表任意鍵值對代碼實(shí)踐

    Java通過CMD方式讀取注冊表任意鍵值對代碼實(shí)踐

    這篇文章主要介紹了Java通過CMD方式讀取注冊表任意鍵值對代碼實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06
  • IDEA導(dǎo)入Eclipse項(xiàng)目的方法步驟(圖文教程)

    IDEA導(dǎo)入Eclipse項(xiàng)目的方法步驟(圖文教程)

    這篇文章主要介紹了IDEA導(dǎo)入Eclipse項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Spring?Boot循環(huán)依賴原理、解決方案與最佳實(shí)踐(全解析)

    Spring?Boot循環(huán)依賴原理、解決方案與最佳實(shí)踐(全解析)

    循環(huán)依賴指兩個或多個Bean相互直接或間接引用,形成閉環(huán)依賴關(guān)系,這篇文章主要介紹了Spring?Boot循環(huán)依賴原理、解決方案與最佳實(shí)踐(全解析),需要的朋友可以參考下
    2025-04-04
  • 分析JAVA中幾種常用的RPC框架

    分析JAVA中幾種常用的RPC框架

    這篇文章主要介紹了JAVA中幾種常用的RPC框架的相關(guān)知識點(diǎn),對此有興趣的朋友參考學(xué)習(xí)下吧。
    2018-03-03
  • Spring Boot 編寫Servlet、Filter、Listener、Interceptor的方法

    Spring Boot 編寫Servlet、Filter、Listener、Interceptor的方法

    這篇文章給大家介紹了spring-boot中如何定義過濾器、監(jiān)聽器和攔截器,對Spring Boot 編寫Servlet、Filter、Listener、Interceptor的相關(guān)知識感興趣的朋友一起看看吧
    2017-07-07
  • java中MVC模式與三層架構(gòu)

    java中MVC模式與三層架構(gòu)

    這篇文章主要讓我們理解MVC模式和三層架構(gòu)的基礎(chǔ)知識,有興趣的同學(xué)可以閱讀,借鑒參考一下
    2023-03-03
  • MyBatis增刪改查快速上手

    MyBatis增刪改查快速上手

    這篇文章給大家講解的是MyBatis 這門技術(shù)的 CURD (增刪改查) ,非常的詳細(xì)與實(shí)用,有需要的小伙伴可以參考下
    2020-02-02
  • java實(shí)現(xiàn)求只出現(xiàn)一次的數(shù)字

    java實(shí)現(xiàn)求只出現(xiàn)一次的數(shù)字

    本文主要介紹了java實(shí)現(xiàn)求只出現(xiàn)一次的數(shù)字,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 解決ObjectMapper.convertValue() 遇到的一些問題

    解決ObjectMapper.convertValue() 遇到的一些問題

    這篇文章主要介紹了解決ObjectMapper.convertValue() 遇到的一些問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java使用ffmpeg處理視頻的方法

    java使用ffmpeg處理視頻的方法

    這篇文章主要介紹了java使用ffmpeg處理視頻的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論