国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring boot結(jié)合SkyWalking-Trace工具類實(shí)現(xiàn)日志打印請(qǐng)求鏈路traceid

這篇具有很好參考價(jià)值的文章主要介紹了Spring boot結(jié)合SkyWalking-Trace工具類實(shí)現(xiàn)日志打印請(qǐng)求鏈路traceid。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景:

隨著業(yè)務(wù)的復(fù)雜化、解耦化,運(yùn)維人員和開發(fā)人員需要對(duì)請(qǐng)求鏈路跟蹤來快速發(fā)現(xiàn)和定位問題,基于應(yīng)用已經(jīng)集成了SkyWalking的前提下,如何通過獲取SkyWalking生成的統(tǒng)一traceId并加入打印日志中,方便開發(fā)人員能夠根據(jù)鏈路ID快速搜索單個(gè)請(qǐng)求的全鏈路日志呢?

基本思路:

trace-id的生成:

結(jié)合apm-toolkit-trace提供的工具類獲取請(qǐng)求的trace-id,前提是應(yīng)用已經(jīng)集成對(duì)接了SkyWalking

trace-id的存放:

一種輕量級(jí)的實(shí)現(xiàn),通過??MDC?機(jī)制,將請(qǐng)求的?trace-id?放入到MDC中,在日志打印時(shí),通過?MDC?中的?trace-id?將同一個(gè)請(qǐng)求的每一條日志串聯(lián)起來。因?yàn)?MDC?是線程隔離且安全的。

trace-id的打印:

通過修改logback.xml配置中pattern增加輸出參數(shù)%X{traceId}來控制。

trace-id存放的觸發(fā)機(jī)制:

通常實(shí)現(xiàn)方式,采用增加日志攔截器的做法,將攔截服務(wù)所有外部請(qǐng)求,在請(qǐng)求前置處理中將生成trace-id并保存入MDC中。

代碼示例:

通用做法-開發(fā)三板斧:依賴、配置、注解與編碼

依賴?

<!-- skywalking依賴包 打印traceid -->
<dependency>
			<groupId>org.apache.skywalking</groupId>
			<artifactId>apm-toolkit-trace</artifactId>
			<version>8.7.0</version>
</dependency>

配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
    <jmxConfigurator/>

    <contextName>logback</contextName>

    <springProperty scope="context" name="module_name" source="spring.application.name"/>
    <!-- 讀取apollo配置中心設(shè)置的變量 -->
    <springProperty scope="context" name="version" source="app.version"/>
    <springProperty scope="context" name="env" source="app.env"/>

    <timestamp key="log_date" datePattern="yyyy-MM-dd"/>

    <!--自定義輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - thead=%thread - level=%-5level - class=%logger{20} - token=%X{token} - traceId=%X{traceId} - content=%msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志輸出級(jí)別 -->
    <root level="debug">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

編碼

(1) 自定義攔截器LoggerInterceptor

package com.zzia.demo.interceptor;

import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.skywalking.apm.toolkit.trace.TraceContext;


@Component
public class LoggerInterceptor implements HandlerInterceptor {

    /**
     * @return 返回 true 放行、放回 false 攔截
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("進(jìn)入攔截器,前置通知" + request.getRequestURI());
        // 過濾掉確認(rèn)的 options 請(qǐng)求
        if ("OPTIONS".equals(request.getMethod())) {
            return true;
        }

        // 單鏈路上下文信息存入MDC

        // 請(qǐng)求憑證
        String token = request.getHeader("__ub_token");
        MDC.put("token", token);
        //每次請(qǐng)求生成唯一的請(qǐng)求標(biāo)識(shí),作為內(nèi)部鏈路的日志追蹤標(biāo)識(shí)
        MDC.put("traceId", TraceContext.traceId());
        // 業(yè)務(wù)身份字段可擴(kuò)展加入
        String userId = "123456";
        MDC.put("userId", userId);

        if (token != null) {
            return true;
        }

        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("后置通知");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("最終通知");
        MDC.clear();
    }
}

(2) 注冊(cè)攔截器

package com.zzia.demo.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


@Configuration
public class MyLoggerConfigurer implements WebMvcConfigurer {

    @Autowired
    LoggerInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(myInterceptor)    // 添加自定義攔截器
                .excludePathPatterns("/index") // 設(shè)置放行路徑
                .addPathPatterns("/**");       // 設(shè)置攔截路徑
    }
}

演示效果:

tracecontext.traceid(),skywalking,分布式,微服務(wù),日志鏈路跟蹤

說明:本示例的前置準(zhǔn)備參見文章Spring boot 集成Skywalking_幽幽之心的博客-CSDN博客?文章來源地址http://www.zghlxwxcb.cn/news/detail-613290.html

到了這里,關(guān)于Spring boot結(jié)合SkyWalking-Trace工具類實(shí)現(xiàn)日志打印請(qǐng)求鏈路traceid的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring boot 集成 Skywalking 配置 || Skywalking 打不開【已解決】

    Spring boot 集成 Skywalking 配置 || Skywalking 打不開【已解決】

    Apache SkyWalking 如果下載太慢,建議復(fù)制下載鏈接, 然后用下載器下載 ,比如某雷。 ? 打開apm-bin 里的webapp 修改port ? ? 這樣就解決了端口沖突問題。 ?? ? ? ? ? -javaagent:D:testxunleiapache-skywalking-java-agent-8.10.0skywalking-agentskywalking-agent.jar //這個(gè)是你自己skywalking-agent.j

    2024年02月14日
    瀏覽(20)
  • SkyWalking鏈路追蹤中Trace概念以及Trace與span的關(guān)系

    SkyWalking鏈路追蹤中Trace概念以及Trace與span的關(guān)系

    在SkyWalking鏈路追蹤中,Trace(追蹤)是指一個(gè)請(qǐng)求或者一個(gè)操作從開始到結(jié)束的完整路徑。它涵蓋了分布式系統(tǒng)中所有相關(guān)組件的調(diào)用關(guān)系和性能信息。 具體來說,Trace包含了一系列的span(跨度),每個(gè)span代表了一個(gè)組件的調(diào)用或操作。一個(gè)span會(huì)記錄下該組件的開始時(shí)間、

    2024年02月15日
    瀏覽(22)
  • SkyWalking鏈路追蹤-搭建-spring-boot-cloud-單機(jī)環(huán)境 之《10 分鐘快速搭建 SkyWalking 服務(wù)》

    SkyWalking鏈路追蹤-搭建-spring-boot-cloud-單機(jī)環(huán)境 之《10 分鐘快速搭建 SkyWalking 服務(wù)》

    首先了解一下單機(jī)環(huán)境 第一步,搭建一個(gè) Elasticsearch 服務(wù)。 第二步,下載 SkyWalking 軟件包。 第三步,搭建一個(gè) SkyWalking OAP 服務(wù)。 第四步,啟動(dòng)一個(gè) Spring Boot 應(yīng)用,并配置 SkyWalking Agent。 第五步,搭建一個(gè) SkyWalking UI 服務(wù)。 準(zhǔn)備工作,準(zhǔn)備一個(gè)docker網(wǎng)絡(luò)組,網(wǎng)絡(luò)組的名字為

    2024年02月15日
    瀏覽(26)
  • Golang版本處理Skywalking Trace上報(bào)數(shù)據(jù)

    Golang版本處理Skywalking Trace上報(bào)數(shù)據(jù)

    Tips: 中間記錄了解決問題的過程,如不感興趣可直接跳至結(jié)尾 首先去es里查詢skywalking trace的元數(shù)據(jù) 可以拿到一串base64加密后的 data_binary (直接解密不能用,會(huì)有亂碼,可參考https://github.com/apache/skywalking/issues/7423) 對(duì) data_binary 進(jìn)行base64解密 skywalking提供了一個(gè)java的sdk可以直接分

    2024年02月04日
    瀏覽(27)
  • Spring Boot 3 整合 xxl-job 實(shí)現(xiàn)分布式定時(shí)任務(wù)調(diào)度,結(jié)合 Docker 容器化部署(圖文指南)

    Spring Boot 3 整合 xxl-job 實(shí)現(xiàn)分布式定時(shí)任務(wù)調(diào)度,結(jié)合 Docker 容器化部署(圖文指南)

    xxl-job 是一個(gè)分布式任務(wù)調(diào)度平臺(tái),它提供了強(qiáng)大的任務(wù)調(diào)度和執(zhí)行能力,可以幫助我們實(shí)現(xiàn)任務(wù)的自動(dòng)化調(diào)度和執(zhí)行。本文將介紹如何在 Docker 環(huán)境下部署 xxl-job,并將其與 Spring Boot 進(jìn)行整合。 數(shù)據(jù)庫腳本:tables_xxl_job-2.4.0.sql Docker 鏡像地址: https://hub.docker.com/r/xuxueli/xxl-jo

    2024年02月06日
    瀏覽(36)
  • Spring Boot進(jìn)階(75):從容應(yīng)對(duì)HTTP請(qǐng)求——Spring Boot與OkHttp完美結(jié)合

    Spring Boot進(jìn)階(75):從容應(yīng)對(duì)HTTP請(qǐng)求——Spring Boot與OkHttp完美結(jié)合

    ????????在現(xiàn)代的Web應(yīng)用程序中,HTTP請(qǐng)求成為了構(gòu)建客戶端和服務(wù)器端之間通信的一個(gè)重要手段。Spring Boot是一個(gè)靈活的Web框架,它提供了與HTTP請(qǐng)求相關(guān)的許多特性和API。OkHttp是一個(gè)流行的HTTP客戶端庫,它提供了面向?qū)ο蟮腁PI,以便開發(fā)人員輕松地在其應(yīng)用中進(jìn)行HTTP請(qǐng)求

    2024年02月06日
    瀏覽(24)
  • Spring Boot - 結(jié)合 Redis 使用 Lua腳本

    在Spring Boot中整合Redis并使用Lua腳本: 添加Spring Boot和Redis的依賴: 首先,在Spring Boot項(xiàng)目的 pom.xml 文件中添加Spring Boot和Spring Data Redis的依賴: 配置Redis連接: 在 application.properties 或 application.yml 中配置Redis的連接信息,以及 redis 配置: RedisConfig.java

    2024年02月08日
    瀏覽(19)
  • Spring Boot進(jìn)階(94):從入門到精通:Spring Boot和Prometheus監(jiān)控系統(tǒng)的完美結(jié)合

    Spring Boot進(jìn)階(94):從入門到精通:Spring Boot和Prometheus監(jiān)控系統(tǒng)的完美結(jié)合

    ??隨著云原生技術(shù)的發(fā)展,監(jiān)控和度量也成為了不可或缺的一部分。Prometheus 是一款最近比較流行的開源時(shí)間序列數(shù)據(jù)庫,同時(shí)也是一種監(jiān)控方案。它具有極其靈活的查詢語言、自身的數(shù)據(jù)采集和存儲(chǔ)機(jī)制以及易于集成的特點(diǎn)。而 Spring Boot 是一款快速構(gòu)建應(yīng)用的框架,其提

    2024年02月08日
    瀏覽(39)
  • 構(gòu)建異步高并發(fā)服務(wù)器:Netty與Spring Boot的完美結(jié)合

    構(gòu)建異步高并發(fā)服務(wù)器:Netty與Spring Boot的完美結(jié)合

    「作者主頁」 :雪碧有白泡泡 「?jìng)€(gè)人網(wǎng)站」 :雪碧的個(gè)人網(wǎng)站 ChatGPT體驗(yàn)地址 在Java基礎(chǔ)中,IO流是一個(gè)重要操作,先上八股 BIO:傳統(tǒng)的IO,同步阻塞,一個(gè)連接一個(gè)線程。一般不怎么使用 AIO:JDK7引入的,異步非阻塞IO NIO:JDK1.4之后新的API,是多路復(fù)用,允許你一次性處理

    2024年02月03日
    瀏覽(35)
  • Netty示例教程:結(jié)合Spring Boot構(gòu)建客戶端/服務(wù)器通信

    當(dāng)涉及到在客戶端/服務(wù)器應(yīng)用程序中使用Netty進(jìn)行通信時(shí),以下是一個(gè)結(jié)合Spring Boot的示例教程,演示如何使用Netty構(gòu)建客戶端和服務(wù)器應(yīng)用程序。 簡(jiǎn)介 本教程將指導(dǎo)您如何使用Netty結(jié)合Spring Boot構(gòu)建客戶端和服務(wù)器應(yīng)用程序。通過Netty的可靠網(wǎng)絡(luò)通信功能,您可以輕松構(gòu)建高

    2024年02月15日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包