1、背景
上了 springboot 微服务框架后会有很多微服务,每次都到单个微服务自己的日志海洋里去找需要很大经理, 日志跟踪就会成为一个麻烦。我们尝试来寻找一个简化方案
skywalking 可以在不修改任何代码的情况下,帮你生成调用跟踪链路,而且描述了各个链路的调用时长,相关日志。非常的强大。
2、skywalking 介绍
skywalking,分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器的 (Kubernetes) 架构而设计。
官网:https://skywalking.apache.org/ github: https://github.com/apache/skywalking
官方文档:https://skywalking.apache.org/docs/main/latest/readme/
Skywalking相比于zipkin还是有很大的优势的,如下:
skywalking采用字节码增强的技术实现代码无侵入,zipKin代码侵入性比较高 skywalking功能比较丰富,报表统计,UI界面更加人性化
组成: 探测器(Probe):收集数据并根据 SkyWalking 要求重新格式化(不同的探测器支持不同的来源)。 平台后端(Platform backend):支持数据聚合、分析和流式处理,包括跟踪、度量和日志。 存储(Storage):通过开放/可插入接口存储 SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、InfluxDB,也可以自己实现。欢迎为新的存储实现者打补丁! UI(UI):是一个高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。
安装和部署
从 https://skywalking.apache.org/downloads/ 选择 SkyWalking APM 下载。
参考: https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/setup/backend/backend-ui-setup.html
配置文件
后端服务的配置文件在 config 目录下,主要配置文件是 application.yml。
启动
SkyWalking 相关的启动脚本都在 bin 目录下。
如果是第一次使用,则需要初始化数据库表结构,不是第一次则跳过。执行脚本 oapServiceInit.sh。
代码语言:javascript复制./oapServiceInit.sh
SkyWalking OAP started successfully!
初始化执行成功后,执行应用启动脚本 oapService.sh。
代码语言:javascript复制./oapService.sh
SkyWalking OAP started successfully!
执行成功
SkyWalking 后端会启动一个 12800 端口的 rest 服务和一个 11800 的 gRPC 服务。 看看端口是否通畅:
代码语言:javascript复制telnet 127.0.0.1 11800
telnet 127.0.0.1 12800
gRPC 报告器
gRPC 报告器可以将收集到的日志转发到 SkyWalking OAP 服务器或SkyWalking Satellite sidecar。Trace id、segment id 和 span id 将自动附加到日志。无需修改现有布局。
代码语言:javascript复制添加GRPCLogClientAppenderlogback.xml
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
这么配置了以后,就可以在 web 上看到了,不过。。。那个表格看日志真的很不方便
兼容 spring-cloud-gateway
经过上面的步骤之后,链路已经搭建完成,查看发现了一个问题,gateway 模块的 traceId 和 业务模块的 traceId 不统一。
这是由于 SkyWalking 对于 spring-cloud-gateway 的支持不是默认的,所以需要将 agent/optional-plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.7.0.jar 复制到 agent/plugins 下,然后重启即可。
IDEA 中配置
IDEA 中配置 VM OPTIONS 启动参数:
代码语言:javascript复制-javaagent:/Users/zhangyunfei/Downloads/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ruoyi-system -Dskywalking.collector.backend_service=127.0.0.1:11800
参考
https://juejin.cn/post/7049920780569673736
https://www.jianshu.com/p/77b4e70c7817
https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/
https://juejin.cn/post/7012458633455730702
https://my.oschina.net/u/2344188/blog/4319631