SpringCloud使用SkyWalking实现分布式链路追踪1

news2024/9/21 2:36:46

文章目录

  • 一、MicrometerTracingBrave(Sleuth)链路追踪
    • 1、MicrometerTracingBrave和Zipkin的概论
    • 2、Docker搭建Zipkin服务
    • 3、MicrometerTracingBrave和Zipkin实现链路追踪
  • 二、SkyWaking服务的安装与使用
    • 1、SkyWalking的概论
    • 2、Java探针的环境搭建
    • 3、Java探针实现日志监控
    • 4、SkyWalking服务的搭建
  • 三、SpringCloud使用SkyWalking实现链路追踪
    • 1、SkyWalking的环境搭建
    • 2、SpringCloud项目接入SkyWalking的探针
    • 3、Docker搭建Elasticsearch8.7.1环境
  • 总结

一、MicrometerTracingBrave(Sleuth)链路追踪

因为SpringBoot3.0以上移除了Sleuth,迁移到了MicrometerTracingBrave,所以直接使用MicrometerTracingBrave即可。

1、MicrometerTracingBrave和Zipkin的概论

  1. 为了能够在分布式架构中快速定位问题,分布式链路追踪应运而生。将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
    常见的链路追踪技术有Sleuth、Zipkin、pinpoint、skywalking等。
  2. SpringCloudSleuth只负责产生监控数据,通过日志的方式展示出来,并没有提供可视化的UI界面。
    Sleuth相当于调用链监控工具的客户端,集成在各个微服务上,负责产生调用链监控数据。
  3. Sleuth核心概念
    1)Span:基本的工作单元,相当于链表中的一个节点,通过一个唯一ID标记它的开始、具体过程和结束。我们可以通过其中存储的开始和结束的时间戳来统计服务调用的耗时。除此之外还可以获取事件的名称、请求信息等。
    2)Trace:一系列的Span串联形成的一个树状结构,当请求到达系统的入口时就会创建一个唯一ID(traceId),唯一标识一条链路。这个traceId始终在服务之间传递,直到请求的返回,那么就可以使用这个traceId将整个请求串联起来,形成一条完整的链路。
    当调用链经过服务时,会记录TraceID和SpanID以及ParentSpanID。
    3)Annotation用来记录具体的事件。
    Client Sent,客户端发起一个请求的时间。
    Server Received,服务端接收到用户请求并开始处理的时间
    Server Sent,服务端将请求处理结果返回给客户端的时间。
    Client Received,客户端成功接收到来自服务器响应的时间戳。
  4. Zipkin4个核心的组件
    1)Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的 Span 格式,以支持后续的存储、分析、展示等功能。
    2)Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中
    3)RESTful API:API 组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
    4)UI:基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息
  5. zipkin优点:
    1)轻量级
    2)使用人数多,成熟
  6. zipkin缺点:
    1)侵入性
    2)功能简单
    3)欠缺APM报表能力(能力弱)
  7. zipkin致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。主要作用是收集并查看链路数据。

2、Docker搭建Zipkin服务

在之前安装过RabbitMQ的虚拟机中继续安装Zipkin

  1. 下载Zipkin镜像:docker pull openzipkin/zipkin
  2. 创建并启动Zipkin服务:docker run --name rabbit-zipkin -d -p 9411:9411 --link rabbitmq -e RABBIT_ADDRESSES=rabbitmq:5672 -e RABBIT_USER=guest -e RABBIT_PASSWORD=guest openzipkin/zipkin
  3. 浏览器访问Zipkin服务:http://192.168.126.11:9411
    在这里插入图片描述

3、MicrometerTracingBrave和Zipkin实现链路追踪

  1. 在gateway9527和payment8001和payment8002以及openfeign-order80项目的POM文件中添加tracing和zipkin依赖。

    <!-- brave和zipkin依赖项 -->
    <!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-observation 用于收集应用程序的度量数据-->
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-observation</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-tracing-bridge-brave 用于与分布式追踪工具Brave集成-->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing-bridge-brave</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.github.openfeign/feign-micrometer 用于收集客户端请求的度量数据-->
    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-micrometer</artifactId>
        <version>12.3</version>
    </dependency>
     <!-- RabbitMQ的消息驱动 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <!-- 用于将Brave跟踪数据报告到Zipkin跟踪系统的库上 -->
    <dependency>
        <groupId>io.zipkin.reporter2</groupId>
        <artifactId>zipkin-reporter-brave</artifactId>
    </dependency>
    
  2. 在gateway9527和payment8001和payment8002以及openfeign-order80项目的yml文件中添加和brave和zipkin的配置信息。

    spring:
      rabbitmq:
        host: 192.168.126.11
        port: 5672
        username: guest
        password: guest
    ## 设置zipkin和brave配置和tracing的日志信息
    logging.pattern.level: "%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]"
    management:
      zipkin:
        tracing:
          endpoint: http://192.168.126.11:9411/api/v2/spans
      tracing:
        sampling:
          # 采样率的概率,100%采样
          probability: 1.0
    
  3. gateway9527项目的YML文件配置跳过路由验证和Order的微服务路由

    org:
      my:
        jwt:
          # 跳过认证路由
          skipAuthUrls:
            - /user/login
            - /order/index
    
    spring:
      application:
        #设置应用名
        name: cloud-gateway
      cloud:
        gateway:
          # 路由配置
          routes:
            # 路由ID,没有固定规则但要求唯一,建议配合服务名
            - id: cloud-order-consumer
              # 匹配后提供服务的路由地址 (即目标服务地址) lb后跟提供服务的微服务的名字
              uri: lb://CLOUD-ORDER-CONSUMER
              # 断言会接收一个输入参数,返回一个布尔值结果
              predicates:
                # 路径相匹配的进行路由
                - Path=/order/*
    
  4. 测试链路追踪
    1)启动Eureka7001和Eureka7002和openfeign-order80和gateway9527和payment8001以及payment8002服务
    2)打开Centos7虚拟机,启动RabbitMQ和Zipkin服务
    3)在浏览器访问:http://localhost:9527/order/index
    请求成功后,在浏览器中打开Zipkin可视化界面:http://192.168.126.11:9411/
    在这里插入图片描述
    可以看到这时候Zipkin已经存在调用链的链路信息。

二、SkyWaking服务的安装与使用

1、SkyWalking的概论

  1. SkyWalking为服务提供了自动探针代理,将数据通过gRPC或者HTTP传输给后端平台,后端平台将数据存储在Storage中,并且分析数据将结果展示在UI中。
  2. SkyWalking的优点
    1)多种监控手段多语言自动探针,Java,.NET Core 和 Node.JS
    2)轻量高效,不需要大数据
    3)模块化,UI、存储、集群管理多种机制可选
    4)支持告警
    5)社区活跃
    6)无代码侵入
  3. 缺点:
    较为新兴,成熟度不够高
  4. SkyWalking的功能
    SkyWalking提供了非常完善的分布式链路追踪功能
    SkyWalking提供了非常完善的错误诊断功能
    SkyWalking提供了非常完善的实时链路大屏功能
    SkyWalking提供了非常完善的服务拓扑关系分析功能
    SkyWalking提供了非常完善的链路指标及错误告警功能
    SkyWalking提供了在线性能诊断功能
  5. SkyWalking的核心概念
    1)宿主应用:探针通过字节码技术引入应用。从探针的视角来看,应用是探针寄生的宿主。
    2)探针:收集从应用采集到的链路数据,并将其转换为SkyWalking能够识别的数据格式。
    3)RPC:宿主应用和平台后端之间的通信渠道。
    4)平台后端:支持数据聚合、分析和流处理,包括跟踪,指标和日志等。
    5)存储:通过开放的,可插拔的接口来存储SkyWalking的链路数据。 SkyWalking目前支持 ElasticSearch、H2、MySQL、TiDB、InfluxDB。
    6)UI:一个可定制的基于WEB的界面,允许SkyWalking终端用户管理和可视化SkyWalking的链路数据。
  6. JavaAgent(Java探针)提供了一种在加载字节码时对字节码进行修改的方式。通常使用ASM Javassist字节码工具修改class文件。
    javassist是一个库,实现ClassFileTransformer接口中的transform()方法。ClassFileTransformer 这个接口的目的就是在class被装载到JVM之前将class字节码转换掉,从而达到动态注入代码的目的。
  7. Java探针工具技术原理
    1)在JVM加载class二进制文件的时候,利用ASM动态的修改加载的class文件,在监控的方法前后添加计时器功能,用于计算监控方法耗时;
    2)将监控的相关方法 和 耗时及内部调用情况,按照顺序放入处理器;
    3)处理器利用栈先进后出的特点对方法调用先后顺序做处理,当一个请求处理结束后,将耗时方法轨迹和入参map输出到文件中;
    4)然后区分出耗时的业务,转化为xml格式进行解析和分析。
    即将.class文件进行修改,添加计时器功能;将监控方法的耗时及调用情况放入处理器;将后面的调用方法出栈后,将当前调用方法时间减去前面调用方法时间即可拿到耗时和获取轨迹;通过以上的数据进行分析,即可区分耗时数据。
  8. Java探针工具的功能
    1)支持方法执行耗时范围抓取设置,根据耗时范围抓取系统运行时出现在设置耗时范围的代码运行轨迹。
    2)支持抓取特定的代码配置,方便对配置的特定方法进行抓取,过滤出关系的代码执行耗时情况。
    3)支持APP层入口方法过滤,配置入口运行前的方法进行监控,相当于监控特有的方法耗时,进行方法专题分析。
    4)支持入口方法参数输出功能,方便跟踪耗时高的时候对应的入参数。
    5)提供WEB页面展示接口耗时展示、代码调用关系图展示、方法耗时百分比展示、可疑方法凸显功能。

2、Java探针的环境搭建

  1. 创建helloagent项目
    在这里插入图片描述

  2. 在helloagent项目的POM文件中添加如下依赖

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>3.0.5</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.zzx</groupId>
        <artifactId>helloagent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <properties>
            <java.version>17</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    	<build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    
    
  3. 在com.zzx.controller包下创建HelloController类,代码如下

    package com.zzx.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @Slf4j
    public class HelloController {
    
        @GetMapping("/hello")
        public String hello() {
            return "hello JavaAgent";
        }
    }
    
    
  4. 启动helloagent项目后,在浏览器访问:localhost:8080/hello

  5. 对helloagent项目进行打包,即先打开maven的窗口,然后找到下图的packeage双击,等待打包,出现Success即打包成功。
    在这里插入图片描述
    打完包后,在target目录中会有一个以项目命名的 jar包文件以及控制台出现Success。

  6. 因为项目下target目录在项目没有显示,此时可以在项目的文件夹中去找
    在这里插入图片描述

  7. 打开项目文件夹下的target文件夹,将打包后的jar包复制到一个文件夹中。
    在这里插入图片描述

3、Java探针实现日志监控

  1. 创建javaagent项目
    在这里插入图片描述

  2. 在javaagent项目的POM文件中添加如下依赖

    <?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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.zzx</groupId>
        <artifactId>javaagent</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>17</maven.compiler.source>
            <maven.compiler.target>17</maven.compiler.target>
        </properties>
        <dependencies>
            <!-- javassist是一个处理Java字节码的类库      -->
            <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.29.2-GA</version>
            </dependency>
        </dependencies>
    
    
        <build>
            <finalName>javaagent</finalName>
            <plugins>
                <!--
                META-INF 下 MANIFEST.MF 文件 内容
                Manifest-Version: 1.0
                Premain-Class: com.jenson.TestAgent
                下面Maven插件可以自动实现
                -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.0.0</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <manifestEntries>
                                            <Premain-Class>com.zzx.TestAgent</Premain-Class>
                                        </manifestEntries>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    
  3. 在javaagent项目的com.zzx包下,创建修改.class文件的探针实现类TestTransformer ,代码如下

    package com.zzx;
    
    import javassist.*;
    
    import java.io.IOException;
    import java.lang.instrument.ClassFileTransformer;
    import java.lang.instrument.IllegalClassFormatException;
    import java.security.ProtectionDomain;
    
    public class TestTransformer implements ClassFileTransformer {
        private final String CLASS_NAME = "com.zzx.controller.HelloController";
        private final String METHOD_NAME = "hello";
        @Override
        public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
            // 1.获取类名字
            String name = className.replace("/",".");
            // 2.判断是否是我要修改的类
            if(name.equals(CLASS_NAME)){
                // 3.javassist是一个处理java字节码的类库
                //java字节码存储在一个class file的二进制文件里
                //每个class文件包含一个java类或接口
                //java ssist.ctclass 就是class文件的抽象表示
                CtClass ctClass;
                try {
                    // 4.获取helloController类搜索路径
                    ctClass = ClassPool.getDefault().get(name);
                    System.out.println("CtClass is OK");
                    // 5.获取类中的方法
                    CtMethod method = ctClass.getDeclaredMethod(METHOD_NAME);
                    System.out.println("CtMethod is OK");
                    method.insertBefore("System.out.println(\"字节码添加成功,打印日志\");");
                    return ctClass.toBytecode();
                } catch (NotFoundException e) {
                    e.printStackTrace();
                } catch (CannotCompileException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return null;
        }
    }
    
    
  4. 在javaagent项目的com.zzx包下,创建探针类TestAgent,代码如下

    package com.zzx;
    
    import java.lang.instrument.Instrumentation;
    
    /**
     * 探针类
     */
    public class TestAgent {
        /**
         * 在main方法运行前,与main方法运行于同一JVM中
         *
         * @param agentArgs agentArgs是premain函数得到的程序参数,随同"-javaagent"一同传入,
         *          与main函数不同的是,该参数是一个字符串而不是一个字符串数组,
         *          如果程序参数有多个,程序将自行解析这个字符串
         * @param inst    一个java.lang.instrument.Instrumentation实例,由JVM自动传入,
         *          java.lang.instrument.Instrumentation是instrument包中的一个接口,
         *          也是核心部分,集中了其中几乎所有的功能方法,例如类定义的转换和操作
         */
        public static void premain(String agentArgs, Instrumentation inst){
            System.out.println("********* premain 执行了 **********");
            System.out.println("agentArgs:"+agentArgs);
            inst.addTransformer(new TestTransformer());
        }
    }
    
    
  5. 将实现探针功能的类javaagent进行打包
    在这里插入图片描述

  6. 因为项目下target目录在项目没有显示,此时可以在项目的文件夹中去找
    在这里插入图片描述
    打开项目文件夹下的target文件夹,复制下面的第一个jar包到刚刚存放helloagent.jar的文件夹下。
    在这里插入图片描述

  7. 在存放两个jar包的文件夹的目录那里,输入cmd回车,进入命令行。
    在这里插入图片描述

  8. 测试探针
    1)进入命令行后,输入:java -javaagent:javaagent.jar -jar helloagent-0.0.1-SNAPSHOT.jar
    在这里插入图片描述
    在这里插入图片描述
    2)在浏览器中访问:localhost:8080/hello
    在这里插入图片描述
    即在访问后,会打印字节码添加成功,打印日志这个字符串。代表JAVA探针修改.class文件成功。

4、SkyWalking服务的搭建

  1. 下载9.4.0版本的SkyWalking:https://dlcdn.apache.org/skywalking/9.4.0/apache-skywalking-apm-9.4.0.tar.gz

  2. 使用mobax上传功能,将Linux版本的JDK和SkyWalking上传到opt目录下
    在这里插入图片描述

  3. 在opt目录中,输入将JDK解压到/usr/local的命令:tar -zxvf jdk-11.0.15.1_linux-x64_bin.tar.gz -C /usr/local/

  4. 进入到/usr/local目录下,获取JDK名字,再编辑profile文件:vim /etc/profile,在文件底部添加如下配置:

    export JAVA_HOME=/usr/local/jdk-11.0.15.1
    export PATH=$PATH:$JAVA_HOME/bin
    
    • 生效profile文件:source /etc/profile
    • 查看jdk的版本号:java -version
  5. 到opt目录下,在命令行中输入命令解压SkyWalking到/usr/local目录中:tar -zxvf apache-skywalking-apm-9.4.0.tar.gz -C /usr/local/
    SkyWalking解压后的目录:

    • webapp: Ul前端(web 监控页面)的jar包和配置文件
    • oap-libs:后台应用的jar包,以及它的依赖jar包
    • config:启动后台应用程序的配置文件,是使用的各种配置
    • bin:各种启动脚本,一般使用脚本startup.*来启动web页面和对应的后台应用
    • agent:代理服务jar包
  6. 修改web的yml文件的端口号信息:vim /usr/local/apache-skywalking-apm-bin/webapp/application.yml
    在这里插入图片描述

  7. 启动SkyWalking服务

    • 到bin目录下:cd /usr/local/apache-skywalking-apm-bin/bin
    • 启动SkyWalking:./startup.sh
  8. 在浏览器中访问:http://192.168.126.11:8068/
    在这里插入图片描述

三、SpringCloud使用SkyWalking实现链路追踪

1、SkyWalking的环境搭建

  1. 在体验完Java探针后,打开之前的cloud项目,复制cloud-consumer-openfeign-order80,粘贴到cloud父工程中,并修改名字为cloud-consumer-openfeign-skywalking-order80
    在这里插入图片描述

  2. 修改cloud-consumer-openfeign-skywalking-order80项目的POM文件的项目名
    在这里插入图片描述

  3. 在cloud父工程的POM文件中手动添加该子项目
    在这里插入图片描述

  4. 修改主启动类的名字
    在这里插入图片描述

  5. 移除cloud-consumer-openfeign-skywalking-order80项目的POM文件中之前的brave和zipkin的依赖
    在这里插入图片描述

  6. 此时再复制cloud-provider-payment8001项目,粘贴到cloud父项目中,改名字为cloud-provider-skywalking-payment8001
    跟上面的cloud-consumer-openfeign-skywalking-order80修改步骤相同。

  7. 最后,在cloud-consumer-openfeign-skywalking-order80项目的YML文件中添加如下配置

    spring:
      main:
        #允许存在多个Feign调用相同Service的接口
        allow-bean-definition-overriding: true
    

    即允许多个接口使用@FeignClient调用同一个服务。

2、SpringCloud项目接入SkyWalking的探针

  1. 下载JavaAgent:https://dlcdn.apache.org/skywalking/java-agent/8.15.0/apache-skywalking-java-agent-8.15.0.tgz

  2. 直接在文件夹中解压JavaAgent到当前文件即可,然后剪切该文件夹到cloud父工程即可。

  3. 编辑两个SkyWalking项目Configuration
    在这里插入图片描述

  4. 编辑SkyWalkingOrderFeignMain80项目Configuration的VM options,代码如下

    -javaagent:D:\CODE\IDEA\cloud\skywalking-agent\skywalking-agent.jar
    -DSW_AGENT_NAME=consumer-order
    -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.126.11:11800
    

    在这里插入图片描述

  5. 编辑SkyWalkingPaymentMain8001项目Configuration的VM options,代码如下

    -javaagent:D:\CODE\IDEA\cloud\skywalking-agent\skywalking-agent.jar
    -DSW_AGENT_NAME=provider-payment
    -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.126.11:11800
    

    在这里插入图片描述

此时-DSW_AGENT_NAME是指服务名字(自定义),只需要保证唯一性即可。

  1. 测试
    1)启动Eureka7001和Eureka7002和SkyWalking的服务提供者和消费者
    2)在浏览器访问:192.168.126.11:8068
    在这里插入图片描述

3、Docker搭建Elasticsearch8.7.1环境

  1. 下载elasticsearch:docker pull elasticsearch:8.7.1

  2. 创建并启动Elasticsearch:docker run --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --name='es' -d elasticsearch:8.7.1

    • -d:守护进程运行
    • ES_JAVA_OPTS:设置堆内存
    • discovery.type:设置单节点启动
  3. 拷贝docker下的es容器的elasticsearch.yml文件:docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml .

  4. 修改拷贝到当前目录下的elasticsearch.yml文件:vim elasticsearch.yml,配置如下

    cluster.name: "docker-cluster"
    network.host: 0.0.0.0
    
    #----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
    #
    # The following settings, TLS certificates, and keys have been automatically
    # generated to configure Elasticsearch security features on 10-05-2023 15:57:14
    #
    # --------------------------------------------------------------------------------
    
    # Enable security features
    xpack.security.enabled: false
    
    xpack.security.enrollment.enabled: false
    
    # Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
    xpack.security.http.ssl:
      enabled: false
      keystore.path: certs/http.p12
    
    # Enable encryption and mutual authentication between cluster nodes
    xpack.security.transport.ssl:
      enabled: false
      verification_mode: certificate
      keystore.path: certs/transport.p12
      truststore.path: certs/transport.p12
    #----------------------- END SECURITY AUTO CONFIGURATION -------------------------
    
    
    
  5. 将修改的elasticsearch.yml文件拷贝到es容器下存放elasticsearch.yml的目录下:docker cp elasticsearch.yml es:/usr/share/elasticsearch/config/

  6. 重启ES服务:docker restart es

  7. 在浏览器上访问ES服务:192.168.126.11:9200
    在这里插入图片描述

总结

  1. 因为SpringBoot3.0以上移除了Sleuth,迁移到了MicrometerTracingBrave,所以直接使用MicrometerTracingBrave即可。
    1)MicrometerTracing组件主要解决链路追踪的问题。
    MicrometerTracingBrave只负责产生监控数据,通过日志的方式展示出来,并没有提供可视化的UI界面。
    MicrometerTracingBrave核心概念,有Span、Trace、Annotation。Span是微服务调用链的节点;Brave是微服务调用链的入口节点;Annotation是微服务调用链用来记录具体事件的。
    2)实现MicrometerTracingBrave的链路追踪,需要在使用的微服务项目中导入Brave和Zipkin依赖、在YML文件中配置Brave和Zipkin,配置Brave的采样率和日志等级以及rabbimq等配置信息。而且需要使用虚拟机,安装rabbitmq和zipkin服务。
  2. 1)zipkin稳定,但是功能简单,入侵性强;但是SkyWalking功能强,但是不够稳定,无代码入侵。
    SkyWalking的主要作用是链路追踪。
    2)JavaAgent(Java探针)提供了一种在加载字节码时对字节码进行修改的方式。
    即将.class文件进行修改,添加计时器功能;将监控方法的耗时及调用情况放入处理器;将后面的调用方法出栈后,将当前调用方法时间减去前面调用方法时间即可拿到耗时和获取轨迹;通过以上的数据进行分析,即可区分耗时数据。
    3)Java探针的使用,需要在实现探针的项目的POM文件中导入javassist依赖,也就是能处理java字节码的类库依赖,并且需要指定Premain类的路径,也就是在premain方法的类的路径。
    需要将原先的项目打成jar包;然后该编写探针类,获取需要修改的类或类的方法,进行修改.class文件。
    在命令行中使用指定的探针语法即可启动项目并且实现无侵入修改原先的项目的功能。
  3. SpringCloud使用SkyWalking实现分布式链路追踪,首先需要去官网下载SkyWalking的压缩包,在Linux虚拟机中进行安装部署SkyWalking服务;再去官网下载JavaAgent压缩包,解压即可使用;在需要进行调用链的链路追踪的项目中进行Edit Configuration,然后进行指定JavaAgent的路径和自定义服务名(确保唯一)以及指定Agent的连接地址跟端口。然后即可在浏览器中打开SkyWalking的界面。
  4. 1)SkyWalking官方推荐使用ElasticSearch;
    2)使用docker快速搭建Elasticsearch,安装并启动docker,然后拉取Elasticsearch镜像,然后启动ES,修改配置文件即可使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty——介绍和maxContentLength配置

官网 介绍 Netty框架的设计思路是基于NIO的事件驱动编程模型&#xff0c;核心组件包括&#xff1a; Channel&#xff1a;通道&#xff0c;负责网络数据的读写操作&#xff1b; EventLoop&#xff1a;事件循环&#xff0c;处理I/O事件和用户自定义事件&#xff1b; ChannelFut…

【子集树】输出一个序列的子序列

【子集树】输出一个序列的子序列 给一个序列 1 2 3 输出序列的子集 1 2 3 12 13 23 123 如何实现&#xff1f; 由上可以看出 类似于全排列 如何用全排列 实现子集输出&#xff1f; 也就是子集树&#xff1f; #include<iostream>using namespace std;const int N 1e5…

【C++技能树】令常规运算符用在类上 --类的六个成员函数II

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0.运算符重载1.赋值运算符 重载2.比较运算符 重载3.比较运算符 ! 重载4.比较运算符 < 重载5.比较运算符 < 重载6. 比较…

图片处理软件:分享6款非常实用的图片处理工具

目录 一、移动端 1、snapseed 2、一键抠图 3、pixlr 二、电脑端 1、图片编辑助手 2.GIMP 3、photopea 今天给大家分享6款非常实用的图片处理工具&#xff0c;其中包含移动端和电脑端&#xff0c;每一款都非常实用&#xff0c;希望对大家能有所帮助&#xff01; 一、移…

《编程思维与实践》1059.计算a的n次方的大整数

《编程思维与实践》1059.计算a的n次方的大整数 题目 思路 高精度的问题统一的解决思路是用一个数组去存大整数的每一位数,运算转化为对数组的操作. 可以从个位开始存(逆序),也可以从最高位开始存(顺序),以处理方便为主要考虑因素. 同时可以将大整数定义为一个结构体,包含位数,…

软件架构:理解分析三层结构观点

三层结构的简单描述及优点   三层体系结构&#xff0c;即用户层、应用层和数据库服务器。用户层主要指用户界面&#xff0c;它要求尽可能的简单&#xff0c;使最终用户不需要进行任何培训就能方便地访问信息&#xff1b;第二层就是应用服务器&#xff0c;也就是常说的中间件&…

webpack: 4 loader汇总(style-loader等)

所有的loader必须匹配规则&#xff0c;否则不生效 配置文件中&#xff0c;module中rules的use执行顺序是从后往前执行 url-loader 用于将文件转换为base64 URI的webpack加载程序。 options limit limit指定文件大小&#xff0c;小于limit的图片不会生成图片以base64格式被引入…

客观地说,应该看一看 Web3.0 了

武术圈有名言&#xff1a;“八极加劈挂&#xff0c;神鬼都害怕”。要是 Web3.0AGI 的话&#xff0c;世界将会变成什么样子&#xff1f; 数科星球原创作者丨苑晶编辑丨大兔 Web3.0 的价值开始受到重视&#xff0c;在最近&#xff0c;来自香港的好消息再次带火了这个领域的热度。…

VMware NSX-T Data Center 3.2.3 - 数据中心网络全栈虚拟化

VMware NSX-T Data Center 3.2.3 - 数据中心网络全栈虚拟化 重要更新&#xff1a;修复 136 个 bug。 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-nsx-t-3/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VMwa…

ChatGPT 接入飞书教程,创建自己的聊天机器人

ChatGPT 接入飞书教程,创建自己的聊天机器人 一、飞书进入开发者平台。点击创建应用。二、打开Aircode,点击创建应用,上面输入名字,下面选择Node.js v16三、配置环境,点击Environments,创建四个变量,全部要大写本教程收集于: AIGC从入门到精通教程 首先,准备三个账号…

FPGA实现MPEG2视频压缩PCIe传输 提供软硬件工程源码和技术支持

目录 1、前言2、MPEG2视频压缩实现3、我已有的FPGA图像视频编解码方案4、我已有的PCIE方案5、MPEG2视频压缩PCIE传输设计方案FPGA硬件设计软件设计 6、Vivado工程详解7、Linux下的XDMA驱动安装8、上板调试验证9、福利&#xff1a;工程代码的获取 1、前言 MJPEG、MPEG2、MPEG4、…

IOS开发指南之storyboard中控件与变量关联及控件事件与方法关联

1.创建IOS工程 2.选择 interface为storyboard,语言选择Objective-C 打开工程后可看到工程默认添加了两个storyboard文件 Main.storyboard为应用主场景,LaunchScreen为启动屏幕场景 3.双击Main.storyboard打开设计窗口,并拖放控件布局如下 4.为控件添加关联变量与(IBOutlet与I…

身高测量仪红外传感测距模块应用方案 WTU201F2 B004 低功耗

​身高测量仪被广泛用于医疗、教育等领域&#xff0c;而红外测距模块在身高测量仪中的应用则成为了一种新的技术手段。红外测距模块是基于红外线技术的一种测距器件&#xff0c;在身高测量仪中&#xff0c;红外测距模块能够精准地测量出人体的高度。与传统的测量方法相比&#…

品牌如何从零开始运营抖音,带你全面了解

随着短视频逐渐深入我们的生活&#xff0c;巨大的流量吸引了众多人群。很多人因此也想开始做抖音&#xff0c;很多品牌却因为内容制作流程复杂&#xff0c;不知从何入门。今天&#xff0c;和大家分享下品牌如何从零开始运营抖音。 其实在开始一件事情之前&#xff0c;最主要的是…

智能感测离子风棒,托起中国“智”造新高度

智能感测离子风棒采用市面上较为少见的内置感测型离子发生器&#xff0c;能够对外界环境电荷进行快速平衡。该设备智能控制&#xff0c;无需人工点检&#xff0c;达到全自动静电消除并具备异常报警功能。能让ESD管理者或使用者先一步发现问题&#xff0c;快速准确的解决问题 。…

Shell脚本例题

1.计算从1到100所有整数的和 2.提示用户输入一个小于100的整数&#xff0c;并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和、奇数和 4.用户名存放在users.txt文件中&#xff0c;每行一个&#xff0c;判断文件里的用户是否存在&#xff0c;若该用户存在&#xf…

京喜APP - 图片库优化 | 京东云技术团队

作者&#xff1a;京东零售 何骁 介绍 京喜APP早期开发主要是快速原生化迭代替代原有H5&#xff0c;提高用户体验&#xff0c;在这期间也积累了不少性能问题。之后我们开始进行一些性能优化相关的工作&#xff0c;本文主要是介绍京喜图片库相关优化策略以及关于图片相关的一些…

es 7.0.8 常用DSL语句进行索引crud操作(windows es7.x)

一 es7.x的核心 1.1 es的核心概念 1.ES 里的 Index 可以看做一个库(名称必须为小写)&#xff0c;而 Types 相当于表&#xff0c;Documents 则相当于表的行。 2.这里 Types 的概念已经被逐渐弱化&#xff0c;Elasticsearch 6.X 中&#xff0c;一个 index 下已经只能包含一个…

postgresql数据库linux centos7 安装

简介 &#xff08;百度百科&#xff09; PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;是以加州大学计算机系开发的POSTGRES&#xff0c;4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只…

Linux基础学习---1、目录结构、Vim编辑器、网络配置和远程登录

1、Linux目录结构 1.1 /bin 是Binary的缩写&#xff0c;这个目录存放着最经常使用的命令。1.2 /sbin s是Super User的意思&#xff0c;这里存放的是系统管理员使用的系统管理程序。1.3 /home 存放普通用户的主目录&#xff0c;在Linux中每个用户都有一个自己的目录&#xff…