『Skywalking』.NET Core快速接入分布式链路追踪平台

本文涉及的产品
可观测链路 OpenTelemetry 版,每月50GB免费额度
简介: 📣读完这篇文章里你能收获到- .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 :负责提供控台,查看链路等等。

请添加图片描述

二、工具安装

请添加图片描述

三、.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
      }
    }
  }
}
  • 注意:
  1. gRPC的Servers需要指定SkyWalking的服务端地址,默认端口是11800
  2. 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中设置下环境变量,这里介绍设置环境变量有两种方式
  1. 方法一: 发布的文件里会有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>
  1. 方法二:通过IIS配置
  • 选中相应项目,点击配置编辑器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
1月前
|
存储 数据采集 监控
SkyWalking全景解析:从原理到实现的分布式追踪之旅
SkyWalking全景解析:从原理到实现的分布式追踪之旅
583 1
|
13天前
|
消息中间件 存储 Java
Kafka 详解:全面解析分布式流处理平台
Kafka 详解:全面解析分布式流处理平台
17 0
|
1月前
|
数据采集 存储 运维
如何使用SkyWalking收集分析分布式系统的追踪数据
通过以上步骤,你可以使用 SkyWalking 工具实现对分布式系统的数据采集和可视化。SkyWalking 提供了强大的追踪和度量功能,帮助开发者和运维人员更好地理解系统的性能状况。欢迎关注威哥爱编程,一起学习成长。
|
1月前
|
存储 缓存 监控
Java一分钟之-Apache Ignite:分布式内存计算平台
【5月更文挑战第21天】Apache Ignite是一款开源的分布式内存计算平台,涉及内存数据网格、流处理和计算服务。本文关注其常见问题,如数据丢失、分区不均、内存管理和网络延迟。为保证数据一致性,建议使用适当的數據模式和备份策略,实现数据持久化。优化内存配置和监控网络可提升性能与稳定性。提供的Java代码示例展示了如何创建分区缓存并设置备份。正确配置和管理Ignite是构建高可用、高性能应用的关键,持续监控集群状态至关重要。
49 0
|
1月前
|
分布式计算 Java 调度
[Java 探索者之路] 一个大厂都在用的分布式任务调度平台
[Java 探索者之路] 一个大厂都在用的分布式任务调度平台
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能平台PAI产品使用合集之如何在CPU服务器上使用PAIEasyRec进行分布式训练
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
1月前
|
分布式计算 资源调度 Hadoop
Apache Hadoop入门指南:搭建分布式大数据处理平台
【4月更文挑战第6天】本文介绍了Apache Hadoop在大数据处理中的关键作用,并引导初学者了解Hadoop的基本概念、核心组件(HDFS、YARN、MapReduce)及如何搭建分布式环境。通过配置Hadoop、格式化HDFS、启动服务和验证环境,学习者可掌握基本操作。此外,文章还提及了开发MapReduce程序、学习Hadoop生态系统和性能调优的重要性,旨在为读者提供Hadoop入门指导,助其踏入大数据处理的旅程。
612 0
|
1月前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
37 0
|
1月前
深入.net平台的分层开发
深入.net平台的分层开发
|
1月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
826 0