一、SkyWalking简介

SkyWalking是一个国产开源框架,b并加入Apache孵化器。简介来自官方文档。

SkyWalking是 一个开源的可观测平台,用于从服务和云原生基础设施收集,分析,聚合及可视化数据。

SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至横跨多个云平台。SkyWalking 更是一个现代化的应用程序性能监控(Application Performance Monitoring)系统,尤其专为云原生、基于容器的分布式系统设计。

1、为什么要使用 SkyWalking?

在许多不同的场景下,,SkyWalking 为观察和监控分布式系统提供了解决方案。首先是像传统的方式那样,SkyWalking 为服务提供了自动打点的代理,如 Java, C# , Node.js , Go , PHP 以及 Nginx LUA(包括 Python 和 C++ 调用的 SDK 捐献)。对于多数语言,持续部署环境,云原生基础设施正变得更加强大,但也更加复杂。

Skywalking 的服务网格接收器可以让 Skywalking 接收来自服务网格框架(例如 Istio , Linkerd)的遥测数据,以帮助用户理解整个分布式系统。

总之,SkyWalking 为 服务(service),服务实例(service instance)以及 端点(endpoint) 提供了可观测能力。服务(Service), 实例(Instance) 以及 端点(Endpoint) 等概念在如今随处可见,所以先了解一下他们在 SkyWalking 中都表示什么意思:

  • 服务(Service): 表示对请求提供相同行为的一组工作负载。在使用打点代理或 SDK 的时候,你可以定义服务的名字。SkyWalking 还可以使用在 Istio 等平台中定义的名称。
  • 服务实例(Service Instance): 一组工作负载(服务组)中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样,服务实例未必就是操作系统上的一个进程。但当你在使用打点代理的时候,一个服务实例实际就是操作系统上的一个真实进程。
  • 端点(Endpoint): 对于特定服务所接收的请求路径,如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。

使用 SkyWalking 时,用户可以看到服务与端点之间的拓扑结构,每个服务/服务实例/端点的性能指标,还可以设置报警规则。

从 v9 开始,SkyWalking 引入了新的核心概念Layer。层代表计算机科学中的一个抽象框架,例如操作系统(OS_LINUX 层)、Kubernetes(k8s 层)。所有检测到的实例都属于一个层来表示该实例的运行环境,服务将根据其实例具有一个或多个层定义。

2、整体架构

在这里插入图片描述
SkyWalking 逻辑上分为四部分:探针(Probes),平台后端(Platform backend),存储(Storage)和用户界面(UI)。

  • 探针(Probes): 基于不同的来源可能是不一样的,但作用都是收集数据,将数据格式化为 SkyWalking 适用的格式。
  • 平台后端(Platform backend): 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。 你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统 自定义聚合分析。
  • 存储(Storage): 通过开放的插件化的接口存放 SkyWalking 数据。你可以选择一个既有的存储系统,如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统。
  • 用户界面(UI): 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

二、SkyWalking环境搭建

官方下载:http://skywalking.apache.org/downloads/

在这里插入图片描述

1、搭建SkyWalking APM服务

SkyWalking APM服务中包含 OAP服务和 UI服务。

bin目录中包含两个服务的启动脚本。

  • startup.bat:同时启动 OAP和 UI服务。
    在这里插入图片描述

1.1 启动服务

下面在 windows中启动。点击 bin/startup.bat脚本。会启动两个服务:

1.1.1 skywalking-oap-server服务

skywalking-oap-server服务启动后会暴露 11800 和 12800 两个端口,分别为收集监控数据的端口 11800和接受前端请求的端口12800,可以在 config/applicaiton.yml修改端口,数据库存储等。默认使用H2数据库存储。

在这里插入图片描述

1.1.2 skywalking-web-ui服务

SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得。

skywalking-web-ui服务会占用 8080 端口, 可以在webapp/webapp.yml 修改端口。

在这里插入图片描述

  • server.port:SkyWalking UI服务端口,默认是8080;
  • spring.cloud.discovery.client.simple.instances.oap-service:SkyWalking OAP服务地址数组(可以配置多个 OAP服务)。

日志信息存储在 logs目录:

在这里插入图片描述

启动成功之后,访问 Skywalking UI界面:http://127.0.0.1:8080/

在这里插入图片描述

三、SkyWalking快速使用

搭建好了 SkyWalking服务,接下来在项目中接入SkyWalking的 Java Agent来追踪服务。

SkyWalking对接入端无代码侵入。所以在启动项目时,通过 - javaagent 参数进行配置SkyWalking Agent来追踪服务就可以了。

下面直接在 IDEA中使用 SkyWalking 。

1、在IDEA中使用SkyWalking

在运行的程序配置 jvm参数:

在这里插入图片描述

-javaagent:D:\OpenResoure\SkyWalking\apache-skywalking-java-agent-8.12.0\skywalking-agent\skywalking-agent.jar
-DSW_AGENT_NAME=springboot-mybatis-demo
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

参数说明:

  • ‐javaagent:skywalking-agent的路径
  • ‐DSW_AGENT_NAME:SW_AGENT自定义服务名
  • ‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES:连接OAP服务信息

然后运行项目,随便访问几个接口,然后在SkyWalking UI界面查询追踪信息。

在这里插入图片描述

2、Skywalking集成日志框架

Skywalking提供了很多可插播的功能组件。这里我们集成 logback日志框架。

官方文档:https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/

1)引入logback依赖

    <!-- apm‐toolkit‐logback‐1.x依赖 -->
    <dependency>
      <groupId>org.apache.skywalking</groupId>
      <artifactId>apm-toolkit-logback-1.x</artifactId>
      <version>8.12.0</version>
    </dependency>

2)添加 lobback日志文件

在项目的 resources下添加 logback-spring.xml文件,并配置 %tid 占位符

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志的格式化,配置 %tid 占位符 -->
        <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>

    <!-- 通过grpc上报日志到 skywalking oap-->
    <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.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <!-- 设置 Appender -->
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="grpc-log"/>
    </root>

</configuration>

重启项目,查看 Skywalking UI界面:

在这里插入图片描述

日志信息对我们追踪信息,特别是错误信息非常有帮助。

– 求知若饥,虚心若愚。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐