Bootstrap

skywalking简单入门实战

一 概率与设计

什么是 SkyWalking?

1. 概念

SkyWalking: 一个开源的可观测平台, 用于从服务和云原生基础设施收集, 分析, 聚合及可视化数据。SkyWalking 提供了一种简便的方式来清晰地观测分布式系统, 甚至横跨多个云平台。SkyWalking 更是一个现代化的应用程序性能监控(Application Performance Monitoring)系统, 尤其专为云原生、基于容器的分布式系统设计。

2. 为什么使用 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 时, 用户可以看到服务与端点之间的拓扑结构, 每个服务/服务实例/端点的性能指标, 还可以设置报警规则。

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

除此之外, 你还可以通过以下方式集成:

  • 其他分布式追踪使用 Skywalking 原生代理和Zipkin , Jaeger 和 OpenCensus 的 SDK;
  • 其他度量指标系统,例如 Prometheus , Sleuth(Micrometer。

3. 架构

SkyWalking 逻辑上分为四部分: 探针, 业务处理, 存储和用户界面。
在这里插入图片描述
Agent: 以探针的方式进行请求链路的数据采集,并向管理服务上报
OAP-Service: 接收数据,完成数据的存储和展示
Storage: 数据的存储层,支持ElasticSearch、Mysql、H2多种方式
UI界面: 自带的数据可视化展示界面

4. 设计目标

  • 保持可观测性。不管目标系统如何部署, SkyWalking 总要提供一种方案或集成方式来保持对目标系统的观测, 基于此, SkyWalking 提供了数种运行时探针。
  • 拓扑结构, 性能指标和追踪一体化。 理解分布式系统的第一步是通过观察其拓扑结构图,拓扑图可以将复杂的系统在一张简单的图里面进行可视化展现, 基于拓扑图,运维支撑系统相关人员需要更多关于服务/实例/端点/调用的性能指标,链路追踪(trace)作为详细的日志, 对于此种性能指标来说很有意义。比 如你想知道什么时候端点延时变得很长, 想了解最慢的链路并找出原因,可以看到, 这些需求都是从大局到细节的, 缺一不可, SkyWalking 集成并提供了一系列特性来使得这些需求成为可能, 并且使之易于理解。
  • 轻量级。 有两个方面需要保持轻量级:
    a. 探针, 我们通常依赖于网络传输框架, 如 gRPC. 在这种情况下, 探针就应该尽可能小, 防止依赖库冲突以及虚拟机的负载压力(例如 JVM 永久代内存占用压力)。
    b. 作为一个观测平台, 在你的整个项目环境中只是次要系统, 因此我们使用自己的轻量级框架来构建后端核心服务,所以你不需要部署并维护大数据相关的平台, SkyWalking 在技术栈方面应该足够简单。
  • 可插拔。 SkyWalking 核心团队提供了许多默认实现, 但这肯定是不够的, 也不可能适用于每一种场景, 因此我们提供了大量的特性来支持可插拔功能。
  • 可移植。 SkyWalking 可以运行在多种环境下, 包括:
    a. 使用传统的注册中心, 如 Eureka
    b. 使用包含服务发现的RPC框架,如Spring Cloud, Apache Dubbo
    c. 在现代基础设施中使用服务网格 (4) 使用云服务 (5) 跨云部署

在所有这些情况下,SkyWalking 应该运行良好

  • 可互操作。 可观测性是一个庞大的领域, 即使有强大的社区, SkyWalking 也不可能支持所有方方面面, 因此 SkyWalking 支持与其他运维支撑系统进行互操作, 主要是探针, 如 Zipkin, Jaeger, OpenTracing 和 OpenCensus。SkyWalking 接收并理解他们的数据格式, 这对于终端用户来说是非常有用的, 因为不需要他们更换已有的库。

5.工作原理

在应用程序中添加 SkyWalking Agent,就可以将接口、服务、数据库、MQ等进行追踪,将追踪结果通过 HTTP 或 gRPC 发送到 OAPServer,经过分析和聚合,将结果存储到 Elasticsearch 、H2、mysql等多种数据库中,SkyWalking 同时提供了一个 SkyWalking UI 的可视化界面,UI 以 GraphQL + HTTP 方式获取存储数据进行展示。

SkyWalking特性

  • 多种监控手段: 通过语言探针和 Service Mesh 等手段,获得链路、日志、指标等监控数据
  • 多种语言探针: Java、Go、.Net、PHP、NodeJS、Lua、Rust、C++ 等
  • 轻量级高性能: 无需大数据组件,无需大量的硬件资源,且对应用实例的负载消耗极低
  • 模块化架构: 数据传输、数据存储,注册发现等模块,可替换不同的基础设施实现
  • 端到端的监控: Vue、React 等前端,Java、.Net Core、PHP、NodeJS、Golang、Istio 等后端
  • 告警机制: 内置 Webhooks 发送事件通知,支持通过 HTTP、gRPC、Slack 等方式
  • 可视化界面: 好用的监控后台,可支持自定义配置,或是集成你自己的

二 搭建SkyWalking服务

服务搭建

1. 下载SkyWalking

SkyWalking在之前的版本中apm和agent是放在一起的,新版本需要分开下载,官网下载链接

skywalking-apm-9.1.0.tar.gz
skywalking-java-agent-8.10.0.tgz

下载完成后执行解压命令

tar -zvxf skywalking-apm-9.1.0.tar.gz

在这里插入图片描述
ps:文档演示SkyWalking部署在linux中,所以只需要apm包即可,agent包在本地解压

在这里插入图片描述

2. 配置存储方式

生产环境推荐Elasticsearch,本文采用mysql
在这里插入图片描述
在oap-libs目录下添加mysql驱动包,注意匹配mysql版本
在这里插入图片描述

启动和停止

启动oap服务:bin/oapService.sh
启动UI界面:bin/webappService.sh
服务停止命令:jps查看,kill相关编号
UI界面服务默认是8080端口,如果存在占用问题,可以修改:webapp/webapp.yml文件,更换端口;启动完成后访问ip:port即可

3. 服务集成

在服务启动类中添加agent配置,如果在生产环境中,通常会统一在脚本中设置,由于在本地环境演示,基于IDEA工具进行管理;
在启动参数中添加如下配置

-javaagent:E:\skywalking\apm\agent\skywalking-agent.jar //前面解压到本地的skywalking-agent地址
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=ip:11800  //oapService服务地址

功能说明

1. 服务监控

服务启动成功后即可访问skywalking UI界面,主页加载的服务是配置的微服务,即说明流程正确,点击相关服务即可查看相关指标
在这里插入图片描述

2. 拓扑结构图

在这里插入图片描述

用户通过portal经过redis集群访问,lnms,完成完整的调用链,包括中间使用到的redis及mysql能,都能直观的看到调用关系

3. 链路追踪

skywalking组件对于开发来说,最常用的就是该功能,这里采集了请求链路上的各个节点,以及执行的耗时分析,点击相关节点可以查看详细信息,针对异常请求同样可以采集到异常信息的描述

在这里插入图片描述

4. 数据库监控

虽然在整个配置中没有显式的添加对MySQL的监控,但是skywalking依旧可以实现对服务中的数据库监控

在这里插入图片描述

Database Avg Response Time:平均响应时间,单位ms
Database Access Successful Rate:访问成功率
Database Traffic:CPM,每分钟请求数
Database Access Latency Percentile:不同比例的响应时间,单位ms
Slow Statements:前N个慢查询,单位ms

;