在微服务框架Demo.MicroServer中添加SkyWalking+SkyApm-dotnet分布式链路追踪系统
1.APM工具的选取
Apm监测工具很多,这里选用网上比较火的一款Skywalking。
Skywalking是一个应用性能监控(APM)系统,Skywalking分为服务端Oap、管理界面UI、以及嵌入到程序中的探针Agent部分,大概工作流程就是在程序中添加探针采集各种数据发送给服务端保存,然后在UI界面可以看到收集过来的各种监测数据,来完成它的核心使命:性能监控和分布式调用链追踪能力。下图是skywalking官方的一个图,也可以说明这三者之间的关联关系
2.服务端(OAP)和界面(UI)的安装
这里直接在apache地址:http://skywalking.apache.org/downloads/ 下载了一个6.6.0版本的zip文件,由于之前在本地的windows上安装过,发现安装包里面有两个启动文件,分别为:startup.bat和startup.sh,分别用于window上启动和linux启动,这里我直接将之前下载好的上传到linux上来安装。
上传后解压缩,就会得到以下截图的几个文件
进入到config配置目录下面,有一个名称叫application.yml的文件
对这个配置文件进行编辑 vim application.yml
我们直接定位到数据存储部分,也就是节点storage,官方文档里面也有说明,为了方便快速入门,配置文件默认采用的是H2存储,但是推荐使用ElasticSearch存储,由于之前我安装过Exceptionless,在这台机器上已经安装过elasticsearch(如果没有安装过可以网上找下,有很多这方面的文章),所以我这里将H2部分注释掉,然后将elasticsearch部分放开,并修改红色方框里的两个配置文件:
nameSpace: ${SW_NAMESPACE:"exceptionless"} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9300}
需要注意的是:第一个SW_NAMESPACE需要与ElasticSearch配置的cluster_name名称一致
启动skywalking会占用四个端口:8080,10800,11800,12800,由于我本机安装过apollo,8080ui端口已经被占用,所以这里我必须要先修改UI界面使用的8080端口才能启动它。
开始修改UI界面使用的8080端口(如果你的8080端口并没有被占用,可以跳过,不用修改)
回到配置目录的上一级:cd ..
可以看到一个webapp的文件夹
进入这个目录:cd webapp/
然后对webapp.yml文件进行修改
这里我将原来server界面下面的port从8080改到8088,然后保存
配置文件修改完了,开始启动skywalking的服务端和UI界面,启动脚本放在目录:apache-skywalking-apm-bin/bin 里面
上面有说到startup.bat和startup.sh分别用在windows上和linux上启动,这里用./startup.sh
启动命令执行完成之后可以看到OAP和Web两个项目启动成功的提示,也就是我们说的服务端和UI界面。
验证一下,通过配置的ip+8088端口(如果没有修改则是默认的8080)来访问一下界面,如图:
至此,我们准备工作做完了,下面我们在程序中安装探针,来采集数据.
3.安装探针(Agent)采集数据
由于Skywalking本身是采用java编写的,所以SkyApm-dotnet这个项目就是专门为 .NET 开发的探针,目前支持 ASP.NET Core 以及 ASP.NET,下面我们将SkyApm-dotnet无侵入式的集成到.Net Core实现的微服务项目中
第一步:使用下面的命令来进行 Agent 的安装,这里据说需要以管理员身份运行
dotnet tool install -g SkyAPM.DotNet.CLI
第二步:添加环境变量,可以直接在launchSettings.json文件中添加以下代码来设置
"environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore", "SKYWALKING__SERVICENAME": "Demo.MicroServer.UserService" }
第三步:在程序中安装NuGet包:SkyAPM.Agent.AspNetCore
第四步:在应用程序根目录下使用以下命令生成skyapm.json的配置文件,[service name]替换为服务的名称,[server]替换为Skywalking安装的计器ip
dotnet skyapm config [service name] [server]:11800
执行完成之后可以看到目录下面已经生成了一个skyapm.json的文件,将其属性复制到输出目录设置为如果较新则复制,我这里是用之前发布在github上的微服务框架中的一个实例来测试的,所有代码均已上传,需要的可以通过页面又上角Github地址获取代码
4.采集数据并查看
在Swagger中随便调用几个接口来测试数据的采集情况,然后到UI界面查看数据,流程顺利的话,可以看到数据已经都有采集到
基本工作都已经完成,这个里面还有很多玩法,快动手试试吧。
版权声明:本文为peyshine原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。