介绍
Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。
对比
我们前面提到了APM系统,APM 系统(Application Performance Management,即应用性能管理)是对企业的应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案,在运维中常用.
Zipkin是Twitter开源的调用链路分析工具,目前基于Spingcloud sleuth得到了广泛的应用,特点是轻量,部署简单。
Pinpoint 一个韩国团队开源的产品,运用了字节码增强技术,只需要在启动时添加启动参数即可,对代码无侵入,目前支持Java和PHP语言,底层采用HBase来存储数据,探针收集的数据粒度非常细,但性能损耗大,因其出现的时间较长,完成度也很高,应用的公司较多
Skywalking是本土开源的基于字节码注入的调用链路分析以及应用监控分析工具,特点是支持多种插件,UI功能较强,接入端无代码侵入。
CAT是由国内美团点评开源的,基于Java语言开发,目前提供Java、C/C++、Node.js、Python、Go等语言的客户端,监控数据会全量统计,国内很多公司在用,例如美团点评、携程、拼多多等,CAT跟下边要介绍的Zipkin都需要在应用程序中埋点,对代码侵入性强。
功能介绍
-
SkyWalking 核心功能:
- 服务、服务实例、端点指标分析。
- 服务拓扑图分析
- 服务、服务实例和端点(Endpoint)SLA 分析
- 慢查询检测
- 告警
-
SkyWalking 特点:
- 多语言自动探针,支持 Java、.NET Code 等多种语言。
- 为多种开源项目提供了插件,为 Tomcat、 HttpClient、Spring、 - RabbitMQ、MySQL 等常见基础设施和组件提供了自动探针。
- 微内核 + 插件的架构,存储、集群管理、使用插件集合都可以进行自由选择。
- 支持告警。
- 优秀的可视化效果。
架构
skywalking 逻辑上是分为四个部分:Probes(探针), Platform backend(平台后端), Storage(存储), UI。
- 探针 : 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式.
- 平台后端 : 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。 你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统 自定义聚合分析。
- 存储 : 通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现。
- UI : 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。
skywalking继承集成
下载安装
下载地址:
https://skywalking.apache.org/downloads/
往期版本: https://archive.apache.org/dist/skywalking/
下载后列表结构
- agent 目录将来要拷贝到各服务所在机器上用作探针
- bin 目录是服务启动脚本
- config 目录是配置文件
- oap-libs 目录是oap服务运行所需的jar包
- webapp 目录是web服务运行所需的jar包
启动服务端
-
我们可以先修改webapp/webapp.yml 文件中的端口号,避免端口冲突 (UI界面配置文件)
-
skywalking启动命令在bin文件夹中
oap服务:对应的启动脚本oapService.bat,Linux下对应的后缀是sh
UI服务:对应的启动脚本webappService.bat,Linux下对应的后缀是sh
也可以直接打开startup.bat脚本,可以直接执行前面两个脚本。显示如下即启动成功。
3.启动成功之后执行 http://localhost:8847,端口为你前面改的端口号即可打开页面。
客户端搭建
客户端也就是单个微服务或者多个微服务,由于skywalking采用字节码增强技术,因此对于微服务无代码侵入,只要是普通的微服务即可,不需要引入什么依赖。
我这里采用了四个服务
- nacos 注册中心
- gateway 网关微服务
- tx-manager 分布式事务
- public 公共服务
传输数据到skywalking中需要在本地服务启动时增加启动参数
-javaagent:D:\skywalking\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=gateway
-Dskywalking.collector.backend_service=127.0.0.1:11800
命令解析:
- -javaagent:指定skywalking中的agent中的skywalking-agent.jar的路径
- -Dskywalking.agent.service_name:指定在skywalking中的服务名称,最好是和微服务的spring.application.name相同,方便区分
- -Dskywalking.collector.backend_service:指定oap服务绑定的地址,由于当前是在本地启动,并且oap服务默认的端口是11800,因此只需要配置为127.0.0.1:11800
每个需要skywalking监控的服务都需要配置启动参数。
这里有个问题提一下,skywalking默认情况下时不显示gateway服务,这时候就需要从 agent\optional-plugins 目录下找到gateway的包。
放入到agent\plugins文件下,在启动。
启动好服务后,调用public中随意一个接口测试,我这里用的是服务的Swagger 进行调用的,在页面或postman进行接口调用都是可以的
在右上角可以设置每几秒进行自动刷新,他这里默认排序是根据持续时间,可以改为开始时间,也就是你调用接口的时间这样方便找到接口。也有几种查看的方式:列表,树结构,表格
如果jdbc的接口过多可能会导致当前调用的接口被推至后几页,这时候可以使用端口名称(接口)进行查询
这里展示的是我们的服务之间的关系,
数据持久化
- 修改配置文件
- 在config中打开application.yml 文件,找到如下配置,默认为h2,修改为mysql存储
- 在修改MySQL的相关配置,ip,用户名,密码等。
- 添加mysql依赖
- skywalking默认是没有mysql驱动的,需要自己填加,将驱动包放入oap-libs文件夹下.
- 在mysql中创建skywalking数据库,对应上面mysql配置修改,重启服务端,就会自动生成skywalking表
性能分析
skywalking在性能剖析方面真的是非常强大,提供到基于堆栈的分析结果,能够让运维人员一眼定位到问题。
博主暂遇问题,无法实现。
参照: https://blog.youkuaiyun.com/pastxu/article/details/124538201