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

SpringCloud集成Micrometer Tracing的代碼工程

 更新時(shí)間:2024年12月04日 08:25:33   作者:HBLOG  
Micrometer Tracing 是一個(gè)用于微服務(wù)架構(gòu)的追蹤庫,它提供了一種簡單而強(qiáng)大的方式來收集和報(bào)告分布式系統(tǒng)中的性能和調(diào)用鏈信息,Micrometer Tracing 旨在幫助開發(fā)者和運(yùn)維人員理解微服務(wù)之間的交互,本文給大家介紹了如何在 Spring Cloud 集成 Micrometer Tracing

1.什么是 Micrometer Tracing?

Micrometer Tracing 是一個(gè)用于微服務(wù)架構(gòu)的追蹤庫,它提供了一種簡單而強(qiáng)大的方式來收集和報(bào)告分布式系統(tǒng)中的性能和調(diào)用鏈信息。它是 Micrometer 庫的一部分,Micrometer 是一個(gè)用于應(yīng)用程序監(jiān)控的指標(biāo)收集工具,支持多種監(jiān)控系統(tǒng),如 Prometheus、Graphite 和 InfluxDB。

Micrometer Tracing 旨在幫助開發(fā)者和運(yùn)維人員理解微服務(wù)之間的交互,識(shí)別性能瓶頸,并提高系統(tǒng)的可觀察性。通過追蹤請(qǐng)求的生命周期,Micrometer Tracing 可以提供詳細(xì)的調(diào)用鏈信息,幫助團(tuán)隊(duì)快速定位問題。

Micrometer Tracing 的優(yōu)勢(shì)

  • 簡單易用:Micrometer Tracing 提供了簡單的注解和 API,使得在應(yīng)用程序中添加追蹤變得非常容易。
  • 與 Micrometer 生態(tài)系統(tǒng)集成:作為 Micrometer 的一部分,Micrometer Tracing 可以與其他監(jiān)控工具無縫集成,提供全面的監(jiān)控解決方案。
  • 靈活的采樣策略:用戶可以根據(jù)需求自定義采樣策略,以平衡追蹤的詳細(xì)程度和性能開銷。
  • 豐富的上下文信息:通過 Tags 和 Span,用戶可以獲得豐富的上下文信息,幫助快速定位問題。

Micrometer Tracing 的核心概念

  • Span:Span 是追蹤的基本單位,表示一個(gè)操作的開始和結(jié)束。每個(gè) Span 都有一個(gè)唯一的標(biāo)識(shí)符(Span ID),并且可以包含父 Span 的信息,從而形成一個(gè)調(diào)用鏈。

  • Trace:Trace 是由多個(gè) Span 組成的,表示一個(gè)請(qǐng)求在系統(tǒng)中的完整生命周期。每個(gè) Trace 都有一個(gè)唯一的標(biāo)識(shí)符(Trace ID),可以用來追蹤整個(gè)請(qǐng)求的路徑。

  • Tags:Tags 是附加到 Span 上的鍵值對(duì),用于提供額外的上下文信息,例如服務(wù)名稱、方法名稱、狀態(tài)碼等。Tags 可以幫助用戶更好地理解和分析追蹤數(shù)據(jù)。

  • Sampler:Sampler 決定哪些請(qǐng)求將被追蹤??梢愿鶕?jù)請(qǐng)求的特征(如請(qǐng)求類型、服務(wù)名稱等)配置采樣策略,以減少性能開銷。

2.環(huán)境搭建

pull images

docker pull openzipkin/zipkin

run docker

docker run -d -p 9411:9411 openzipkin/zipkin

web UI

http://localhost:9411

3.代碼工程

實(shí)驗(yàn)?zāi)繕?biāo)

在 Spring Cloud 應(yīng)用程序中使用 Micrometer Tracing

添加依賴

pom.xml 中添加 Micrometer Tracing 和 Spring Cloud Sleuth 的依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-sleuth</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-otel</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-zipkin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

配置類

package com.et.config;

import io.micrometer.observation.ObservationRegistry;
import io.micrometer.observation.aop.ObservedAspect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ObservedAspectConfiguration {

    @Bean
    public ObservedAspect observedAspect(ObservationRegistry observationRegistry) {
        observationRegistry.observationConfig().observationHandler(new SimpleLoggingHandler());
        return new ObservedAspect(observationRegistry);
    }
}

package com.et.config;

import io.micrometer.observation.Observation;
import io.micrometer.observation.ObservationHandler;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SimpleLoggingHandler  implements ObservationHandler<Observation.Context> {
    @Override
    public void onStart(Observation.Context context) {
        ObservationHandler.super.onStart(context);
        log.info("Starting context {} ", context);
    }

    @Override
    public void onError(Observation.Context context) {
        ObservationHandler.super.onError(context);
    }

    @Override
    public void onEvent(Observation.Event event, Observation.Context context) {
        ObservationHandler.super.onEvent(event, context);
    }

    @Override
    public void onScopeOpened(Observation.Context context) {
        ObservationHandler.super.onScopeOpened(context);
    }

    @Override
    public void onScopeClosed(Observation.Context context) {
        ObservationHandler.super.onScopeClosed(context);
    }

    @Override
    public void onScopeReset(Observation.Context context) {
        ObservationHandler.super.onScopeReset(context);
    }

    @Override
    public void onStop(Observation.Context context) {

        ObservationHandler.super.onStop(context);
        log.info("Stopping context {} ", context);
    }

    @Override
    public boolean supportsContext(Observation.Context context) {
        return true;
    }
}

為了使tracking的newspan注解生效,需要額外配置如下

package com.et.config;

import io.micrometer.tracing.Tracer;
import io.micrometer.tracing.annotation.DefaultNewSpanParser;
import io.micrometer.tracing.annotation.ImperativeMethodInvocationProcessor;
import io.micrometer.tracing.annotation.MethodInvocationProcessor;
import io.micrometer.tracing.annotation.NewSpanParser;
import io.micrometer.tracing.annotation.SpanAspect;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class SpanAspectConfiguration {

  @Bean
  NewSpanParser newSpanParser() {
    return new DefaultNewSpanParser();
  }

  @Bean
  MethodInvocationProcessor methodInvocationProcessor(
      NewSpanParser newSpanParser, Tracer tracer, BeanFactory beanFactory) {
    return new ImperativeMethodInvocationProcessor(
        newSpanParser, tracer, beanFactory::getBean, beanFactory::getBean);
  }

  @Bean
  SpanAspect spanAspect(MethodInvocationProcessor methodInvocationProcessor) {
    return new SpanAspect(methodInvocationProcessor);
  }
}

啟用 Tracing:

在 Spring Boot 的主類上添加 @EnableAspectJAutoProxy 注解,以啟用 AOP 支持:

package com.et;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@SpringBootApplication
@EnableAspectJAutoProxy

public class SpringCloudApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudApplication.class, args);
    }
}

使用注解:

在需要追蹤的方法上使用 @NewSpan 注解,以創(chuàng)建新的 Span。例如:

package com.et.service;

import io.micrometer.tracing.annotation.NewSpan;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author liuhaihua
 * @version 1.0
 * @ClassName DemoService
 * @Description todo
 * @date 2024/12/03/ 17:37
 */
@Service
@Slf4j
public class DemoService {
    @NewSpan
    public String sayHello(String name){
        log.info("hello "+name);
        return "hello "+name;
    }
}

controller

package com.et.controller;

import io.micrometer.tracing.SpanName;
import io.micrometer.tracing.annotation.NewSpan;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j

public class MyController {
    @Autowired
    com.et.service.DemoService demoService;
    @GetMapping("/hello")
    @NewSpan
    @SpanName("customSpanName")
    public String hello() {
        log.info("into controller ");
        return demoService.sayHello("jack");
    }
}

application.yml

spring.application.name: demo-tracing

server:
  port: 8088
  servlet:
    context-path: /app
logging.pattern.level: "%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]"
management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      probability: 1.0

以上只是一些關(guān)鍵代碼

4.測(cè)試

啟動(dòng)Spring Cloud應(yīng)用

訪問rest api

訪問http://127.0.0.1:8088/app/hello,控制臺(tái)輸出日志

2024-12-03T18:18:30.845+08:00 INFO [demo-tracing,d0f7eb048278e2374cf99e898d8cffb9,59da48fe2de9af72] 13304 --- [demo-tracing] [nio-8088-exec-4] [d0f7eb048278e2374cf99e898d8cffb9-59da48fe2de9af72] com.et.controller.MyController : into controller 
2024-12-03T18:18:30.846+08:00 INFO [demo-tracing,d0f7eb048278e2374cf99e898d8cffb9,62a3992306bc6344] 13304 --- [demo-tracing] [nio-8088-exec-4] [d0f7eb048278e2374cf99e898d8cffb9-62a3992306bc6344] com.et.service.DemoService : hello jack

查看追蹤數(shù)據(jù):

Micrometer Tracing 會(huì)自動(dòng)收集追蹤數(shù)據(jù),并將其發(fā)送到配置的zipkin。你可以使用這些數(shù)據(jù)來分析請(qǐng)求的性能和調(diào)用鏈。

5.結(jié)論

Micrometer Tracing 是一個(gè)強(qiáng)大的工具,可以幫助開發(fā)者和運(yùn)維人員更好地理解和監(jiān)控微服務(wù)架構(gòu)中的請(qǐng)求流。通過簡單的配置和使用,Micrometer Tracing 可以顯著提高系統(tǒng)的可觀察性,幫助團(tuán)隊(duì)快速識(shí)別和解決性能問題。在現(xiàn)代微服務(wù)架構(gòu)中,采用 Micrometer Tracing 是提升應(yīng)用程序性能和可靠性的有效手段。

以上就是SpringCloud集成Micrometer Tracing的代碼工程的詳細(xì)內(nèi)容,更多關(guān)于SpringCloud集成Micrometer Tracing的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Unity&Springboot實(shí)現(xiàn)本地登陸驗(yàn)證

    Unity&Springboot實(shí)現(xiàn)本地登陸驗(yàn)證

    本文主要介紹了Unity&Springboot服務(wù)器/本地登陸驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 接口重試的7種常用方案詳細(xì)介紹

    接口重試的7種常用方案詳細(xì)介紹

    這篇文章主要為大家詳細(xì)介紹了接口重試的7種常用方案,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以根據(jù)需求選擇
    2025-03-03
  • SpringData @Query和@Modifying注解原理解析

    SpringData @Query和@Modifying注解原理解析

    這篇文章主要介紹了SpringData @Query和@Modifying注解原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java單例五種實(shí)現(xiàn)模式解析

    java單例五種實(shí)現(xiàn)模式解析

    這篇文章主要介紹了java單例五種實(shí)現(xiàn)模式解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 不可不知道的10個(gè)java謊言

    不可不知道的10個(gè)java謊言

    這篇文章主要為大家詳細(xì)介紹了不可不知道的10個(gè)java謊言,大家一定要謹(jǐn)慎,需要了解的朋友可以參考一下
    2016-09-09
  • Java高級(jí)架構(gòu)之FastDFS分布式文件集群詳解

    Java高級(jí)架構(gòu)之FastDFS分布式文件集群詳解

    這篇文章主要介紹了Java高級(jí)架構(gòu)之FastDFS分布式文件集群詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • idea進(jìn)程結(jié)束但是項(xiàng)目頁面正常運(yùn)行怎么辦

    idea進(jìn)程結(jié)束但是項(xiàng)目頁面正常運(yùn)行怎么辦

    這篇文章主要介紹了idea進(jìn)程結(jié)束但是項(xiàng)目頁面正常運(yùn)行怎么辦,很多朋友遇到這樣的情況不知道該如何解決了,下面小編給大家?guī)砹薸dea進(jìn)程結(jié)束但是項(xiàng)目頁面正常運(yùn)行的解決方法,需要的朋友可以參考下
    2023-03-03
  • Java中File類方法詳解以及實(shí)踐

    Java中File類方法詳解以及實(shí)踐

    Java File類的功能非常強(qiáng)大,利用java基本上可以對(duì)文件進(jìn)行所有操作,下面這篇文章主要給大家介紹了關(guān)于Java中File類方法以及實(shí)踐的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java編程接口詳細(xì)

    Java編程接口詳細(xì)

    這篇文章主要小編主要給大家講解的是Java編程中的接口,文章會(huì)從抽象類和抽象方法開始展開內(nèi)容,感興趣的小伙伴可以參考下面文章的具體內(nèi)容
    2021-10-10
  • Java 遞歸遍歷實(shí)現(xiàn)linux tree命令方式

    Java 遞歸遍歷實(shí)現(xiàn)linux tree命令方式

    這篇文章主要介紹了Java 遞歸遍歷實(shí)現(xiàn)linux tree命令方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論