应用性能管理工具-SkyWalking

  • 前言

随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂,因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。

而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题,还可以在新人加入后台团队之后,让其清楚地知道自己所负责的服务在哪一环。

除此之外,如果某个接口突然耗时增加,也不必再逐个服务查询耗时情况,我们可以直观地分析出服务的性能瓶颈,方便在流量激增的情况下精准合理地扩容。

这就是APM(应用性能管理)系统,全称:Application Performance Management tools。

  • 常用APM工具对比
  • 基本信息
  1. Pinpoint

Pinpoint专注于链路和性能监控,韩国研发团队开源,埋点无侵入UI 功能较强

  1. SkyWalking

SkyWalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache 孵化器,国人开源的产品,主要开发人员来自于华为。Skywalking专注于链路和性能监控,埋点无侵入, UI 功能较强 。能够加入Apache孵化器,设计思想及代码得到一定认可,后期应该也会有更多的发展空间及研发人员投入。目前使用厂商最多。版本更新较快。

  1. Zipkin

Zipkin由Twitter 开源,调用链分析工具,基于spring-cloud-sleuth得到广泛使用,非常轻量使用部署简单

  1. Cat

CAT是一个更综合性 的平台,提供的监控功能最全面,国内几个大厂生产也都在使用。但研发进度及版本更新相对较慢

  • 埋点方式

|------------|------------------|---------|
| 名称 | 埋点方式 | 入侵性 |
| pinpoint | 探针 | |
| skywalking | 探针 | |
| zipkin | http拦截器 | |
| cat | 代码埋点(拦截器/注解/过滤器) | |

  • 数据存储

|------------|----------------------------------|
| 名称 | 存储方式 |
| pinpoint | hbase |
| skywalking | es/mysql/tidb/h2/sharding sphere |
| zipkin | mysql/es/cassandra |
| cat | 本地/hdfs/mysql |

  • 最终选型(SkyWalking)

综合考虑工具的使用人数、维护能力以及对项目本身的侵入性,最终决定采用Skywalking作为项目的APM工具。

  1. SkyWalking采用探针的方式对服务进行监控,即在代码层面对项目零侵入性。
  2. 使用人群多,社区活跃度高,版本更新快。
  3. UI功能较强,管理界面可直接观察多个指标参数。
  • 简介

SkyWalking 是一个开源的分布式系统跟踪和性能监控工具,旨在帮助开发人员和运维团队监视、诊断和优化分布式系统的性能和行为。它提供了端到端的分布式跟踪、性能指标收集、报告和可视化能力。

  • 架构组成

SkyWalking本身逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。再加上监控的客户端应用服务,一套完整的监控体系最终可分为五个组成部分。

  1. 探针( agent 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式。
  2. 平台后端 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。
  3. 存储 通过开放的插件化的接口存放 SkyWalking 数据。可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere管理)。
  4. UI 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。
  5. 应用服务 即被SkyWalking监控的客户端服务。
  • 功能展示
  • 展示微服务与其他应用及中间件交互关系,包括微服务间调用逻辑(naocs RPC调用、Http调用),各个微服务连接的中间件(MySQL、MongoDB、Redis、MQ)关系。

(某时间段内的调用网络)

  • 展示被监控应用服务各项指标状态
  • 展示所有请求记录,包括并不限于正常http业务请求
  • 请求链路追踪,完整记录一次请求从开始到结束经过的每一步及每一步耗时时间

(服务间调用、请求外部系统、数据库交互)

  • 异常请求堆栈信息打印
  • 部署&使用

版本说明:

SkyWalking:

apache-skywalking-apm-9.0.0

Agent:

apache-skywalking-java-agent-8.9.0

  • SkyWalking 部署

SkyWalking本身的部署可以分为两个部分:Web UI (UI界面)+ OAP Server(后端服务)。

/webapp/application.yml可以修改Web UI服务的相关配置,其中包括UI服务本身端口和连接OAP服务的配置信息。

Skywaling-apm目录下/config/application.yml可以修改OAP Server的相关配置。

数据源配置

OAP Server需要配置一个数据源,用于服务本身的数据存储,默认提供了多种数据源实现:elasticsearch、mysql、h2、tidb、postpresql等等

选择其中一种作为服务的数据源

若选择mysql作为数据源,还需在/oap-libs目录下添加mysql的连接器

  • agent 配置

agent作为"探针"的功能,起到连接应用服务和SkyWalking的作用。

在启动应用服务时,启动参数加入指定值,即可将此应用服务接入SkyWalking服务端的监控。

agent 配置 SkyWalking 服务端地址

Skywalking-agent目录下/config/agent.config

  • 本地调试

-javaagent:/Users/renchen/develop/skywalking/agent/skywalking-agent-8.15.0/skywalking-agent.jar (指定agent探针位置)

-Dskywalking.agent.service_name=test-name(指定注册到SkyWalking服务端后该应用的名称)

-Dskywalking.agent.namespace=test-namespace(指定命名空间)

  • 测试机部署

启动脚本配置参数

  • 容器化部署
    1. Dockerfile中指定agent路径
    2. 将agent打入到基础镜像中
相关推荐
bohu838 天前
skywalking实现链路追踪-笔记
笔记·skywalking·单机模式
lvyuanj8 天前
IDEA skywalking 启动报错 ClassNotFoundException InstanceConstructorInterceptor
java·intellij-idea·skywalking
cominglately10 天前
centos部署SkyWalking以及在springcloud项目中搭配loki使用
spring cloud·centos·skywalking
白露与泡影12 天前
SkyWalking 和 ELK 链路追踪实战
elk·wpf·skywalking
不爱吃米饭_12 天前
SkyWalking 和 ELK 链路追踪实战
elk·wpf·skywalking
m0_6726565415 天前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
inventecsh16 天前
docker-compose部署skywalking 8.1.0
docker·容器·skywalking
林中伊人16 天前
go引入skywalking
skywalking
wgslucky21 天前
skywalking 配置elasticsearch持久化
大数据·elasticsearch·skywalking
canxiusi21 天前
SkyWalking没办法自动创建ES索引问题
大数据·elasticsearch·skywalking