0
点赞
收藏
分享

微信扫一扫

引入Jaeger——使用

  上一篇定义了两种使用Jaeger的方式:中间件和action过滤器,下面这个例子定义了两个服务 WebAPI01,请求WebAPI02,采用的是中间件的请求方式。

引入Jaeger——使用_microsoft


引入JaegerSharp包(或发布到自己的Nuget库里引用)


WebAPI01的Startup

using JaegerSharp;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using System;

namespace WebAPI01
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
//命名客户端
services.AddHttpClient("WebAPI02", client =>
{
client.BaseAddress = new Uri(Configuration.GetSection("DownStreamUrl").Value);
});
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI01", Version = "v1" });
});
//添加OpenTracing
services.AddOpenTracing();
//注入Jaeger
if (Convert.ToBoolean(Configuration.GetSection("OpenTracing:Enable")?.Value))
{
var agentHost = Configuration.GetSection("OpenTracing:Agent").GetValue<string>("Host");
var agentPort = Configuration.GetSection("OpenTracing:Agent").GetValue<int>("Port");
var agentMaxPacketSize = Configuration.GetSection("OpenTracing:Agent").GetValue<int>("MaxPacketSize");
services.AddJaegerSharp(agentHost, agentPort, agentMaxPacketSize);
}
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI01 v1"));
}

app.UseHttpsRedirection();
if (Convert.ToBoolean(Configuration.GetSection("OpenTracing:Enable")?.Value))
{
app.UseJaegerSharp();
}
app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}

WebAPI01的appsettings.json

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"OpenTracing": {
"Enable": true,
"Agent": {
"Host": "localhost",
"Port": 6831,
"MaxPacketSize": 0
}
},
"DownStreamUrl": "https://localhost:6001"
}

  调用下游服务 WebAPI02,下游服务 WebAPI02与WebAPI01类似,需要引入JaegerSharp,添加配置文件,指向同一个Jaeger的host,如果WebAPI02有下游API调用,继续配置调用。

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System.Net.Http;
using System.Threading.Tasks;

namespace WebAPI01.Controllers
{
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
private readonly IHttpClientFactory _clientFactory;
private readonly ILogger<HomeController> _logger;

public HomeController(ILogger<HomeController> logger, IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
_logger = logger;
}

[HttpGet]
public async Task<string> Get()
{
_logger.LogInformation("WebAPI01中请求WebAPI02");
var result = await GetWebAPI02();
return $"WebAPI01请求WebAPI02返回值 :{ result}";
}

async Task<string> GetWebAPI02()
{
using var client = _clientFactory.CreateClient("WebAPI02");
var request = new HttpRequestMessage(HttpMethod.Get, "/home");
using var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
return result;
}
else
{
return "error";
}
}
}
}

下载Jaeger(https://www.jaegertracing.io/download/),我用的是1.21.0的Windows版本,因为我的开发环境是Windows,运行jaeger-all-in-one.exe

,再跑自己的应用,访问完链路后,打开localhost:16686,查看结果如下:

查询WebAPI01结果

引入Jaeger——使用_ico_02

 点击WebAPI01:HTTP GET 7151a0a结果如下,链路清晰

引入Jaeger——使用_ico_03


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


引入Jaeger——使用_ico_04


举报

相关推荐

0 条评论