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

简介: 📣读完这篇文章里你能收获到- .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,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
11月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
在数字化转型中,企业亟需从海量数据中快速提取价值并转化为业务增长动力。5月15日19:00-21:00,阿里云三位技术专家将讲解Kafka与Flink的强强联合方案,帮助企业零门槛构建分布式实时分析平台。此组合广泛应用于实时风控、用户行为追踪等场景,具备高吞吐、弹性扩缩容及亚秒级响应优势。直播适合初学者、开发者和数据工程师,参与还有机会领取定制好礼!扫描海报二维码或点击链接预约直播:[https://developer.aliyun.com/live/255088](https://developer.aliyun.com/live/255088)
681 35
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
|
11月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
325 11
|
6月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
570 6
|
7月前
|
消息中间件 监控 Java
Apache Kafka 分布式流处理平台技术详解与实践指南
本文档全面介绍 Apache Kafka 分布式流处理平台的核心概念、架构设计和实践应用。作为高吞吐量、低延迟的分布式消息系统,Kafka 已成为现代数据管道和流处理应用的事实标准。本文将深入探讨其生产者-消费者模型、主题分区机制、副本复制、流处理API等核心机制,帮助开发者构建可靠、可扩展的实时数据流处理系统。
712 4
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
581 5
|
Java 关系型数据库 MySQL
新一代 Cron-Job分布式任务调度平台 部署指南
简单易用、超低延迟,支持用户权限管理、多语言客户端和多租户接入的分布式任务调度平台。 支持任何Cron表达式的任务调度,支持常用的分片和随机策略;支持失败丢弃、失败重试的失败策略;支持动态任务参数。
459 105
|
Java 调度 Maven
新一代 Cron-Job 分布式任务调度平台 正式发布!
简单易用、超低延迟,支持用户权限管理、多语言客户端和多租户接入的分布式任务调度平台。 支持任何Cron表达式的任务调度,支持常用的分片和随机策略;支持失败丢弃、失败重试的失败策略;支持动态任务参数。
532 110
|
SQL 监控 Go
新一代 Cron-Job分布式调度平台,v1.0.8版本发布,支持Go执行器SDK!
现代化的Cron-Job分布式任务调度平台,支持Go语言执行器SDK,多项核心优势优于其他调度平台。
275 8
|
10月前
|
运维 监控 Linux
WGCLOUD运维平台的分布式计划任务功能介绍
WGCLOUD是一款免费开源的运维监控平台,支持主机与服务器性能监控,具备实时告警和自愈功能。本文重点介绍其计划任务功能模块,可统一管理Linux和Windows主机的定时任务。相比手动配置crontab或Windows任务计划,WGCLOUD提供直观界面,通过添加cron表达式、执行指令或脚本并选择主机,即可轻松完成任务设置,大幅提升多主机任务管理效率。
下一篇
开通oss服务