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服务中查看,追踪数据确实已经传入到其中。

posted @   Ken.W  阅读(1065)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示