『分布式链路追踪』在.NET Core项目中无缝集成Skywalking分布式追踪系统
📣读完这篇文章里你能收获到, .NET Core接入Skywalking, 了解Skywalking的整体架构设计,了解Skywalking技术指标怎么看, 生产部署时的坑全跳过
📣读完这篇文章里你能收获到
- .NET Core接入Skywalking
- 了解Skywalking的整体架构设计
- 了解Skywalking的各项技术指标怎么看
- 生产部署时的坑全跳过
文章目录
一、概述
1 概念——SkyWalking 是什么?
Application performance monitor tool for distributed systems, especially designed for microservices, cloud native and container-based (Kubernetes) architectures.
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
2 核心功能
- 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据
- 多个语言自动探针。包括 Java,.NET Core 和 Node.JS
- 轻量高效。无需大数据平台,和大量的服务器资源
- 模块化。UI、存储、集群管理都有多种机制可选
- 支持告警
- 优秀的可视化解决方案
3 系统架构
考虑到让描述更简单,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。
- 上部分
Agent
:负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。 - 下部分
SkyWalking OAP
:负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。 - 右部分
Storage
:Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。 - 左部分
SkyWalking UI
:负责提供控台,查看链路等等。
二、工具安装
- Skywalking的下载安装参考: 点击这里跳转
三、.NET项目接入
1. NuGet包引用
- 需要在每个服务里通过NuGet引用
SkyAPM.Agent.AspNetCore
,如果是.net core3.1的话需要选择1.3.0
版本
2. 添加配置文件skyapm.json
{
"SkyWalking": {
"ServiceName": "demo-application",
"Namespace": "",
"HeaderVersions": [
"sw8" //6.x以下的版本为sw6
],
"Sampling": {
"SamplePer3Secs": -1,
"Percentage": -1.0
},
"Logging": {
"Level": "Information", //可填空
"FilePath": "logs\\skyapm-{Date}.log"//可填空
},
"Transport": {
"Interval": 3000,
"ProtocolVersion": "v8", //6.x以下的版本为v6
"QueueSize": 30000,
"BatchSize": 3000,
"gRPC": {
"Servers": "localhost:11800", //ip:port
"Timeout": 10000,
"ConnectTimeout": 10000,
"ReportTimeout": 600000
}
}
}
}
- 注意:
- gRPC的Servers需要指定SkyWalking的服务端地址,默认端口是11800
v8
指的是版本号,新版本是v8
3. 配置环境变量
- 直接改启动文件
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
- 或者在启动Program.cs->Main()方法开头设置环境变量
Environment.SetEnvironmentVariable("ASPNETCORE_HOSTINGSTARTUPASSEMBLIES", "SkyAPM.Agent.AspNetCore");
4. skyapm.json文件输出
- 将skyapm.json文件的属性”复制到输出目录“ 修改为 ”如果较新则复制”
四、运行监控
- 到此就可以使用了,打开skywalking地址,查看效果
- 这里,我们可以看到.NET Core应用的服务为
demo-application
1 普通服务——General-Service
普通服务(General-Service):表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。
2 主要监控指标
- 点击
demo-application
这个服务名,可以看到该服务的【整体监控信息】
-
ApdexScore
: 性能指数,Apdex(Application Performance Index)是一个国际通用标准,Apdex 是用户对应用性能满意度的量化值。它提供了一个统一的测量和报告用户体验的方法,把最终用户的体验和应用性能作为一个完整的指标进行统一度量,其中最高为1最低为0; -
ResponseTime
:响应时间,即在选定时间内,服务所有请求的平均响应时间(ms); -
ServiceLoad-Throughput
: 服务负载-吞吐量,即在选定时间内,每分钟服务响应的请求量(cpm) -
SuccessRate
: 单位-(SLA)service level agreement,服务等级协议,SW中特指每分钟内响应成功请求的占比。 -
Slow Endpoint in Current Service
: 当前服务的慢
端点,服务指标仪表盘会列举出当前服务响应时间最大的端点Top10,如果有端点的响应时间过高,则需要进一步关注其指标(点击可以复制端点名称)。 -
Endpoint Load in Current Service
: 当前服务负载(吞吐量)高的端点,通过此可以推断出实例之间的负载情况。如果发现某个实例吞吐量较低,就需要查询实例指标(如查询该实例是不是发生了GC,或则CPU利用率过高)
3 服务实例——Service Instance
服务实例(Service Instance)
:上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程- 点击 [Instance] 选项卡,可以查到该服务的【实例列表】
4 端点——Endpoint
-
端点(Endpoint)
:对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。 这里,我们可以看到 .Net Core 应用的一个端点,为 API 接口 /demo/echo -
点击 [Endpoint] 选项卡,可以查看到该服务的【端点列表】
5 拓扑图——Topology
- 点击 [Topology] 选项卡,可以查看到该服务的【拓扑图】
6 链路——Trace
- 点击 [Trace] 选项卡,可以查看到该服务的【链路】。
7 日志——Log
- 点击 [Log] 选项卡,可以查看到该服务的【日志】。
五、生产环境部署
如果是采用第三点的启动Program.cs->Main()方法开头设置环境变量
则以下操作均可省略
1. Linux部署
- 命令行启动方式,增加systemd环境变量,语法为
Environment=ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore
2. Windows IIS方式部署
项目编译后发布到IIS,SkyWalking是不起作用的,我们需要在IIS中设置下环境变量,这里介绍设置环境变量有两种方式
- 方法一: 发布的文件里会有web.config,我们需要在web.config中添加环境变量
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MI.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_HOSTINGSTARTUPASSEMBLIES" value="SkyAPM.Agent.AspNetCore" />
<environmentVariable name="SKYWALKING__SERVICENAME" value="xx.Service" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
- 方法二:通过IIS配置
- 选中相应项目,点击配置编辑器
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)