Steeltoe之Distributed Tracing篇
Steeltoe裡的分散式追蹤功能與Spring Cloud Sleuth一樣,支援在日誌中記錄追蹤資料,或者上傳到遠端的服務,比如Zipkin。
Logging
在Steeltoe中使用日誌時需要引入其特有的日誌包 Steeltoe.Extensions.Logging.DynamicLogger
。
之後還需在應用程式啟動時加入日誌提供器。
WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().ConfigureLogging((builderContext, loggingBuilder) => { loggingBuilder.AddConfiguration(builderContext.Configuration.GetSection("Logging")); // Add Steeltoe Dynamic Logging provider loggingBuilder.AddDynamicConsole(); });
接下來,引入追蹤包 Steeltoe.Management.TracingCore
。
然後在Startup類中加入追蹤服務。
public void ConfigureServices(IServiceCollection services) { services.AddDistributedTracing(Configuration); services.AddMvc(); }
最後在Action方法裡新增日誌錨點。
[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { private readonly ILogger _logger; public ValuesController(ILogger<ValuesController> logger) { _logger = logger; } // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { _logger.LogWarning("Hello log"); return new string[] { "value1", "value2" }; } }
並在appsettings.json檔案確認如下配置:
"Logging": { "LogLevel": { "Default": "Warning" } }
這樣啟動程式後,可以在輸出視窗內看到兩條日誌,這是因為Steeltoe的日誌提供器是對ASP.NET Core自身日誌器的進一步封裝,其在原始資料基礎上增加了如Spring Cloud Sleuth中一樣的額外資訊。

Exporting
如果想要把追蹤資料傳送到Zipkin服務中,還需額外引入新的包 Steeltoe.Management.ExporterCore
。
並在Startup類中增加新的服務。
public void ConfigureServices(IServiceCollection services) { services.AddDistributedTracing(Configuration); services.AddZipkinExporter(Configuration); services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseMvc(); app.UseTracingExporter(); }
appsettings.json檔案里加上上文中Zipkin的服務地址。
"management": { "tracing": { "alwaysSample": true, "egressIgnorePattern": "/api/v2/spans|/v2/apps/.*/permissions|/eureka/.*|/oauth/.*", "exporter": { "zipkin": { "endpoint": "http://localhost:10000/api/v2/spans", "validateCertificates": false } } } }
再次啟動程式,首先可以看到exportable欄位的值已從false變為了true。
然後,再到Zipkin服務中檢視,追蹤資料確實已經傳入到其中。