当前位置:网站首页>『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配置
- 选中相应项目,点击配置编辑器



边栏推荐
- Sofa weekly | open source person - Niu Xuewei, QA this week, contributor this week
- Come again
- [dinner talk] those things that seem to be for the sake of the company but are actually incomprehensible (2: soft quality "eye edge" during interview)
- Redis为何选择单线程?
- Pyg tutorial (8): calculate a more efficient sparse matrix form
- 919. Complete binary tree inserter: simple BFS application problem
- 文件无法保存(文件夹已损坏无法读取怎么办)
- [test development methodology] experience of test development platform PK - choice
- 别投了,软件测试岗位饱和了...
- Having met a tester with three years' experience in Tencent, I saw the real test ceiling
猜你喜欢

How will Web3 change the future of people?

面了个腾讯三年经验的测试员,让我见识到了真正的测试天花板

PE format: analyze and implement IATHOOK

Jmeter--- set proxy recording request

Ijcai2022 meeting! Microsoft and other tutorials on domain generalization

After three years of software testing at Tencent, I was ruthlessly dismissed in July, trying to wake up my brother who was paddling

Origen foundation officially launched $ogy stacking, leading a new round of ecological benefits

【leetcode天梯】链表 · 876 查找链表中间结点

动画曲线天天用,你能自己整一个吗?看完这篇你就会了!

关于接口测试你想知道的都在这儿了
随机推荐
立创EDA——器件的创建01-电阻(二)
开源的RSS订阅器FreshRSS
jsp九大内置对象
GPON介绍及华为OLT网关注册配置流程
golang : MVC之models
The reisson distributed lock renewal failed due to network reasons, resulting in the automatic release of the lock when the business is still executing but the lock is not renewed.
[redis underlying parsing] linked list type
Create files, file permissions, ownership, and sticky bits
How to solve the problem of using the download Plug-in for export?
Children's programming electronic society graphical programming level examination scratch level 1 real problem analysis (judgment question) June 2022
Golang: MVC models
测试工作不受重视,你换位思考了吗?
如何快速搭建图片服务器[通俗易懂]
Protobuf的简单使用
Oxford University: many common insomnia drugs lack long-term safety data
[JS] the problem pointed by this
Redis configuration
在进行自动化测试,遇到验证码的问题,怎么办?
手机端微信发朋友圈功能测试点总结
[fan Tan] after the arrival of Web3.0, where should testers go? (ten predictions and suggestions)