快捷搜索: 王者荣耀 脱发

微服务链路跟踪之SkyWalking实战小结

1.关于链路跟踪

概念、原理可参考这两篇博文:

2.关于SkyWalking

可参考这篇博文:

3.SkyWalking下载地址

4.SkyWalking服务端部署

1)将SkyWalking解压到任意目录

2)运行启动脚本(以6.2.0为例)

apache-skywalking-apm-bin/bin/startup.sh // or for windows: apache-skywalking-apm-bin/bin/startup.bat

默认采用H2内存数据库存储trace数据;开启本地11800端口作为trace采集端口;8080端口作为web监控服务端口。

5.SkyWalking java-agent部署

1)将apache-skywalking-apm-bin/agent整个目录拷贝至微服务的运行目录(docker环境下,考虑制作包含apache-skywalking-apm-bin/agent整个目录的基础镜像)

2)如果仅跟踪dubbo接口调用关系,直接在微服务启动时增加JVM参数即可。例如:

java -javaagent:/xxx/yyy/agent/skywalking-agent.jar -Dskywalking.agent.service_name=myDemoService1 -jar demo-dubbo-provider-1.5.8.RELEASE.jar

其中,-javaagent参数指定skywalking-agent.jar的全路径;skywalking.agent.service_name指定微服务实例名称,用于展示在SkyWalking的web监控界面

3)如果需要跟踪微服务接口内部的调用关系,并采集性能数据,则按需要在各方法上增加@trace注解

3-1)引入apm-toolkit-trace包,用于AOP方式采集方法trace信息

<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>${skywalking.version}</version> </dependency>

3-2)要跟踪的方法上增加@trace注解

import org.apache.skywalking.apm.toolkit.trace.Trace; ... @Trace public void hello() { String ret = demoService.getHello("consumer1"); log.info("RPC return : " + ret); }

4)日志中增加TraceId,方便问题跟踪

TraceId是SkyWalking框架生成的唯一键,可用于在SkyWalking的web监控界面按此ID快速定位各种接口的调用关系

4-1)以logback为例,引入apm-toolkit-logback-1.x包,用于在日志中增加TraceId

<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>${skywalking.version}</version> </dependency>

4-2)logback配置文件中,将默认配置替换为SkyWalking的配置

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{35} - %msg%n</pattern> </layout> </encoder> </appender>

其中,[%tid]部分即为TraceId

1)仪表盘

2)拓扑图

3)拓扑图中查看明细

4)追踪调用链路

经验分享 程序员 微信小程序 职场和发展