美文网首页SkyWalking
链路追踪系统Skywalking接入说明

链路追踪系统Skywalking接入说明

作者: 伊丽莎白菜 | 来源:发表于2023-02-16 14:57 被阅读0次

    应用修改

    引入依赖

    目的是实现手动获取链路信息、链路信息日志记录等扩展功能。

       <properties>
         <skywalking.version>8.14.0</skywalking.version>
       </properties> 
    
      <dependencies>
        <!-- 省略其他依赖 -->
        <dependency>
          <groupId>org.apache.skywalking</groupId>
          <artifactId>apm-toolkit-logback-1.x</artifactId>
          <version>${skywalking.version}</version>
        </dependency>
        <dependency>
           <groupId>org.apache.skywalking</groupId>
           <artifactId>apm-toolkit-trace</artifactId>
           <version>${skywalking.version}</version>
        </dependency>
      </dependencies>
    

    日志模板

    修改logback配置文件,以实现将traceIdspanId(segmentId)输出到日志。

    1. LOG_PATTERN

      <property name="LOG_PATTERN" value=
                  "|%d{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%replace(%X{tid}){'TID:',''}|%replace(%X{sw_ctx}){'(([\\w\\[\\-\\.:@/]*,){3})|(,-?\\d+\\])',''}|${APP_NAME}|%t|%C|%M|%L|%m%n"/>
      

      log4j2与logback的replace函数有细微差别,如有需要可查阅log4j2文档

    2. appender.encoder

              <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                  <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                      <Pattern>${LOG_PATTERN}</Pattern>
                  </layout>
                  <charset>UTF-8</charset>
              </encoder>
      

    注意事项

    1. 链路信息跨线程解决方案
      默认情况下,链路信息只能在线程内传递,如果应用代码中有跨线程逻辑,需要手动处理:

      • usage 1

            @TraceCrossThread
            public static class MyCallable<String> implements Callable<String> {
                @Override
                public String call() throws Exception {
                    return null;
                }
            }
            ExecutorService executorService = Executors.newFixedThreadPool(1);
            executorService.submit(new MyCallable());
        
      • usage 2

            @TraceCrossThread
            public static class MyRunnable implements Runnable {
        
                @Override
                public void run() {
                  // TODO
                }
            }
            ExecutorService executorService = Executors.newFixedThreadPool(1);
            executorService.submit(new MyRunnable());
        
      • usage 3

            ExecutorService executorService = Executors.newFixedThreadPool(1);
            executorService.submit(CallableWrapper.of(new Callable<String>() {
                @Override public String call() throws Exception {
                    return null;
                }
            }));
        
      • usage 4

            ExecutorService executorService = Executors.newFixedThreadPool(1);
            executorService.execute(RunnableWrapper.of(new Runnable() {
                @Override public void run() {
                    //TODO
                }
            }));
        
      • usage 5

            CompletableFuture.supplyAsync(SupplierWrapper.of(() -> {
                return "SupplierWrapper";
            })).thenApplyAsync(FunctionWrapper.of(f -> {
                return "FunctionWrapper";
            })).thenAcceptAsync(ConsumerWrapper.of(c -> {
                System.out.println("ConsumerWrapper");
            }));
        
    2. 在程序中手动获取链路信息

      String traceId = TraceContext.traceId();
      String segmentId = TraceContext.segmentId();
      String spanId = TraceContext.spanId();
      

    部署修改

    Dockerfile

    一般应用

    修改FROM基础镜像并修改WORKDIR,示例:

    FROM apache/skywalking-java-agent:8.14.0-java11
    MAINTAINER lms lmstech@163.com
    
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
    
    WORKDIR /
    ADD target/analysis-boot.jar analysis-boot.jar
    
    ENTRYPOINT ["java", "-Xmx98m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/analysis-boot.jar"]
    
    EXPOSE 8806
    

    spring-cloud-gateway

    skywalking-java-agent以插件的形式提供对不同框架的支持,而spring-cloud-gatewayspring-webflux插件是可选插件,需要手动引入。示例:

    FROM apache/skywalking-java-agent:8.14.0-java11
    MAINTAINER lms lmstech@163.com
    
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
    # 添加网关所需插件
    RUN cp /skywalking/agent/optional-plugins/apm-spring-cloud-gateway-3.x-plugin-8.14.0.jar /skywalking/agent/plugins/
    RUN cp /skywalking/agent/optional-plugins/apm-spring-webflux-5.x-plugin-8.14.0.jar /skywalking/agent/plugins/
    
    WORKDIR /
    ADD target/lms-gateway.jar lms-gateway.jar
    
    ENTRYPOINT ["java", "-Xmx98m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/lms-gateway.jar"]
    
    EXPOSE 9999
    

    部署脚本

    docker

    至少需要添加以下三个配置项,以环境变量形式注入:

    配置项 说明 推荐配置
    SW_AGENT_NAME 服务名称,格式为<group name>::<logic name> 项目名称::应用名词,如: lms::alarm-sender
    SW_AGENT_INSTANCE_NAME 实例(节点)名称 应用名词@部署地址,如: alarm-sender@192.168.0.1
    SW_AGENT_COLLECTOR_BACKEND_SERVICES skywalking后端地址 ip:port

    更多配置项参考官方文档

    示例:

    docker run -d -p 8806:8806 -e SW_AGENT_NAME=lms::analysis -e SW_AGENT_INSTANCE_NAME=analysis@192.168.0.1 -e SW_AGENT_COLLECTOR_BACKEND_SERVICES=114.252.40.238:11800 lms-anlysis:latest
    

    docker-compose

    示例:

    version: '3.1'
    services:
      analysis:
     build:
       context: ./
       dockerfile: Dockerfile
     image: analysis:latest
     container_name: lms-analysis
     ports:
       - 8806:8806
     volumes:
       - /app/logs/analysis:/logs
     environment:
       - SW_AGENT_NAME=lms::analysis
       - SW_AGENT_INSTANCE_NAME=analysis@192.168.0.1
       - SW_AGENT_COLLECTOR_BACKEND_SERVICES=114.252.40.238:11800
    

    相关文章

      网友评论

        本文标题:链路追踪系统Skywalking接入说明

        本文链接:https://www.haomeiwen.com/subject/hqppkdtx.html