当前位置:网站首页>『Skywalking』.NET Core快速接入分布式链路追踪平台
『Skywalking』.NET Core快速接入分布式链路追踪平台
2022-07-25 21:56:00 【老陈聊架构】
关注我学习后端架构不迷路
如果对你有帮助,欢迎点个赞以示鼓励
如果下次可能还要用到,可以收藏起来,避免下次找不到
好文分享
『ScheduleMaster』快速上手一款高可用的开源分布式任务调度平台

读完这篇文章里你能收获到
- .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配置
- 选中相应项目,点击配置编辑器



边栏推荐
- 【leetcode天梯】链表 · 021 合并两个有序链表
- ansible+Crontab批部署巡检
- 【饭谈】软件测试薪资层次和分段(修仙)
- 少儿编程 电子学会图形化编程等级考试Scratch一级真题解析(判断题)2022年6月
- [test development methodology] experience of test development platform PK - choice
- How to solve the problem of using the download Plug-in for export?
- Protobuf的简单使用
- [fan Tan] after the arrival of Web3.0, where should testers go? (ten predictions and suggestions)
- In Oracle 19C version, logminer package continuous_ The outdated function of mine leads to CDC failure
- 【饭谈】测试平台为什么有组件化?模块化?很多看不到的地方设计的很好是种浪费么?
猜你喜欢

Open source RSS subscriber freshrss
![[leetcode ladder] linked list · 021 merge two ordered linked lists](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)
[leetcode ladder] linked list · 021 merge two ordered linked lists

【饭谈】如何设计好一款测试平台?

虚拟内存与磁盘

字节跳动技术面都过了,结果还是被刷了,问HR原因竟是。。。

2022 love analysis ― bank digitalization practice report

Lichuang EDA -- creation of devices 01 resistance (II)

JMeter websocket接口测试

Basic knowledge in the project
![[MAIXPY]kpu: load error:2005, ERR_ READ_ File: read file failed problem solving](/img/0b/da67b5a361a2cdfaf81568d34cf5f7.png)
[MAIXPY]kpu: load error:2005, ERR_ READ_ File: read file failed problem solving
随机推荐
Uninstall NPM and install NPM_ Use 'NPM uninstall' to uninstall the NPM package 'recommended collection'
关于接口测试你想知道的都在这儿了
[MAIXPY]kpu: load error:2005, ERR_READ_FILE: read file failed问题解决
卸载npm和安装npm_使用`npm uninstall`卸载npm软件包「建议收藏」
Pyg tutorial (8): calculate a more efficient sparse matrix form
Is there any document for synchronizing from Oracle to ODPs?
如何实现一个App应用程序,限制用户时间使用?
【饭谈】细说:下克上,向上管理,向上画饼。
【leetcode天梯】链表 · 876 查找链表中间结点
[test development methodology] experience of test development platform PK - choice
Golang: MVC models
GPON介绍及华为OLT网关注册配置流程
PE format: analyze and implement IATHOOK
【饭谈】Web3.0到来后,测试人员该何去何从?(十条预言和建议)
How to configure and use rocksdb in the flinksql environment
dovecot 设置邮箱quota
Summary of function test points of wechat sending circle of friends on mobile terminal
C语言游戏 双缓存解决闪屏问题 详细总结[通俗易懂]
Composition of dog food
Animation curves are used every day. Can you make one by yourself? After reading this article, you will!