Windows11部署SkyWalking
一、认识skywalking1.1、SkyWalking简介SkyWalking是一个开源的分布式系统跟踪和性能监测工具旨在帮助开发人员更好地理解和优化其分布式系统的性能。它提供了全面的分布式跟踪性能指标和日志分析使开发人员能够深入了解分布式系统中不同组件之间的交互发现潜在的性能问题并追踪请求的流程。其主要作用包括分布式追踪SkyWalking能够追踪分布式系统中的请求流并记录请求在各个组件之间的传递过程。这有助于识别潜在的性能瓶颈和优化机会。性能监测通过监测关键性能指标如响应时间、吞吐量等SkyWalking帮助开发人员了解系统的整体性能表现并及时发现性能下降或异常。问题排查当系统中出现问题时SkyWalking可以提供详细的跟踪信息帮助开发人员快速定位和解决问题减少故障排除的时间。在分布式系统中由于各个组件分布在不同的节点上可能运行在不同的语言和框架下跟踪和监测这些组件之间的交互变得复杂而困难。SkyWalking通过提供统一的监测和追踪平台弥补了这一缺陷使开发人员能够更轻松地管理和优化分布式系统。对于代码的实现使用SkyWalking通常需要在应用程序中集成相应的代理或插件以便收集和传递跟踪数据。在代码中你可以添加注释来标识关键的业务逻辑和交互点以便更清晰地了解跟踪结果。这种注释可以作为文档帮助团队理解系统的架构和流程。1.2、skywalking架构图整个架构分成四部分1.上部分Agent 负责从应用中收集链路信息发送给 SkyWalking OAP 服务器2.下部分 SkyWalking OAP 负责接收Agent发送的Tracing数据信息然后进行分析(Analysis Core)存储到外部存储器(Storage)最终提供查询(Query)功能3.右部分StorageTracing数据存储目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器目前采用较多的是ES4.左部分SkyWalking UI负责提供控制台查看链路等等它支持多种语言和框架包括Java、.NET、Node.js等。它通过在应用程序中插入代理或使用特定的SDK来收集跟踪数据并将这些数据发送到SkyWalking服务器进行分析和展示。1.3、实现原理概览SkyWalking的基本实现原理涉及以下关键概念和步骤代理和探针SkyWalking通过在应用程序中引入代理或探针来收集分布式系统的性能数据。这些代理可以以不同的形式存在如Java Agent、Node.js Agent等具体取决于应用程序的技术栈。字节码注入为了收集跟踪数据SkyWalking通过在运行时修改应用程序的字节码来实现代理的注入。这样代理能够捕获请求的关键信息如调用链路、方法执行时间等。注册中心分布式系统中的各个服务实例通常需要注册到服务注册中心。SkyWalking通过注册中心获取服务的拓扑结构从而了解服务之间的关系和依赖关系。数据存储收集到的性能数据被发送到后端的数据存储系统通常是支持分布式存储的数据库。这些数据包括跟踪信息、性能指标和日志数据。分布式追踪的核心概念包括以下几个方面跨越Span在分布式系统中一个请求可能经过多个服务和组件。跨越是指这个请求在整个分布式系统中的一段时间内的活动。在SkyWalking中一个跨越由一系列的Span组成每个Span代表了分布式系统中的一个组件或操作。上下文传播上下文传播是指在分布式系统中传递请求上下文信息的过程。当一个请求进入系统时它的上下文信息如Trace ID和Span ID会被赋予一个唯一的标识。在请求经过不同的服务和组件时这些上下文信息会被传递以确保整个跨越的连贯性。Trace ID和Span IDTrace ID是整个跨越的唯一标识而Span ID则标识跨越中的单个Span。通过这两个标识SkyWalking能够将不同服务和组件的跟踪信息关联起来形成完整的调用链路。总体而言SkyWalking通过在应用程序中注入代理、利用注册中心获取服务拓扑结构、字节码注入实现跨越的跟踪同时通过上下文传播确保跨越的连贯性。这使得开发人员能够深入了解分布式系统中的性能状况从而进行优化和故障排除。在实现中通过在关键代码位置添加注释可以帮助开发人员更好地理解跟踪结果和调用链路。1.4、数据采集与传输SkyWalking通过探针Agent在分布式系统中进行数据采集。以下是数据采集和传输的基本流程数据采集每个服务实例都需要部署SkyWalking的探针。这可以是针对特定技术栈的代理比如Java Agent、Node.js Agent等。探针通过字节码注入的方式监视应用程序的运行并捕获关键的性能和跟踪数据。跨越Span的生成当一个请求进入系统时探针开始生成跨越Span。每个Span代表分布式系统中的一个组件或操作。这包括服务调用、数据库查询、消息传递等。上下文传播跨越的生成过程中探针负责传播请求的上下文信息。这包括Trace ID和Span ID用于唯一标识整个跨越以及其中的每个Span。上下文传播确保在整个分布式系统中保持请求的连贯性。数据发送探针将生成的跨越数据发送到数据接收端。数据接收端通常位于分布式系统内的某个中心位置等待各个服务实例发送数据。数据接收端的处理数据接收端接收到跨越数据后进行初步处理可能包括数据格式的解析和一些简单的过滤。然后数据接收端将数据传递给后续的数据存储和分析组件。至于数据在系统内部的传输流程和机制通常可以分为以下步骤Agent到数据接收端的传输探针将采集到的跨越数据封装成特定的格式通过网络传输到数据接收端。这可以采用诸如HTTP、gRPC等协议。数据接收端的处理数据接收端接收到数据后解析数据格式并进行一些基本的处理比如校验数据的有效性、去除冗余信息等。之后数据接收端将数据发送给数据存储和分析组件。存储和分析组件的处理数据存储和分析组件负责将接收到的数据进行持久化存储并进行聚合、分析等操作。这些组件可能使用分布式存储系统以确保数据的可靠性和可扩展性。UI界面的展示数据存储和分析组件生成的结果可以通过UI界面展示给开发人员。这包括调用链路图、性能指标图表等使开发人员更容易理解系统的运行状况。通过这个流程SkyWalking实现了对分布式系统中性能和跟踪数据的全面采集并通过可视化的方式呈现给开发人员帮助他们更好地理解和优化系统。在代码中添加注释可以帮助开发人员更清晰地了解关键的业务逻辑和交互点。1.5、追踪数据的处理与存储SkyWalking在处理和存储追踪数据方面涉及以下关键步骤数据接收与解析探针采集到的跟踪数据首先会被发送到数据接收端。在这一步数据接收端负责解析数据的格式并进行初步的处理例如验证数据的有效性、去除冗余信息等。数据存储解析后的数据被存储到数据存储组件中。通常这个组件使用支持分布式存储的数据库以确保数据的可靠性和可扩展性。存储的数据包括跨越信息、性能指标、日志数据等。数据聚合存储的数据可能包含大量的跨越信息其中每个跨越由一系列的Span组成。为了更好地理解系统的性能和发现潜在问题数据存储组件进行数据聚合将相关的跨越信息合并为一个整体。这有助于生成调用链路图显示请求在整个系统中的流动路径。数据分析聚合后的数据被传递给分析组件这个组件进行更深层次的数据分析。它可以生成性能指标、识别瓶颈、检测异常等。数据分析的结果可以通过UI界面呈现给开发人员帮助他们更好地了解系统的整体性能。强调数据的聚合和分析对性能优化的重要性体现在以下方面性能瓶颈识别通过聚合和分析跨越数据系统可以识别潜在的性能瓶颈。这有助于开发人员找到系统中影响性能的关键点进行有针对性的优化。优化机会发现数据分析可以揭示系统中的优化机会。通过了解系统的整体性能和请求的流动路径开发人员可以确定哪些部分可以进一步优化以提高系统的效率。故障排除聚合和分析的数据也有助于故障排除。当系统出现问题时开发人员可以通过调用链路图迅速定位问题所在缩短故障排除的时间。总体而言SkyWalking通过对跟踪数据的聚合和分析提供了全面的性能信息帮助开发人员更好地理解和优化分布式系统。这种分析对于性能优化、问题排查和系统可维护性的提升都具有重要的意义。在实际应用中通过对关键代码添加注释可以使开发人员更清晰地了解业务逻辑和跟踪数据的关联。1.6、性能影响SkyWalking作为一个分布式系统追踪工具会对系统产生一些性能开销主要体现在探针的运行和数据收集传输上。以下是一些关于性能影响探针运行开销探针在应用程序中运行可能对应用的性能产生一定的影响。这包括对方法执行的监控、跨越生成等操作。数据传输开销将跟踪数据发送到数据接收端也会产生一些网络传输开销特别是在数据量较大或网络延迟较高的情况下。二、下载安装2.1、下载skywalking安装包下载安装包地址Downloads | Apache SkyWalking9.0版本下载地址https://archive.apache.org/dist/skywalking/9.0.0/apache-skywalking-apm-9.0.0.tar.gzskywalking是java写的需要使用jdk环境运行。我的winddows11系统是jdk17版本因此下载9.0版本的skywalking。2.2、下载代理包——skywalking-agentskywalking-agent.jar在项目启动时用到(版本跟skywalking安装包保持一致)在连接Downloads | Apache SkyWalking选择Java Agent找到对应版本下载。我这里下载同样9.0版https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz三、修改配置3.1、修改存储方式解压apache-skywalking-apm-9.0.0.tar.gz后编辑config/application.yml修改存储配置为elasticsearch以及elasticsearch的链接地址storage: selector: ${SW_STORAGE:elasticsearch} elasticsearch: namespace: ${SW_NAMESPACE:} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9200} # ES 地址我这里是本地部署elasticserach地址3.2、启动双击bin/startup.bat文件。启动后会弹出两个cmd窗口一个是数据收集服务Skywalking-collector, skywalking服务要链接它传输数据 另一个是skywalking-webapp本身服务。浏览器访问http://localhost:8080,会自动跳转http://localhost:8080/general地址如下界面。