ASP.NET Core整合Zipkin链路跟踪的实现要领

    在日常利用ASP.NET Core的开拓或进修中,假如有需要利用链路跟踪系统,大大都环境下会优先选择SkyAPM。我们之前也说过SkyAPM设计确实较量优秀,巧妙的操作DiagnosticSource诊断跟踪日志,可以做到对项目无入侵方法的集成。其实尚有一款较量优秀的链路跟踪系统,也可以支持ASP.NET Core,叫Zipkin。它相对付SkyWalking来说相对轻量级,利用相对来说较量偏原生的方法,并且支持Http的形式查询和提交链路数据。因为我们老是但愿能拥有多一种的办理方案利便比拟和参考,所以接下来我们就来进修一下关于Zipkin的利用方法。

Zipkin简介

    Zipkin是由Twitter开源的一款基于Java语言开拓的漫衍式及时数据追踪系统(Distributed Tracking System),其主要成果是收罗来自各个系统的及时监控数据。该系统让开拓者可通过一个 Web 前端轻松的收集和阐明数据,譬喻用户每次请求处事的处理惩罚时间等,可利便的监测系统中存在的瓶颈。它大抵可以分为三个焦点观念

首先是上报端,它主要通过代码的形式集成到措施中,用于上报Trace数据到Collector端。

Collector认真吸收客户端发送过来的数据,生存到内存或外部存储系统中,供UI展示。

存储端可以是基于zipkin内存完全不依赖外部存储的In-Memory形式或依赖外部存储系统的形式,一般回收外部存储系统存储链路数据,究竟内存有限。它可支持的存储数据库有MySQL、Cassandra、Elasticsearch。

UI认真展示收罗的链路数据,及系统之间的依赖干系。

相对来说照旧较量清晰的,假如用一张图暗示整体架构的话,大抵如下图所示(图片来历于网络)

ASP.NET Core整合Zipkin链路跟踪的实现方式

在进修链路跟踪的进程中会设计到相关观念,我们接下来先容链路跟踪几个相关的观念

TranceId,一般一次全局的请求会有一个独一的TraceId,用于代表一次独一的请求。好比我请求了订单打点系统,而订单打点系统内部还挪用了商品打点系统,而商品打点系统还挪用了缓存系统或数据库系统。可是对全局或外部来说这是一次请求,所以会有独一的一个TraceId。

SpanId,固然全局的来说是一次大的请求,可是在这个链路中内部间还会提倡此外请求,这种内部间的每次请求会生成一个SpanId。

假如将整条链路串联起来的话,我们需要记录全局的TraceId,代表当前节点的SpanId和提倡对当前节点挪用的的父级ParentId。

然后基于链路跟踪的焦点观念,然后先容一下Zipkin衍生出来了几个相关观念

cs:Clent Sent 客户端提倡请求的时间,好比 dubbo 挪用端开始执行长途挪用之前。

cr:Client Receive 客户端收处处理惩罚完请求的时间。

ss:Server Receive 处事端处理惩罚完逻辑的时间。

sr - cs = 请求在网络上的耗时 ss - sr = 处事端处理惩罚请求的耗时 cr - ss = 回应在网络上的耗时 cr - cs = 一次挪用的整体耗时

关于zipkin观念相关的就先容这么多,接下来我们先容如何陈设Zipkin。

陈设ZipKin

    关于Zipkin常用的陈设方法或许有两种,一种是通过下载安装JDK,然后运行zipkin.jar的方法,另一种是基于Docker的方法。为了利便我回收的是基于Docker的方法陈设,因为回收原生的方法去陈设还需要安装JDK,并且操纵相比拟力贫苦。咱们上面说过,固然Zipkin可以将链路数据存放到内存中,可是这种操纵方法并不实用,实际利用进程中多回收ElasticSearch存储链路数据。所以陈设的时候需要依赖Zipkin和ElasticSearch,对付这种陈设形式回收docker-compose的方法就再符合不外了,各人可以在Zipkin官方Github中找到docker的陈设方法,地点是https://github.com/openzipkin/zipkin/tree/master/docker,官方利用的方法相比拟力巨大,下载下来docker-compose相关文件之后我简化了它的利用方法,最终修改如下

version: "3.6" services: elasticsearch: # 我利用的是7.5.0版本 image: elasticsearch:7.5.0 container_name: elasticsearch restart: always #袒露es端口 ports: - 9200:9200 environment: - discovery.type=single-node - bootstrap.memory_lock=true #es有内存要求 - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 networks: default: aliases: - elasticsearch zipkin: image: openzipkin/zipkin container_name: zipkin restart: always networks: default: aliases: - zipkin environment: #存储范例为es - STORAGE_TYPE=elasticsearch #es地点 - ES_HOSTS=elasticsearch:9200 ports: - 9411:9411 #依赖es所以在es启动完成后在启动zipkin depends_on: - elasticsearch

通过docker-compose运行编辑后的yaml文件,一条指令就可以运行起来

<PackageReference Include="zipkin4net" Version="1.5.0" /> <PackageReference Include="zipkin4net.middleware.aspnetcore" Version="1.5.0" />

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdffd.html