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

举报
老陈聊架构 发表于 2022/07/26 10:28:34 2022/07/26
【摘要】 📣读完这篇文章里你能收获到 - .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配置
  • 选中相应项目,点击配置编辑器
    在这里插入图片描述

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。