skywalking和链路追踪
SkyWalking介绍
首先我们要明白一点,在微服务的架构中,为什么要做链路追踪?解决问题的痛点在哪里?其实无外乎是如下几个问题:
- 如何将整个调用链路串起来,并能够快速定位问题?
- 如何梳理清楚各个微服务之间的依赖关系?
- 如何针对各个微服务接口进行性能分折?
- 如何跟踪整个业务流程的调用处理顺序?
SkyWalking是一个开源的应用性能监控系统,它主要用于跟踪、监测和优化分布式系统和微服务架构的性能。它提供了分布式系统的全链路追踪、指标采集和可视化等功能,可以帮助开发人员及运维人员在实时和历史数据中快速定位和解决性能问题。SkyWalking支持多种语言,包括Java、.NET、PHP、Node.js等,也支持多种协议,如HTTP、gRPC、Dubbo等。另外,SkyWalking还整合了告警、灰度发布、服务依赖分析等功能,为企业级分布式系统的监控和管理提供了全面的解决方案。
它还可以与其他应用程序性能监控工具,如 Grafana 和 Elasticsearch 集成,从而提供更加强大的监控和分析能力。
官网地址:skywalking.apache.org/
中文文档地址:https://skyapm.github.io/document-cn-translation-of-skywalking/
市面上链路追踪框架对比
常见的链路追踪框架有如下四种:
- Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
- Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
- SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
- CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
优缺点对比:
性能对比
网上有人对skywalking,zipkin,pinpoint对系统性能影响进行了测试,整体下来,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显。
Skywalking的功能特性
- 多种监控手段,可以通过语言探针和service mesh获得监控的数据;
- 支持多种语言自动探针,包括 Java,.NET Core 和 Node.JS;
- 轻量高效,无需大数据平台和大量的服务器资源;
- 模块化,UI、存储、集群管理都有多种机制可选;
- 支持告警;
- 优秀的可视化解决方案。
skywalking搭建和部署
skywalking分为如下几个部分:
- skywalking agent和业务系统绑定在一起,负责收集各种监控数据。
- skywalking oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapservice通常以集群的形式存在。
- skywalking webapp,前端界面,用于展示数据。
1. 下载 SkyWalking
官网比较难下载 所以我这边给大家提供了下载链接,大家可以通过该链接下载。
https://download.csdn.net/download/wu2374633583/87894610
2. 目录结构介绍
解压以后就是这样:
3. 搭建SkyWalking OAP 服务
启动脚本bin/startup.sh
日志信息存储在logs目录
启动成功后会有两个服务,如下:
skywalking-oap-server
:暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml
skywalking-web-ui
:服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml
server.port
:SkyWalking UI服务端口,默认是8080;
collector.ribbon.listOfServers
:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得;
访问:http://192.168.164.128:8080/
得到如下界面:
4. SkyWalking中的应用名称
服务(Service)
:表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字;
服务实例(Service Instance)
:上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;
端点(Endpoint)
:对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名。
下一篇我会为大家介绍SkyWalking如何接入到微服务中,同时如何在微服务中使用。希望大家多多关注!!