如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分布式链路追踪系统,方便快速定位异常节点,从而针对性的处理问题。比较主流的APM(Application Performance Management)系统有SkyWalking、Zipkin、PinPoint、Cat等,这里就先说说SkyWalking,其他的后续再补上。
APM系统当然不仅仅只是链路追踪,还可以根据各种性能指标分析应用程序及其运行环境,以便在发生故障的时候能快速定位及解决问题。
SkyWalking 是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施(如数据库)的数据,它还提供了优秀的可视化界面。SkyWalking 也是一种现代 APM,专为云原生、基于容器的分布式系统而设计。
在SkyWalking中会经常提到服务、服务实例和端点,这里就先来了解一下:
通俗理解,如下图:
SkyWalking 主要分为四个部分:探针、平台后端、存储和 UI,如下图:
理论暂时了解这么多,实操一下更容易理解。
这里就采用Docker的方式进行安装,方便快捷,如果还有小伙伴对Docker不是很了解的,可以看看我整理的Docker系列分享。
这里用到的存储是ElasticSearch,需要提前安装,执行如下命令:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 --restart always -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx521m" elasticsearch:6.7.2
命令解析:
docker run --name skywalking-oap --restart always -p 1234:1234 -p 11800:11800 -p 12800:12800 -d --link elasticsearch:elasticsearch -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server:8.3.0-es6
命令解析:
docker run --name skywalking-ui --restart always -p 8080:8080 --link skywalking-oap:skywalking-oap -d -e SW_OAP_ADDRESS=skywalking-oap:12800 apache/skywalking-ui:6.6.0
命令解析:
接下来如果能访问暴露的端口就代表环境安装好了,如下:
到这环境就搞好了,剩下就是项目集成了,以下还是搞两个API来测试一把。
注: 在搭建环境时要注意elasticsearch、skywalking-oap-server、skywalking-ui版本问题,否则很容易掉坑; 就比如 skywalking-oap-server 设置环境变量SW_STORAGE=elasticsearch 时,只能连接elasticsearch6 等等这种细节。
这个命令行工具会快速生成配置文件,执行如下命令安装:
# 全局安装这个工具,后续直接用就行
dotnet tool install -g SkyAPM.DotNet.CLI
安装一次就行,如果已经安装,就可以跳过此步骤。
这个包是专门为.NetCore开发的探针。
在项目根目录下执行如下命令
dotnet skyapm config MySkyWalkingDemoTest 192.168.xxx.xxx:11800
命令执行完成后,会在项目根目录下生成skyapm.json文件,可以适当根据需要更改配置内容;
默认情况下skyapm.json文件只要更新都会复制到打包目录下,保险起见,可以右键->属性,将这个文件设置其为始终复制或如果较新则复制。
SkyWalking几乎不嵌入任何代码,直接运行代码,现在就可以将API服务进行跟踪和监控了。如下图:
看看SkyWalking界面展示:
可以进入追踪界面看具体请求信息:
注:条件时间注意时区,往前设置时间; 其实这里可以在启动搭建环境的时候设置时区。
点击树形的请求可以看详情:
新建一个项目SkyWalkingDemoTest22222,端口以5100启动,其他不变;这里没有集成SkyWalking,如果需要往下监控,同以上步骤集成即可;
然后简单修改一下SkyWalkingDemoTest项目的接口,如下:
先运行SkyWalkingDemoTest22222,再运行SkyWalkingDemoTest,执行完成之后,可以去SkyWalking界面中看看追踪信息,如下:
也可以通过拓扑图看到效果: