「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。
跟我学:分布式链路跟踪之ELK初搭建
跟我学:分布式链路跟踪之ELK日志实战
跟我学:分布式链路跟踪之SpringCloudAlibaba+Nacos
1 前言
上一篇文章我们讲了基于SpringCloudAlibaba的分布式项目搭建,以及使用Nacos作为服务发现和配置中心。
有了项目之后,我们还需要有管理、监测项目的工具,简称APM。在业界,有阿里的鹰眼,CAT,ZipKin,SkyWalking等。
考虑到性能监控和链路跟踪这几个主要特性以及社区的活跃性来讲,我们这边选择Apached的SkyWalking,毕竟背靠大树好乘凉嘛!
话不多说,让我们愉快的开始吧。
2 基本信息
2.1 简介
SkyWalking 是一个针对分布式系统的应用性能监控和可观测性分析平台。
它提供了多维度应用性能分析手段,从分布式拓扑图到应用性能指标、Trace、日志的关联分析与告警。
同时 Apache SkyWalking 是中国首个、也是唯一一个发展成为 Apache 顶级项目的个人开源项目
2.2 对比
3 安装使用
3.1 下载
由于8.4版本才支持LogBack TraceId,所有我这变选择了8.6.0版本。同时因为考虑到需要支持的复杂搜索,采用了ElasticSearch作为存储,所以选择ES的版本。
3.2 安装启动
- 解压进入根目录
- 修改config/apllication.yaml配置文件。
storage:
selector: ${SW_STORAGE:elasticsearch7} # 存储的引擎
elasticsearch7:
# elasticsearch 的集群名称,访问ES 9200就能看到
nameSpace: ${SW_NAMESPACE:"elasticsearch"}
# elasticsearch 集群节点的地址及端口
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9200}
# elasticsearch 的用户名和密码
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
- 进入bin, ./startup.sh启动。
- 启动之后访问
localhost:8080
,看到下方的界面表示安装成功了。
4 应用性能监控
上一篇文章我们已经搭建好了分布式项目:provider和consumer。这次我们需要在启动项上做点文章。
4.1 添加启动配置
在idea启动的VM Options添加以下配置,当然也可以在java #{} -jar 启动项目时添加!占位符表示下方的配置
# skywalking agent jar包路径
-javaagent:/Users/zyq/develomentEnvir/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
# 服务名称
-Dskywalking.agent.service_name=consumer
# skywalking地址
-Dskywalking.collector.backend_service=127.0.0.1:11800
4.2 启动项目
确保配置正确后,启动provider和consumer两个项目,稍等十几秒后刷新,刷新SkyWalking界面,可以看到项目已经被管理了。
4.3 链路跟踪
上一篇文章跟我学:分布式链路跟踪之SpringCloudAlibaba+Nacos
已经实现通过消费者访问localhost:8082/echo/2018
调用生产者。
在启动SkyWalking后,再次调用,可以看到基本的链路跟踪已经实现了。
5 整合LogBack
SkyWalking支持log4j,log4j2和logback,由于项目原因,我们这边选择LogBack作为日志跟踪
5.1 创建分布式id
- 在Provider和Consumer的项目中添加pom依赖
!-- 日志追踪pom-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.5.0</version>
</dependency>
- 在Provder和Consumer的项目的LogBack配置中,添加Appender和encoder
<appender name="BUSINESS-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
- 重新通过消费者调用
localhost:8082/echo/2018
- 可以看到消费者和生产者都打印了相同的Tid,通过之前搭建的ELK环境我们就能实现Trace_ID查询所有相关日志。
5.2 GRPC REPORTER
除了通过ELK查询日志外,SkyWalking还支持通过GRPC REPORTER
上传日志并且搜索。如果对于搜索要求没那么高的项目,SkyWalking的日志搜索完全能支持了。
- 在LogBack配置中添加Appender
<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>
-
设置Logger的配置
-
重新调用后打开skywalking界面,可以看到日志信息
结尾
到这,我们的skywalking算是个小入门了。有兴趣的可以看Skywalking官网。
咱们下期见~