首页 > 其他分享 >链路追踪系统Skywalking接入说明

链路追踪系统Skywalking接入说明

时间:2023-05-09 11:36:25浏览次数:51  
标签:SW lms jar analysis AGENT 链路 Skywalking skywalking 追踪

目录

应用修改

引入依赖

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

   <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>

或者直接引入com.lms:common-log:

   <properties>
     <lms.version>main-4.0.0</lms.version>
   </properties> 
  <dependencies>
   <!-- 省略其他依赖 -->
   <dependency>
      <groupId>com.lms</groupId>
      <artifactId>common-log</artifactId>
      <version>${lms.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. 在程序中手动获取链路信息

    // traceId在整个链路中唯一,一个trace包含一个或多个segment
    String traceId = TraceContext.traceId();
    // segmentId在单个进程内唯一,一个segment包含一个或多个span
    String segmentId = TraceContext.segmentId();
    // span包含在segment内,通常表示一个线程或一个组件(如spring-mvc,mq,jdbc等)
    String spanId = TraceContext.spanId();
    
  2. 链路信息跨线程解决方案
    默认情况下,链路信息只能在线程内传递,如果应用代码中有跨线程逻辑,需要手动处理:

    • 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");
          }));
      

部署修改

Dockerfile

一般应用

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

FROM apache/skywalking-java-agent:8.14.0-java11
MAINTAINER lms [email protected]

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 [email protected]

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 服务名称,格式为:: 项目名称::应用名称,如: lms::alarm-sender
SW_AGENT_INSTANCE_NAME 实例(节点)名称 应用名词@部署地址,如: [email protected]
SW_AGENT_COLLECTOR_BACKEND_SERVICES skywalking后端地址 ip:port

更多配置项参考官方文档

示例:

docker run -d -p 8806:8806 -e SW_AGENT_NAME=lms::analysis -e [email protected] -e SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.3.39: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
   - [email protected]
   - SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.3.39:11800

标签:SW,lms,jar,analysis,AGENT,链路,Skywalking,skywalking,追踪
From: https://www.cnblogs.com/cheap-cabbage/p/17384391.html

相关文章

  • 第三章数据链路层
    1.数据链路层的概述1.0地位数据链路层在网络体系结构中所处的地位链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。数据链路(DataLink)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。数据链路层以帧为单位传输和处理数据。......
  • skywalking 集群部署
    1、安装包:apache-skywalking-apm-es7-8.7.0.tar.gz下载地址:https://archive.apache.org/dist/skywalking/8.7.0/apache-skywalking-apm-es7-8.7.0.tar.gz2、安装包解压tar -xf  apache-skywalking-apm-es7-8.7.0.tar.gzyuminstalljava-1.8.0-openjdk-devel-y  ......
  • 全景剖析阿里云容器网络数据链路(三)—— Terway ENIIP
    来源https://help.aliyun.com/practice_detail/602821本系列联合作者容器服务@谢石前言近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的......
  • 使用篇丨链路追踪(Tracing)很简单:链路拓扑
    作者:涯海最近一年,小玉所在的业务部门发起了轰轰烈烈的微服务化运动,大量业务中台应用被拆分成更细粒度的微服务应用。为了迎接即将到来的双十一大促重保活动,小玉的主管让她在一周内梳理出订单中心的全局关键上下游依赖,提前拉通各方对齐重保方案。这个任务可愁坏了小玉,平时她只与直......
  • 使用篇丨链路追踪(Tracing)很简单:链路拓扑
    作者:涯海最近一年,小玉所在的业务部门发起了轰轰烈烈的微服务化运动,大量业务中台应用被拆分成更细粒度的微服务应用。为了迎接即将到来的双十一大促重保活动,小玉的主管让她在一周内梳理出订单中心的全局关键上下游依赖,提前拉通各方对齐重保方案。这个任务可愁坏了小玉,平时她只与直接......
  • 动态物体追踪
    动态物体追踪闲话我个人是比较喜欢捣鼓一些程序设计,算法之类的。但毕竟是人工智能专业的,电子类大赛也必须去打,起初是导师让我来打这个比赛,后面发现还是很有挑战,很有意思的。一开始我对全国大学生电子设计大赛真的一点不懂,之前也没了解过。后来听导师说,我们团队做的都是些控制类......
  • 服务百万商家的系统,发布风险如何规避?微盟全链路灰度实践
    一分钟精华速览全链路灰度发布是指在微服务体系架构中,应用的新、旧版本间平滑过渡的一种发布方式。由于微服务之间依赖关系错综复杂,一次发布可能会涉及多个服务升级,所以在发布前进行小规模的生产环境验证,让新版本的应用实例来承接、处理限定规模或范围的业务流量,能最大限度控制发......
  • 使用 ChatGPT ,通过自然语言编写 eBPF 程序和追踪 Linux 系统
    eBPF是一项革命性的技术,起源于Linux内核,可以在操作系统的内核中运行沙盒程序。它被用来安全和有效地扩展内核的功能,而不需要改变内核的源代码或加载内核模块。今天,eBPF被广泛用于各类场景:在现代数据中心和云原生环境中,可以提供高性能的网络包处理和负载均衡;以非常低的资源开销,做......
  • 探究“黑科技”:自动驾驶中的对象追踪技术丨曼孚科技
    自动驾驶在真正上路前,会经过上千公里的测试。许多自动驾驶公司为了更好地掌握车辆的安全性能,会在训练中增设障碍物,如果车辆能够成功规避障碍物,说明该自动驾驶车辆更安全。而对象追踪技术的出现,对解决这类问题起到了关键性作用。作为无人驾驶的必要技术之一,目标追踪通过计算机视......
  • canvas指纹追踪技术
    通过canvas生成一个base64的字符串对于设备、操作系统、浏览器生成的functionuuid(){constcanvas=document.createElement('canvas');constctx=canvas.getContext('2d');consttxt='test';ctx.fillText(txt,10,10);console.log(canva......