前言

新项目采用的abp vnext的微服务模块化架构,所以把应用的服务拆成了很多独立模块

在初期,我们通过日志还能跟踪到问题,

后期服务越来越多(大约扩充到了十几个),随着调用链路越来越深

,问题也越来越能排查了.

往往入口报错之后,要跟好几个服务的日志 才能找到最终节点.

所以考虑引入Skywalking链路跟踪服务,来监听整个应用

什么是Skywalking

以下内容为照葫芦画瓢,觉得写的不错,所以就CV了~

Skywalking是一款分布式链路追踪组件

那么什么是链路追踪?

随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。

所以微服务面临了这些问题:

     某个核心服务挂了,导致大量报错,如何快速确定哪里出了问题?

     用户请求响应延迟高,怎么确定是哪些服务导致的?

     应用程序有性能瓶颈,怎样确定瓶颈在哪里?

     如何准实时的了解应用部署环境(CPU、内存、进程、线程、网络、带宽)情况,以便快速扩容/缩容、流量控制、业务迁移

     如何统计各个调用的性能指标,比如:吞吐量(TPS)、响应时间及错误记录等

分布式链路跟踪系统就是为了解决这些问题应运而生。

Skywalking有哪些功能?

  1. 多种监控手段。可以通过语言探针和 service mesh 获得监控数据。

  2.多个语言自动探针。包括 Java,.NET Core 和 Node.JS。

  3.轻量高效。无需大数据平台,和大量的服务器资源。

  4.模块化。UI、存储、集群管理都有多种机制可选。

  5.支持告警。

  6.优秀的可视化解决方案。

Skywalking的整体架构图

部署搭建Skywalking

Skywalking是支持容器化部署的,所以这里我们只讲如何通过Docker进行部署

1.部署ES数据库

这里说明一下.Skywalking容器里本身是自带H2数据库的并支持持久化的,如果想简化部署,可以直接使用

这里ES推荐使用7.10版本,因为7.11以上的版本 授权协议变更了 可能有法律风险

docker run -d -p 9200:9200 -p 9300:9300 --name es -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx256m" -v /home/elasticsearch/data:/usr/share/elasticsearch/data elasticsearch:7.10.1

上面的命令是运行一个基础的ES数据库,并将数据持久化到宿主机 /home/elasticsearch/data,各位可以根据自己情况 自行更改

3.部署skywalking-oap服务

docker run --name skywalking-oap
--restart always
-p 11800:11800
-p 12800:12800
-d -e TZ=Asia/Shanghai
-e SW_ES_USER=
-e SW_ES_PASSWORD=
-e SW_STORAGE=elasticsearch
-e SW_STORAGE_ES_CLUSTER_NODES=ES数据库地址:9200
-v /etc/localtime:/etc/localtime:ro
apache/skywalking-oap-server:9.6.0

3.部署skywalking-ui服务

docker run -d
--name skywalking-ui
--restart always
-p 8080:8080
-e TZ=Asia/Shanghai
-e SW_OAP_ADDRESS=http://这里填写skywalking-oap的地址:12800
-v /etc/localtime:/etc/localtime:ro
apache/skywalking-ui:9.6.0

这样,我们就完成了基本的skywalking服务的搭建

ASP.NET Core如何集成Skywalking

在.NET中接入Skywalking,主要使用  SkyAPM.Agent.AspNetCore  这个开源代理

SkyAPM.Agent.AspNetCore采用了IHostingStartup接口通过探针的形式进行接入

所以对应用的入侵性很小,几乎为0.所以接入数据很简单

我们只需要三步即可

1.给服务的宿主层添加引用:

SkyAPM.Agent.AspNetCore

2.然后添加环境变量:

ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore (PS:如果有其他的拦截,这里的环境变量可以配置多个,通过逗号分隔)

3.添加Skywalking配置项,创建skyapm.json文件:

(PS:这里不一定要创建skyapm.json文件,也可以把配置写在appsettings.json里,研究过代理工具的源码,他也读取了appsettings的配置)

类似如下:

{
"SkyWalking": {
"ServiceName": "asp-net-core-backend", //服务名
"Namespace": "",
"HeaderVersions": [
"sw8"
],
"Sampling": {
"SamplePer3Secs": -1,
"Percentage": -1.0,
"LogSqlParameterValue": false
},
"Logging": {
"Level": "Information",
"FilePath": "logs/skyapm-{Date}.log"
},
"Transport": {
"Interval": 3000,
"ProtocolVersion": "v8",
"QueueSize": 30000,
"BatchSize": 3000,
"gRPC": {
"Servers": "localhost:11800", //指向SkywalkingOAP的地址
"Timeout": 100000,
"ConnectTimeout": 100000,
"ReportTimeout": 600000
}
}
}
}

由于可能线上的数据量很大,所以除了代理类自行监听的日志以外

我们还可以通过代码自行添加Tag和Log,方便跟踪查询

可以通过依赖注入的形式,拿到IEntrySegmentContextAccessor对象,进行标记和日志记录

代码如下:

private readonly IEntrySegmentContextAccessor _segContext;
public Test(IEntrySegmentContextAccessor segContext = null)
{
_segContext = segContext;
} public void Doing()
{
_segContext.Context.Span.AddLog(LogEvent.Message(""));//记录日志
_segContext.Context.Span.AddTag("lowsql", "lowsql");//记录标签
}

可以在此基础上自行扩展,比如加到ActionFilterAttribute拦截里面进行跟踪拦截

最后

最后,我们来看看效果:

链路情况:

这样,我们就能很方便的知道哪个服务调用了哪些服务,执行了哪些SQL操作了..

Skywalking APM监控系列(一丶.NET5.0+接入Skywalking监听)的更多相关文章

  1. OSGi 系列(七)之服务的监听、跟踪、声明等

    OSGi 系列(七)之服务的监听.跟踪.声明等 1. OSGi 服务的事件监听 和 bundle 的事件监听类似,服务的事件监听是在服务注册.注销,属性被修改的时候,OSGi 框架会发出各种不同的事件 ...

  2. OSGi 系列(三)之 bundle 事件监听

    OSGi 系列(三)之 bundle 事件监听 bundle 的事件监听是在 bundle 生命周期的不同状态相互转换时,OSGi 框架会发出各种不同的事件供事先注册好的事件监听器处理. 1. 事件监 ...

  3. C# Socket系列一 简单的创建socket的监听

    socket的应用场景,在快速,稳定,保持长连接的数据传输代码.Http也是socket封装出来的,基于一次请求一次回复,然后断开的socket连接封装. 比如我们常见的游戏服务器,目前的很火的物联网 ...

  4. 另辟思路解决 Android 4.0.4 不能监听Home键的问题

    问题描述: 自从Android 4.0以后,开发人员是不能监听和屏蔽Home键的,对于KEYCODE_HOME,官方给出的描述如下: Home key. This key is handled by ...

  5. Web重温系列(三):OracleDependency实现监听数据库变化

    有个小项目(后来由另一个小组以Java开发了),内容是监控一个Oracle数据库.如果其中一个表A有数据变动,则需要将相关内容重组后通过接口发送给B. 通常的解决办法是定时查询,时间间隔可以小一点,还 ...

  6. Swift3.0 键盘高度监听获取

    方法:通过通知监听键盘的动态 1.键盘的动态有四种: public static let UIKeyboardWillShow: NSNotification.Name public static l ...

  7. vue2.0使用watch监听对象属性

    二话不说直接代码,找了一个百度都没找到.... var head=new Vue({ data:{ checkBoxState:{//监听设置开关勾选状态 notice:true, sound:tru ...

  8. 前端监控系列1| 字节的前端监控SDK是怎样设计的

    作者:彭莉,火山引擎 APM 研发工程师,2020年加入字节,负责前端监控 SDK 的开发维护.平台数据消费的探索和落地. 摘要 字节内部应用环境多样( Web 应用.小程序.Electron 应用. ...

  9. .NetCore SkyWalking APM实现服务器监控环境安装及基础使用

    下载Java 8 SDK wget  --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fw ...

  10. SkyWalking —— 分布式应用监控与链路追踪

    SkyWalking 是一个应用性能监控系统,特别为微服务.云原生和基于容器(Docker, Kubernetes, Mesos)体系结构而设计.除了应用指标监控以外,它还能对分布式调用链路进行追踪. ...

随机推荐

  1. 国标GB28181协议客户端开发(三)查询和实时视频画面

    国标GB28181协议客户端开发(三)查询和实时视频画面 本文是<国标GB28181协议设备端开发>系列的第三篇,探讨了信息查询和实时视频在GB28181协议中的应用.首先,介绍了设备目录 ...

  2. 如何制作 GitHub 个人主页

    人们在网上首先发现你的地方是哪里?也许你的社交媒体是人们搜索你时首先发现的东西,亦也许是你为自己创建的投资组合网站.然而,如果你使用GitHub来分享你的代码并参与开源项目,那么你的GitHub个人主 ...

  3. Blazor前后端框架Known功能介绍:系统安装激活及自定义

    本章介绍系统安装与激活及其自定义功能. 概述 框架内置简单的系统安装功能. 录入企业编码.名称.系统名称.产品密钥.管理员密码信息完成安装. 可自定义高级安装功能,如安装数据库等您产品所需的安装信息. ...

  4. 微信小程序生态15- 批量提交微信小程序审核的一种方式

    大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 以下是『微信小程序生态系列文章』正文! 需求背景 ...

  5. iOS 百度导航没有语音播报

    1.百度地图没有语音播报 可以尝试如下方式: 1.tts确认相关key正确,可以放入官方demo测试 2.setting中 Product Name 尝试设置成英文,在info.plist设置Bund ...

  6. 【Spring boot】 @Value注解

    一.不通过配置文件的注入属性 1.1 注入普通字符串 直接附在属性名上,在 Bean 初始化时,会赋初始值 @Value("normal") private String norm ...

  7. SkipList原理与实现

    机制 链表中查询的效率的复杂度是O(n), 有没有办法提升这个查询复杂度呢? 最简单的想法就是在原始的链表上构建多层索引. 在level 1(最底层为0), 每2位插入一个索引, 查询复杂度便是 O( ...

  8. 王道oj/problem17

    网址:http:oj.lgwenda.com/problem17 思路:指针其实就是存储地址的一个空间,LinkList=LNode* 代码: #define _CRT_SECURE_NO_WARNI ...

  9. 如何操作(增、删、改、查)常见的 HTML 元素呢?(包含原生 js 和 JQuery 语法对照)

    一.通用的操作示例 1.查询 根据 id 查询(结果为单个对象) // 原生 js 写法 var elementobj = document.getElementById("elementi ...

  10. 采用PCA算法&KMeans算法来实现用户对物品类别的喜好细分(菜篮子分析)(附带数据集下载)

    实现该项目的流程如下 """ 项目:用户对物品类别的喜好细分(菜篮子分析) 主算法:PCA降维算法 KMeans算法 总思路 1.导包 2.获取数据 3.数据处理 5.特 ...