1. 程式人生 > >.NET Core微服務之基於Steeltoe使用Zipkin實現分散式追蹤

.NET Core微服務之基於Steeltoe使用Zipkin實現分散式追蹤

一、關於Spring Cloud Sleuth與Zipkin

  在 SpringCloud 之中提供的 Sleuth 技術可以實現微服務的呼叫跟蹤,也就是說它可以自動的形成一個呼叫連線線,通過這個連線線使得開發者可以輕鬆的找到所有微服務間關係,同時也可以獲取微服務所耗費的時間, 這樣就可以進行微服務呼叫狀態的監控以及相應的資料分析。

  

  Zipkin是一個分散式追蹤系統,它有助於收集解決微服務架構中延遲問題所需的時序資料。它管理這些資料的收集和查詢。

  應用程式用於向Zipkin報告時間資料。Zipkin UI還提供了一個依賴關係圖,顯示每個應用程式有多少跟蹤請求。如果你正在解決延遲問題或錯誤問題,則可以根據應用程式,跟蹤長度,註釋或時間戳過濾或排序所有跟蹤。一旦選擇了一個跟蹤,你可以看到每個跨度所花費的總跟蹤時間的百分比,從而可以確定問題應用程式。

二、快速構建Zipkin Server

  示例版本:Spring Boot 1.5.15.RELEASE,Spring Cloud Edgware.SR3

  (1)pom.xml 新增相關依賴包

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 熱啟動,熱部署依賴包,為了除錯方便,加入此包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true
</optional> </dependency> <!-- zipkin --> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> </dependency> </dependencies> <!-- spring cloud dependencies --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.SR3</version> <type>pom</type> <scope>import
</scope> </dependency> </dependencies> </dependencyManagement>

  (2)啟動類新增相關注解

@SpringBootApplication
@EnableZipkinServer
public class ZipkinServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZipkinServiceApplication.class, args);
    }
}

  (3)配置檔案

server:
  port: 9411

spring:
  application:
    name: zipkin-service

  最終啟動後,訪問zipkin主介面:

三、ASP.NET Core整合Zipkin

3.1 示例環境準備

  這裡仍然基於第一篇的示例進行修改,各個專案的角色如下表所示:

微服務專案名稱 專案微服務中的角色
eureka-service   服務發現&註冊(Spring Boot)
zuul-service   API閘道器 (Spring Boot)  
zipkin-service   分散式追蹤服務 (Spring Boot)  
agent-service   服務提供者 (ASP.NET Core)
client-service   服務提供者 (ASP.NET Core)
premium-service   服務提供者&服務消費者 (ASP.NET Core)

  所有相關服務(除zipkin-service外)註冊到Eureka之後的服務列表:

  

3.2 想要測試的服務呼叫鏈路

  瀏覽器通過API閘道器(Zuul)呼叫Premium-Service的API,在這個API中會呼叫Client-Service的API,當然,會通過服務發現(Eureka)來獲取Client-Service的URL。

3.3 以PremiumService為例新增相關配置

  這裡以PremiumService為例,其他幾個Service參照下面的步驟依次新增配置即可。

  (1)新增相關NuGet包

PM> Install-Package Steeltoe.Extensions.Logging.DynamicLogger 

PM> Install-Package Steeltoe.Management.ExporterCore     

PM> Install-Package Steeltoe.Management.TracingCore

  (2)Program類新增動態日誌Provider

    public class Program
    {
        ......

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseUrls("http://*:8030")
                .UseStartup<Startup>()
                .ConfigureLogging((builderContext, loggingBuilder) =>
                {
                    loggingBuilder.AddConfiguration(builderContext.Configuration.GetSection("Logging"));
                    // Add Steeltoe Dynamic Logging Provider
                    loggingBuilder.AddDynamicConsole();
                });
    }

  Steeltoe的日誌提供器是對ASP.NET Core自身日誌器的進一步封裝,其在原始資料基礎上增加了如Spring Cloud Sleuth中一樣的額外資訊。

  (3)Starup啟動類中新增相關配置

    public class Startup
    {
        ......

        public void ConfigureServices(IServiceCollection services)
        {
            ......
            // Add Steeltoe Distributed Tracing
            services.AddDistributedTracing(Configuration);
            // Export traces to Zipkin
            services.AddZipkinExporter(Configuration);

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            // Add Hystrix Metrics to container
            services.AddHystrixMetricsStream(Configuration);
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            ......

            app.UseMvc();
            
            // Start Hystrix metrics stream service
            app.UseHystrixMetricsStream();
            // Start up trace exporter
            app.UseTracingExporter();
        }
    }

  (4)appSettings新增相關配置 => 主要是zipkin server的相關資訊

"management": {
    "tracing": {
      "alwaysSample": true,
      "egressIgnorePattern": "/api/v2/spans|/v2/apps/.*/permissions|/eureka/.*|/oauth/.*",
      "exporter": {
        "zipkin": {
          "endpoint": "http://localhost:9411/api/v2/spans",
          "validateCertificates": false
        }
      }
    }
  }

四、快速驗證測試

  (1)啟動Eureka, Zuul, Zipkin以及Premium-Service和Client-Service

  (2)通過Zuul呼叫API 

  

  (3)通過Zipkin UI檢視Trace

  

  點選具體的Trace檢視Details

  

  (4)點選“依賴分析”按鈕檢視依賴圖

  

五、小結

  本文簡單地介紹了一下Spring Cloud Seluth與Zipkin,然後通過Java快速地構建了一個Zipkin Server,通過在ASP.NET Core中整合Zipkin並做了一個基本的微服務呼叫追蹤Demo。本示例的Zipkin Server的追蹤資料是基於記憶體,實際中應該整合ELK進行持久化。當然,我們也可以直接通過Zipkin的.NET客戶端來做。

示例程式碼

參考資料

作者:周旭龍

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。

相關推薦

.NET Core服務基於Exceptionless實現分散式日誌記錄

一、Exceptionless極簡介紹   Exceptionless 是一個開源的實時的日誌收集框架,它可以應用在基於 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技術開發的應用程式中,並且提供了REST介面可以應

.NET Core服務基於Consul實現服務治理

請求轉發 1.0 asp.net AC port prefix 我們 tle nan 一、Consul基礎介紹   Consul是HashiCorp公司推出的開源工具,用於實現分布式系統的服務發現與配置。與其他分布式服務註冊與發現的方案,比如 Airbnb的Smart

.NET Core服務基於Consul實現服務治理(續)

shell pla code tst 分層 編輯 set req \n 上一篇發布之後,這一篇把上一篇沒有弄到的東西補一下,也算是給各位前來詢問的朋友的一些回復吧。一、Consul服務註冊之配置文件方式1.1 重溫Consul實驗集群  這裏我們有三個Consul Serv

基於Apollo實現.NET Core服務統一配置(測試環境-單機) .NET Core服務基於Apollo實現統一配置中心

一、前言 注:此篇只是為測試環境下的快速入門。後續會給大家帶來生產環境下得實戰開發。 具體的大家可以去看官方推薦。非常的簡單明瞭。以下介紹引用官方內容: Apollo(阿波羅)是攜程框架部門研發的分散式配置中心,能夠集中化管理應用不同環境、不同叢集的配置,配置修改後能夠實時推送到應用端,並且具

.NET Core服務基於Apollo實現統一配置中心

一、關於統一配置中心與Apollo   在微服務架構環境中,專案中配置檔案比較繁雜,而且不同環境的不同配置修改相對頻繁,每次釋出都需要對應修改配置,如果配置出現錯誤,需要重新打包釋出,時間成本較高,因此需要做統一的配置中心,能做到自動更新配置檔案資訊,解決以上問題。   Apollo(阿波羅)是攜

.NET Core服務基於Ocelot實現API閘道器服務

一、啥是API閘道器?   API 閘道器一般放到微服務的最前端,並且要讓API 閘道器變成由應用所發起的每個請求的入口。這樣就可以明顯的簡化客戶端實現和微服務應用程式之間的溝通方式。以前的話,客戶端不得不去請求微服務A(假設為Customers),然後再到微服務B(假設為Orders),然後是微服

.NET Core服務基於MassTransit實現資料最終一致性(Part 2)

一、案例結構與說明   在上一篇中,我們瞭解了MassTransit這個開源元件的基本用法,這一篇我們結合一個小案例來了解在ASP.NET Core中如何藉助MassTransit+Quartz.Net來實現資料的最終一致性。當然,實現資料的最終一致性有很多方案,這裡只是舉一種我所學到的比較簡單易於學習

.NET Core服務基於MassTransit實現資料最終一致性(Part 1)

一、預備知識:資料一致性   關於資料一致性的文章,園子裡已經有很多了,如果你還不瞭解,那麼可以通過以下的幾篇文章去快速地瞭解瞭解,有個感性認識即可。   必須要了解的點:ACID、CAP、BASE、強一致性、弱一致性、最終一致性。      CAP理論由加州大學伯克利分校的計算機

.NET Core服務基於Ocelot實現API閘道器服務(續)

一、負載均衡與請求快取 1.1 負載均衡   為了驗證負載均衡,這裡我們配置了兩個Consul Client節點,其中ClientService分別部署於這兩個節點內(192.168.80.70與192.168.80.71)。   為了更好的展示API Repsonse來自哪個節點,我們更改一下

.NET Core服務基於Steeltoe使用Eureka實現服務註冊與發現

一、關於Steeltoe與Spring Cloud    Steeltoe is an open source project that enables .NET developers to implement industry standard best practices when b

.NET Core服務基於Steeltoe整合Zuul實現統一API閘道器

一、關於Spring Cloud Zuul   API Gateway(API GW / API 閘道器),顧名思義,是出現在系統邊界上的一個面向API的、序列集中式的強管控服務,這裡的邊界是企業IT系統的邊界。   Zuul 是Netflix 提供的一個開源元件,致力於在雲平臺上提供動態路由,監

.NET Core服務基於Steeltoe使用Zipkin實現分散式追蹤

一、關於Spring Cloud Sleuth與Zipkin   在 SpringCloud 之中提供的 Sleuth 技術可以實現微服務的呼叫跟蹤,也就是說它可以自動的形成一個呼叫連線線,通過這個連線線使得開發者可以輕鬆的找到所有微服務間關係,同時也可以獲取微服務所耗費的時間, 這樣就可以進行微服

.NET Core服務基於Jenkins+Docker實現持續部署(Part 1)

一、CI, CD 與Jenkins   網際網路軟體的開發和釋出,已經形成了一套標準流程,最重要的組成部分就是持續整合(Continuous integration,簡稱 CI) => 持續整合指的是,頻繁地(一天多次)將程式碼整合到主幹。   它的好處主要有兩個: 快速發現錯

.NET Core服務基於App.Metrics+InfluxDB+Grafana實現統一效能監控

一、關於App.Metrics+InfluxDB+Grafana 1.1 App.Metrics      App.Metrics是一款開源的支援.NET Core的監控外掛,它還可以支援跑在.NET Framework上的應用程式(版本 >= 4.5.2)。官方文件地址:https://ww

.NET Core服務基於Polly+AspectCore實現熔斷與降級機制

一、熔斷、降級與AOP 1.1 啥是熔斷?   在廣義的解釋中,熔斷主要是指為控制股票、期貨或其他金融衍生產品的交易風險,為其單日價格波動幅度規定區間限制,一旦成交價觸及區間上下限,交易則自動中斷一段時間(“熔即斷”),或就此“躺平”而不得超過上限或下限(“熔而不斷”)。   而對於微服務來說,

.NET Core服務基於Ocelot+Butterfly實現分散式追蹤

一、什麼是Tracing?   微服務的特點決定了功能模組的部署是分散式的,以往在單應用環境下,所有的業務都在同一個伺服器上,如果伺服器出現錯誤和異常,我們只要盯住一個點,就可以快速定位和處理問題,但是在微服務的架構下,大部分功能模組都是單獨部署執行的,彼此通過匯流排互動,都是無狀態的服務,這種架構下,

.NET Core服務基於Ocelot+IdentityServer實現統一驗證與授權

一、案例結構總覽  這裡,假設我們有兩個客戶端(一個Web網站,一個移動App),他們要使用系統

.NET Core服務基於Steeltoe使用Hystrix熔斷保護與監控

一、關於Spring Cloud Hystrix      在微服務架構中,我們將系統拆分為很多個服務,各個服務之間通過註冊與訂閱的方式相互依賴,由於各個服務都是在各自的程序中執行,就有可能由於網路原因或者服務自身的問題導致呼叫故障或延遲,隨著服務的積壓,可能會導致服務崩潰。為了解決這一系列的問題

.NET Core服務基於Steeltoe使用Spring Cloud Config統一管理配置

一、關於Spring Cloud Config   在分散式系統中,每一個功能模組都能拆分成一個獨立的服務,一次請求的完成,可能會呼叫很多個服務協調來完成,為了方便服務配置檔案統一管理,更易於部署、維護,所以就需要分散式配置中心元件了,在Spring Cloud中,就有這麼一個分散式配置中心元件 —

.NET Core服務基於IdentityServer建立授權與驗證服務(續)

上一篇我們基於IdentityServer4建立了一個AuthorizationServer,並且繼承了QuickStartUI,能夠成功獲取Token了。這一篇我們瞭解下如何整合API Service和MVC Web Application。 一、整合API Service 1.1 新增ASP.NE