Skywalking APM监控系列(一丶.NET5.0+接入Skywalking监听)

skywalking,apm,监控,系列,net5,接入,监听 · 浏览次数 : 15

小编点评

**Skywalking 是一个分布式链路跟踪组件,可以用来监控微服务之间的调用链路。** **它可以帮助你:** * 跟踪微服务之间的调用链路 * 确定问题所在 * 优化性能 * 统计应用指标 **以下是 Skywalking 的一些关键功能:** * 支持多种监控方式,包括日志探针和服务 mesh * 可模块化,可以用于各种微服务架构 * 支持告警 * 有优秀的可视化解决方案 **如何使用 Skywalking?** 1. 安装和配置 Skywalking 2. 创建一个 Skywalking 配置文件 3. 将配置文件加载到应用中 4. 在请求开始时调用 Skywalking Agent 5. 在请求结束时处理收集的数据 **Skywalking 的优点:** * 可扩展性 * 可维护性 * 高性能 * 易于集成 **Skywalking 的缺点:** * 需要在应用程序中添加一些代码 * 必须确保所有服务都安装 Skywalking **总结:** Skywalking 是一个非常实用的工具,可以帮助您监控微服务之间的调用链路,从而提高应用程序性能和可靠性。

正文

前言

新项目采用的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监听)相似的内容:

Skywalking APM监控系列(一丶.NET5.0+接入Skywalking监听)

前言 新项目采用的abp vnext的微服务模块化架构,所以把应用的服务拆成了很多独立模块 在初期,我们通过日志还能跟踪到问题, 后期服务越来越多(大约扩充到了十几个),随着调用链路越来越深 ,问题也越来越能排查了. 往往入口报错之后,要跟好几个服务的日志 才能找到最终节点. 所以考虑引入Skywa

Skywalking APM监控系列(二、Mysql、Linux服务器与前端JS接入Skywalking监听)

前言 上篇我们介绍了Skywalking的基本概念与如何接入.Net Core项目,感兴趣可以去看看: Skywalking APM监控系列(一丶.NET5.0+接入Skywalking监听) 本篇我们主要讲解一下Skywalking如何接入mysql数据库监听与Linux服务器的监听 其实从Sky

skywalking

-javaagent:skywalking-agent.jar -Dskywalking.agent.service_name=master5202 -Dskywalking.collector.backend_service=127.0.0.1:11800 export JAVA_HOME=/sk

[转帖]Skywalking介绍

https://www.jianshu.com/p/ffa7ddcda4ab 微服务架构已经是一个很通用的系统架构,常见的技术栈如下图所示,这张架构图基本涵括了当前微服务体系下的各种技术栈,可能不同的技术栈有不同的开源实现。 Screen Shot 2022-01-23 at 12.48.19 PM

[转帖]Skywalking学习及整合springboot

目录 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要特性 4. Skywalking架构简介 5. Spring Cloud与Skywalking实战 5.1 Skywalking部署构建 5.3 Spring Cloud整合Skywalking实

[转帖]skywalking配置nacos集群模式

版本: nameversionnacos1.1.0skywalking6.2.0elasticsearch6.3.2 es集群管理工具 cerebro-0.8.3 https://github.com/lmenezes/cerebro 前置: es、nacos至少各有一个 1 开始: 1.将 apa

SkyWalking的学习之一

SkyWalking的学习之一 前言 最近在学习应用调优诊断等内容. 现在实际工作中实质上的拆分和微服务在售前阶段 所以真正用到链路的地方比较少. 但是人生都是要向前看的. 想着一方面提高自己. 一方面也是为了以后着想. 在一个看不到未来和光的地方, 要么离开,要么继续深入掘进. Skywalkin

[转帖]Skywalking介绍

https://www.jianshu.com/p/ffa7ddcda4ab/ 1.1 2022.01.23 17:23* 字数 1733 阅读 129682评论 0喜欢 16 微服务架构已经是一个很通用的系统架构,常见的技术栈如下图所示,这张架构图基本涵括了当前微服务体系下的各种技术栈,可能不同的

[转帖]SkyWalking集成logback

1.引入skywalking的jar包,导入的包和agent版本一致 org.apache.skywalking apm-toolkit-trace 8.12.0

[转帖]Skywalking介绍

https://www.jianshu.com/p/ffa7ddcda4ab 微服务架构已经是一个很通用的系统架构,常见的技术栈如下图所示,这张架构图基本涵括了当前微服务体系下的各种技术栈,可能不同的技术栈有不同的开源实现。 Screen Shot 2022-01-23 at 12.48.19 PM