前言

大家好,今天给大家介绍一下如何在 ASP.NET Core 项目中集成 Skywalking,Skywalking 是 Apache 基金会下面的一个开源 APM 项目,有些同学可能会 APM 是干什么用的还不是太了解,那么下面我就简单的来说一下。

APM 全称是 (Application Performance Monitor)应用性能监测软件,主要是用来处理以及追踪分布式系统中的应用程序的性能问题,从而快速找出问题的根源,进而可以让开发者定位问题从而提升应用程序性能。

Skywalking 是一个APM系统,为微服务架构和云原生架构系统设计,它通过客户端探针自动收集追踪性能所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking 可以感知应用间关系和服务间关系,并进行相应的指标统计及展示。

.NET 探针

为了能够让APM的服务端正确的收集到追踪及分析所需的指标,就需要有客户端程序附属到你的应用程序上进行数据的上报,那么这个附属的程序就叫做探针(Agent)。

Skywalking 使用 Java 程序开发,默认提供了 Java 探针,那么在 .NET 系统中,就需要有 .NET 相关的探针才能够正确的将数据上报的服务端,所以 skywalking-netcore 这个项目就是专门为 .NET 开发的探针,目前支持 ASP.NET Core 以及 ASP.NET,下面我具体的来说一下这个项目吧。

.NET 探针项目:https://github.com/OpenSkywalking/skywalking-netcore

这个项目位于 OpenSkywalking 组织下是由 Skywalking 作者 吴晟 大佬发起的,主要开发者是 Lemon 同学,虽然我也是组织成员之一,但是只做了一些打杂的工作以及对 CAP 消息追踪的支持工作,感兴趣的同学欢迎 Github Star 一波...

好了,我们还是主要说一下怎么在 ASP.NET Core 中集成 Skywalking 吧。

ASP.NET Core 集成

在新版本的 Skywalking .NET Agent 中,我们实现了对 ASP.NET Core 应用程序无入侵的集成方式,这使得你可以更加方便的开启或者关闭探针数据的收集而不用修改任何代码。比如你可以在生产环境遇到性能问题时候启动它快速的定位问题,而在问题处理完成之后再关掉,非常的方便,下面我们来说一下集成的步骤。

Step 1

我们提供给了dotnet 的扩展 CLI 工具以供开发者使用从而进行集成,首先使用下面的命令来进行 Agent 的安装

dotnet tool install -g SkyWalking.DotNet.CLI

安装完成之后,你可以在命令行中使用 dotnet skywalking 或者是 dotnet-skywalking 提供的命令来安装 .NET Agent 到你的本机或者容器中。


// 注意需要在管理员权限下运行 dotnet skywalking install

Step 2

接下来,我们需要向环境变量中添加几个参数:

Windows

set DOTNET_ADDITIONAL_DEPS=%PROGRAMFILES%\dotnet\x64\additionalDeps\skywalking.agent.aspnetcore

set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyWalking.Agent.AspNetCore

Linux

export DOTNET_ADDITIONAL_DEPS=/usr/local/share/dotnet/x64/additionalDeps/skywalking.agent.aspnetcore

export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyWalking.Agent.AspNetCore

Step 3

然后,你需要给你要集成的应用取一个名字,例如我使用以下方式创建一个示例程序:

dotnet new mvc -n mvcdemo

以上命令会生成一个名为 mvcdemo 默认的 ASP.NET MVC 项目,我们需要给项目搞一个代号以便让服务端识别,就取代号名为 mvc_sample 吧,然后把这个代号使用下面的命令也添加到环境变量里面。


**Windows** set SKYWALKING__APPLICATIONCODE=mvc_sample **Linux** export SKYWALKING__APPLICATIONCODE=mvc_sample

Step 4

最后一步就是我们需要第一步的 CLI 工具生成一个配置文件,从而配置各种参数,使用以下命令生成一个配置文件:

// mvc_sample 为上面 step 3 的代号,  localhost:11800 为 Skywalking 服务端的地址

dotnet skywalking config mvc_sample localhost:11800

上面的命令会在你的项目文件夹下生成一个名为 skywalking.json 的json文件,里面是配置信息,你可以酌情修改,如下:

skywalking.json

{
"SkyWalking": {
"ApplicationCode": "Frontend",
"SpanLimitPerSegment": 300,
"Sampling": {
"SamplePer3Secs": -1
},
"Logging": {
"Level": "Information",
"FilePath": "logs\\SkyWalking-{Date}.log"
},
"Transport": {
"Interval": 3000,
"PendingSegmentLimit": 30000,
"PendingSegmentTimeout": 1000,
"gRPC": {
"Servers": "localhost:11800",
"Timeout": 2000,
"ConnectTimeout": 10000
}
}
}
}

以上,就是所有的配置工作,接下来就可以开始启动了。

启动你的项目

启动很简单,按照你习惯的常规方式使用 dotnet run 或者 dotnet mvcdemo.dll 来运行你的项目即可。

然后你就可以去 Skywalking 服务端 UI 上面看到 API 的追踪信息了。

下面是Skywalking的几个追踪界面截图,大家可以用 UI 上大致了解下:

最后

最后当然是广告时间,哈哈哈~~~

你还在为了解消息队列的复杂机制而苦恼吗?

你还在为找不到一个顺手的 EventBus 搜遍百度谷歌吗?

你还在为项目中遇到的分布式事务问题而抱头痛哭吗?

不要慌,不要急,有了她,让你少掉发!早下班!

她就是 CAPhttps://github.com/dotnetcore/CAP



一个分布式事务解决方案,同时具有 EventBus 的所有功能,什么?你说价格?不要99,也不要9块9,免费开源MIT,重要的是有 手把手视频

有了她,让你多些时间陪陪家人,会会朋友,做做大保健~

如果你觉得这个开源项目还不错,给个Github Star 支持一下那就太好了。

如果你觉得本篇文章对你有帮助的话,可以关注一下博主,顺手点个【推荐】哦。


本文地址:http://www.cnblogs.com/savorboard/p/asp-net-core-skywalking.html

作者博客:Savorboard

本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本

在 ASP.NET Core 中集成 Skywalking APM的更多相关文章

  1. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

    前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...

  2. 在Asp.Net Core中集成Kafka

    在我们的业务中,我们通常需要在自己的业务子系统之间相互发送消息,一端去发送消息另一端去消费当前消息,这就涉及到使用消息队列MQ的一些内容,消息队列成熟的框架有多种,这里你可以读这篇文章来了解这些MQ的 ...

  3. 在Asp.Net Core中集成Kafka(中)

    在上一篇中我们主要介绍如何在Asp.Net Core中同步Kafka消息,通过上一篇的操作我们发现上面一篇中介绍的只能够进行简单的首发kafka消息并不能够消息重发.重复消费.乐观锁冲突等问题,这些问 ...

  4. 在Asp.Net Core中集成ABP Dapper

    在实际的项目中,除了集成ABP框架的EntityFrameworkCore以外,在有些特定的场景下不可避免地会使用一些SQL查询语句,一方面是由于现在的EntityFrameworkCore2.X有些 ...

  5. ASP.NET Core中使用GraphQL - 第一章 Hello World

    前言 你是否已经厌倦了REST风格的API? 让我们来聊一下GraphQL. GraphQL提供了一种声明式的方式从服务器拉取数据.你可以从GraphQL官网中了解到GraphQL的所有优点.在这一系 ...

  6. ASP.NET Core 简单集成签发 JWT (JSON Web Tokens)

    什么是 JWT ? 从 https://jwt.io/ 可以了解到对 JWT 的描述:JSON Web Tokens are an open, industry standard RFC 7519 m ...

  7. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用

    写在前面   Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...

  8. 如何在 ASP.NET Core 中发送邮件

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit ...

  9. 玩转ASP.NET Core中的日志组件

    简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...

随机推荐

  1. C# Linq GroupBy 分组过滤求和

    var delOrderData = orderLogList.Where(x => (x.OlStatus == 0 && x.OlUpId == null)).GroupBy ...

  2. 唱吧DevOps的落地,微服务CI/CD的范本技术解读

    1.业务架构:从单体式到微服务 K歌亭是唱吧的一条新业务线,旨在提供线下便捷的快餐式K歌方式,用户可以在一个电话亭大小的空间里完成K歌体验.K歌亭在客户端有VOD.微信和Web共三个交互入口,业务复杂 ...

  3. Scrapy爬虫框架第八讲【项目实战篇:知乎用户信息抓取】--本文参考静觅博主所写

    思路分析: (1)选定起始人(即选择关注数和粉丝数较多的人--大V) (2)获取该大V的个人信息 (3)获取关注列表用户信息 (4)获取粉丝列表用户信息 (5)重复(2)(3)(4)步实现全知乎用户爬 ...

  4. 剑指offer(javascript实现)

    1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. funct ...

  5. CentOS 6.2+Nginx+Nagios,手机短信和qq邮箱提醒

    http://chenhao6.blog.51cto.com/6228054/1323192 标签:软件包 配置文件 nagios 服务端 监控 原创作品,允许转载,转载时请务必以超链接形式标明文章  ...

  6. BZOJ_4448_[Scoi2015]情报传递_主席树

    BZOJ_4448_[Scoi2015]情报传递_主席树 Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有 若T名(可能没有) ...

  7. MATLAB R2017b安装及破解(安装详解)

    昨天知道有这个Matlab之后就开始想办法安装,今天为各位小伙伴解答昨天安装的过程,希望能够帮助到你们! 使用的镜像软件,我放在压缩包里面 如果你们感觉下载比较麻烦(可以直接发消息给我,我会发给你们的 ...

  8. java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava

    搭建spring cloud的时候,报以下错误: java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplica ...

  9. centos7开放端口和防火墙设置

    centos7开放端口和防火墙设置. 查看防火墙状态: firewall-cmd --state 如果显示: not running 打开防火墙服务: systemctl start firewall ...

  10. Haskell学习-高阶函数

    原文地址:Haskell学习-高阶函数 高阶函数(higher-order function)就是指可以操作函数的函数,即函数可以作为参数,也可以作为返回结果.有了这两个特性,haskell可以实现许 ...