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)追踪调用链路