1、skywalking是什么
    skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。它是一款优秀的 APM(Application Performance Management)工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。
    官网:http://skywalking.apache.org/
    下载:http://skywalking.apache.org/downloads/
    Github:https://github.com/apache/skywalking
    文档: https://skywalking.apache.org/docs/main/v8.4.0/readme/
    中文文档: https://skyapm.github.io/document-cn-translation-of-skywalking/
    1.2 链路追踪框架对比

    1. Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
    2. Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
    3. SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
    4. CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具

    image.png
    1.3 性能对比
    模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:
    image.png
    从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。
    1.4 Skywalking主要功能特性
    1、多种监控手段,可以通过语言探针和service mesh获得监控的数据;
    2、支持多种语言自动探针,包括 Java,.NET Core 和 Node.JS;
    3、轻量高效,无需大数据平台和大量的服务器资源;
    4、模块化,UI、存储、集群管理都有多种机制可选;
    5、支持告警;
    6、优秀的可视化解决方案;
    2、 SkyWalking 环境搭建部署
    image.png

    • skywalking agent和业务系统绑定在一起,负责收集各种监控数据
    • Skywalking oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapservice通常以集群的形式存在。
    • skywalking webapp,前端界面,用于展示数据。
    • 用于存储监控数据的数据库,比如mysql、elasticsearch等。

    2.1 下载 SkyWalking
    下载:http://skywalking.apache.org/downloads/
    image.png
    image.png
    2.2 搭建SkyWalking OAP 服务
    启动脚本bin/startup.sh
    image.png
    日志信息存储在logs目录
    image.png
    启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui : 8868
    skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml
    image.png
    skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml
    image.png
    server.port:SkyWalking UI服务端口,默认是8080;
    collector.ribbon.listOfServers:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得;
    访问:http://192.168.3.100:8080/
    image.png
    页面的右下角可以中英文切换,可以切换选择要展示的时间区间的跟踪数据。
    2.3 SkyWalking中三个概念
    服务(Service) :表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字;
    服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;
    端点(Endpoint) :对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名;
    image.png
    3、 SkyWalking 接入微服务
    3.1 linux环境—通过jar包方式接入
    准备一个springboot程序,打成可执行jar包,写一个shell脚本,在启动项目的Shell脚本上,通过 -javaagent 参数进行配置SkyWalking Agent来跟踪微服务;
    startup.sh脚本

    1. #!/bin/sh
    2. # SkyWalking Agent配置
    3. export SW_AGENT_NAME=springboot-skywalking-demo #Agent名字,一般使用`spring.application.name`
    4. export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
    5. export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300
    6. export JAVA_AGENT=-javaagent:/usr/local/soft/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar

    启动日志
    image.png
    等同于

    1. java -javaagent:/usr/local/soft/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
    2. -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

    java -javaagent:/usr/local/soft/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

    1. # The service name in UI
    2. agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
    3. # Backend service addresses.

    我们也可以使用skywalking.+配置文件中的配置名作为系统配置项来进行覆盖。 javaagent参数配置方式优先级更高
    测试: 访问你的微服务
    image.png
    3.2 windos环境—在IDEA中使用Skywalking
    在运行的程序配置jvm参数,如下图所示
    image.png

    1. # skywalking-agent.jar的本地磁盘的路径
    2. -javaagent:D:\apache\apache-skywalking-apm-es7-8.4.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
    3. # skywalking上显示的服务名
    4. -DSW_AGENT_NAME=springboot-skywalking-demo
    5. # skywalkingcollector服务的IP及端口

    -DSW_AGENT_COLLECTOR_BACKEND_SERVICES 可以指定远程地址, 但是-javaagent必须绑定你本机物理路径的skywalking-agent.jar
    3.3 Skywalking跨多个微服务跟踪
    Skywalking跨多个微服务跟踪,只需要每个微服务启动时添加javaagent参数即可。
    测试:
    启动微服务mall-gateway,mall-order,mall-user ,配置skywalking的jvm参数
    http://localhost:8888/user/findOrderByUserId/1
    image.png
    image.png
    注意:此处存在bug,跟踪链路不显示gateway
    拷贝agent/optional-plugins目录下的gateway插件到agent/plugins目录
    image.png
    image.png
    image.png
    image.png