前言 如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分布式链路追踪系统,方便快速定位异常节点,从而针对性的处理问题。比较主流的APM(ApplicationPerformanceManagement)系统有SkyWalking、Zipkin、PinPoint、Cat等,这里就先说说SkyWalking,其他的后续再补上。 APM系统当然不仅仅只是链路追踪,还可以根据各种性能指标分析应用程序及其运行环境,以便在发生故障的时候能快速定位及解决问题。正文1。SkyWalking简介 SkyWalking是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施(如数据库)的数据,它还提供了优秀的可视化界面。SkyWalking也是一种现代APM,专为云原生、基于容器的分布式系统而设计。1。1常用术语 在SkyWalking中会经常提到服务、服务实例和端点,这里就先来了解一下:服务:通俗一点理解就是一个应用程序;比如订单服务API。服务实例:服务组中每个单独运行的节点称为一个实例,一个服务可以对应多个服务实例(集群);如:一个订单服务可以集群部署好几个节点,这些节点就称为服务实例;端点:请求服务的路径,如:HttpUrl地址或是gRPC请求地址(gRPC定义的服务类方法名); 通俗理解,如下图: 1。2理解架构 SkyWalking主要分为四个部分:探针、平台后端、存储和UI,如下图: 探针:专门用于收集数据,并按照SkyWalking的要求格式化对应的数据。平台后端:对收集来的数据进行聚合、分析及流处理;存储:就是数据库,将收集的数据存储起来,方便随时查看和分析;主流的数据库有ElasticSearch、H2、MySQL、TiDB、InfluxDB等。一般我们会使用ElasticSearch,查询速度杠杠滴。UI:就是提供一个Web界面,可以很方便的查看和分析数据,各种图表形式展示。 理论暂时了解这么多,实操一下更容易理解。2。安装 这里就采用Docker的方式进行安装,方便快捷,如果还有小伙伴对Docker不是很了解的,可以看看我整理的Docker系列分享。2。1安装ElasticSearch 这里用到的存储是ElasticSearch,需要提前安装,执行如下命令:dockerrundnameelasticsearchp9200:9200p9300:9300restartalwaysediscovery。typesinglenodeeESJAVAOPTSXms64mXmx521melasticsearch:6。7。2 命令解析:p9200:9200p9300:9300分别让主机端口9200、9300和启动容器的端口做映射;ediscovery。typesinglenode单节点运行;eESJAVAOPTSXms64mXmx521m由于我云服务器的内存比较小,所以设置了一个环境变量ESJAVAOPTS来配置使用的内存:最小64m,最大521m,否则内存不够用,启动不起来。2。2安装SkyWalking的后台服务端(skywalkingoap),执行如下命令:dockerrunnameskywalkingoaprestartalwaysp1234:1234p11800:11800p12800:12800dlinkelasticsearch:elasticsearcheSWSTORAGEelasticsearcheSWSTORAGEESCLUSTERNODESelasticsearch:9200apacheskywalkingoapserver:8。3。0es6 命令解析:p1234:1234p11800:11800p12800:12800分别让主机端口1234、11800、12800和启动容器的端口做映射;11800是对接应用程序的;12800是用来对接SkyWalking的UI数据的。linkelasticsearch:elasticsearch代表和上一步启动elasticsearch网络链接起来,可以通过容器名访问对应服务,注意容器名和上一步一致;eSWSTORAGEelasticsearch设置SkyWalking的存储方式为elasticsearch;eSWSTORAGEESCLUSTERNODESelasticsearch:9200配置连接elasticsearch的地址;2。3安装SkyWalking的UI界面(skywalkingui),执行如下命令dockerrunnameskywalkinguirestartalwaysp8080:8080linkskywalkingoap:skywalkingoapdeSWOAPADDRESSskywalkingoap:12800apacheskywalkingui:6。6。0 命令解析:p8080:8080代表主机端口8080和容器端口8080做映射;linkskywalkingoap:skywalkingoap代表和上一步启动skywalkingoap网络链接起来,可以通过容器名访问对应服务,注意容器名和上一步一致;eSWOAPADDRESSskywalking:12800设置UI调用的API地址,就是上一步启动动SkyWalking后端地址,端口为12800; 接下来如果能访问暴露的端口就代表环境安装好了,如下: 到这环境就搞好了,剩下就是项目集成了,以下还是搞两个API来测试一把。 注:在搭建环境时要注意elasticsearch、skywalkingoapserver、skywalkingui版本问题,否则很容易掉坑;就比如skywalkingoapserver设置环境变量SWSTORAGEelasticsearch时,只能连接elasticsearch6等等这种细节。3。项目集成SkyWalking3。1先安装一个SkyWalking命令行工具 这个命令行工具会快速生成配置文件,执行如下命令安装:全局安装这个工具,后续直接用就行dotnettoolinstallgSkyAPM。DotNet。CLI 安装一次就行,如果已经安装,就可以跳过此步骤。3。2创建项目,并引入SkyAPM。Agent。AspNetCore包 这个包是专门为。NetCore开发的探针。 3。3注册服务,配置环境变量在Startup文件中注册服务配置环境变量这里方便测试,直接在项目中的launchSettings。json中配置就行,但如果是发布生产环境,一定要在对应环境配置环境变量。3。4执行SkyWalking命令生成配置文件 在项目根目录下执行如下命令dotnetskyapmconfigMySkyWalkingDemoTest192。168。xxx。xxx:11800MySkyWalkingDemoTest是服务名;192。168。xxx。xxx:11800是SkyWalking后台服务的地址,就是我们2。2步骤搭建的地址。根据真实需要配置IP就行。 命令执行完成后,会在项目根目录下生成skyapm。json文件,可以适当根据需要更改配置内容; 默认情况下skyapm。json文件只要更新都会复制到打包目录下,保险起见,可以右键属性,将这个文件设置其为始终复制或如果较新则复制。 3。5启动项目看效果 SkyWalking几乎不嵌入任何代码,直接运行代码,现在就可以将API服务进行跟踪和监控了。如下图: 看看SkyWalking界面展示: 可以进入追踪界面看具体请求信息: 注:条件时间注意时区,往前设置时间;其实这里可以在启动搭建环境的时候设置时区。 点击树形的请求可以看详情: 3。6多加一个API服务,测测调用链 新建一个项目SkyWalkingDemoTest22222,端口以5100启动,其他不变;这里没有集成SkyWalking,如果需要往下监控,同以上步骤集成即可; 然后简单修改一下SkyWalkingDemoTest项目的接口,如下: 先运行SkyWalkingDemoTest22222,再运行SkyWalkingDemoTest,执行完成之后,可以去SkyWalking界面中看看追踪信息,如下: 也可以通过拓扑图看到效果: