跟我学:分布式链路跟踪之SkyWalking初使用

734 阅读3分钟

「这是我参与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 对比

image.png

3 安装使用

3.1 下载

下载链接

由于8.4版本才支持LogBack TraceId,所有我这变选择了8.6.0版本。同时因为考虑到需要支持的复杂搜索,采用了ElasticSearch作为存储,所以选择ES的版本。

image.png

3.2 安装启动

  1. 解压进入根目录
  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:""}
  1. 进入bin, ./startup.sh启动。
  2. 启动之后访问 localhost:8080,看到下方的界面表示安装成功了。

image.png

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界面,可以看到项目已经被管理了。 image.png

4.3 链路跟踪

上一篇文章跟我学:分布式链路跟踪之SpringCloudAlibaba+Nacos

已经实现通过消费者访问localhost:8082/echo/2018调用生产者。

在启动SkyWalking后,再次调用,可以看到基本的链路跟踪已经实现了。

image.png

5 整合LogBack

SkyWalking支持log4j,log4j2和logback,由于项目原因,我们这边选择LogBack作为日志跟踪

5.1 创建分布式id

  1. 在Provider和Consumer的项目中添加pom依赖
!-- 日志追踪pom-->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.5.0</version>
</dependency>
  1. 在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>
  1. 重新通过消费者调用 localhost:8082/echo/2018 image.png

image.png

  1. 可以看到消费者和生产者都打印了相同的Tid,通过之前搭建的ELK环境我们就能实现Trace_ID查询所有相关日志。

5.2 GRPC REPORTER

除了通过ELK查询日志外,SkyWalking还支持通过GRPC REPORTER上传日志并且搜索。如果对于搜索要求没那么高的项目,SkyWalking的日志搜索完全能支持了。

  1. 在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>
  1. 设置Logger的配置 image.png

  2. 重新调用后打开skywalking界面,可以看到日志信息 image.png

结尾

到这,我们的skywalking算是个小入门了。有兴趣的可以看Skywalking官网。

咱们下期见~