.NET6 MiniAPI的Tracing功能如何实现并优化以支持长尾词查询的实时追踪?

2026-03-30 14:581阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计487个文字,预计阅读时间需要2分钟。

.NET6 MiniAPI的Tracing功能如何实现并优化以支持长尾词查询的实时追踪?

Log、Metrics、Tracing是服务正常运行保障的三件套,前文已介绍过Log和Metrics,本篇主要说明Tracing。

Tracing的思路与Metrics类似,通过三方服务来实现效果。这里选用的是Jaeger。

  Log,Metrics,Tracing是为服务正常运行保驾护航的三件套,前面有介绍过Log和Metrics,本篇说明说一下Tracing。Tracing的思路和Metrics一样,通过三方服务,来达成效果,这里选用的是Jaeger,通过在MiniAPI项目中引入Jaeger和OpenTracing的库,来向Jaeger推送跟踪数据,通过访问localhost:16686/search,来查看跟踪结果。

  Jaeger下载地址:

​​  www.jaegertracing.io/download/​​

  接来了定议两个项目,Order项目和Stock项目,Order通过localhost:5160/stock/D0001");
return $"stock调用结果:{content}";
}
});

app.Run();

Stock项目

using Jaeger;
using Jaeger.Reporters;
using Jaeger.Samplers;
using Jaeger.Senders;
using Jaeger.Senders.Thrift;
using OpenTracing;
using OpenTracing.Util;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTracing();
builder.Services.AddSingleton<ITracer>(serviceProvider =>
{
var serviceName = serviceProvider.GetRequiredService<IWebHostEnvironment>().ApplicationName;
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
Jaeger.Configuration.SenderConfiguration.DefaultSenderResolver = new SenderResolver(loggerFactory)
.RegisterSenderFactory<ThriftSenderFactory>();
var tracer = new Tracer.Builder(serviceName)
.WithLoggerFactory(loggerFactory)
.WithSampler(new ConstSampler(true))
.Build();
GlobalTracer.Register(tracer);
return tracer;
});
var app = builder.Build();

app.MapGet("/stock/{no}", (string no, ILogger<Program> logger, ITracer tracer) =>
{
using (var scope = tracer.BuildSpan("库存系统").StartActive(true))
{
logger.LogInformation("按{0}查询库存", no);
return new Product { No = no, Quantity = 1324, Name = "Surface Go 3" };
}
});
app.Run();

public class Product
{
public string? No { get; set; }
public string? Name { get; set; }
public int Quantity { get; set; }
}

  用命令行运行下载的jaeger-all-in-one.exe,在浏览器或postman访问Order项目的/order地址,再进入Jaeger,查看结果:localhost:16686/search

.NET6 MiniAPI的Tracing功能如何实现并优化以支持长尾词查询的实时追踪?

通过上面的UI,可以很方便地查看请求链条上的调用,当调用关系很复杂时,特别有用。

  想要更快更方便的了解相关知识,可以关注微信公众号

本文共计487个文字,预计阅读时间需要2分钟。

.NET6 MiniAPI的Tracing功能如何实现并优化以支持长尾词查询的实时追踪?

Log、Metrics、Tracing是服务正常运行保障的三件套,前文已介绍过Log和Metrics,本篇主要说明Tracing。

Tracing的思路与Metrics类似,通过三方服务来实现效果。这里选用的是Jaeger。

  Log,Metrics,Tracing是为服务正常运行保驾护航的三件套,前面有介绍过Log和Metrics,本篇说明说一下Tracing。Tracing的思路和Metrics一样,通过三方服务,来达成效果,这里选用的是Jaeger,通过在MiniAPI项目中引入Jaeger和OpenTracing的库,来向Jaeger推送跟踪数据,通过访问localhost:16686/search,来查看跟踪结果。

  Jaeger下载地址:

​​  www.jaegertracing.io/download/​​

  接来了定议两个项目,Order项目和Stock项目,Order通过localhost:5160/stock/D0001");
return $"stock调用结果:{content}";
}
});

app.Run();

Stock项目

using Jaeger;
using Jaeger.Reporters;
using Jaeger.Samplers;
using Jaeger.Senders;
using Jaeger.Senders.Thrift;
using OpenTracing;
using OpenTracing.Util;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTracing();
builder.Services.AddSingleton<ITracer>(serviceProvider =>
{
var serviceName = serviceProvider.GetRequiredService<IWebHostEnvironment>().ApplicationName;
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
Jaeger.Configuration.SenderConfiguration.DefaultSenderResolver = new SenderResolver(loggerFactory)
.RegisterSenderFactory<ThriftSenderFactory>();
var tracer = new Tracer.Builder(serviceName)
.WithLoggerFactory(loggerFactory)
.WithSampler(new ConstSampler(true))
.Build();
GlobalTracer.Register(tracer);
return tracer;
});
var app = builder.Build();

app.MapGet("/stock/{no}", (string no, ILogger<Program> logger, ITracer tracer) =>
{
using (var scope = tracer.BuildSpan("库存系统").StartActive(true))
{
logger.LogInformation("按{0}查询库存", no);
return new Product { No = no, Quantity = 1324, Name = "Surface Go 3" };
}
});
app.Run();

public class Product
{
public string? No { get; set; }
public string? Name { get; set; }
public int Quantity { get; set; }
}

  用命令行运行下载的jaeger-all-in-one.exe,在浏览器或postman访问Order项目的/order地址,再进入Jaeger,查看结果:localhost:16686/search

.NET6 MiniAPI的Tracing功能如何实现并优化以支持长尾词查询的实时追踪?

通过上面的UI,可以很方便地查看请求链条上的调用,当调用关系很复杂时,特别有用。

  想要更快更方便的了解相关知识,可以关注微信公众号