以Jeager方式接入
更新時間 2024-11-12 10:34:39
最近更新時間: 2024-11-12 10:34:39
分享文章
在監控c#應用之前,您需要通過客戶端將應用數據上報至APM服務端。本文介紹采用Jaeger SDK方式上報c#應用的鏈路數據,具體如下。
前提條件
完成vpce接入。
背景信息
Jaeger是Uber推出的一款開源分布式追蹤系統,兼容OpenTracing API,已在Uber大規模使用,且已加入CNCF開源組織。其主要功能是聚合來自各個異構系統的實時監控數據。
接入步驟
1、安裝依賴包
dotnet?add??package?Jaeger
dotnet?add??package?OpenTracing
dotnet?add??package?OpenTracing.Contrib.NetCore
2、查看接入點信息
應用列表的接入指引會根據您所在資源池提供“通過 HTTP 上報數據”的ENDPOINT(天翼云vpc網絡接入點)、鑒權TOKEN信息。
3、初始化SDK并設置exporters
新建文件JaegerServiceCollectionExtensions.cs,代碼如下
using?System;
using?System.Reflection;
using?Jaeger;
using?Jaeger.Reporters;
using?Jaeger.Samplers;
using?Jaeger.Senders.Thrift;
using?Microsoft.Extensions.Logging;
using?OpenTracing;
using?OpenTracing.Contrib.NetCore.Configuration;
using?OpenTracing.Util;
namespace?Microsoft.Extensions.DependencyInjection
{
????public?static?class?JaegerServiceCollectionExtensions
????{
????????private?static?readonly?Uri?_jaegerUri?=?new?Uri("endpoint");?//替換為上報數據的Endpoint
????????public?static?IServiceCollection?AddJaeger(this?IServiceCollection?services)
????????{
????????????if?(services?==?null)
????????????????throw?new?ArgumentNullException(nameof(services));
????????????services.AddSingleton<ITracer>(serviceProvider?=>
????????????{
????????????????var?serviceName?=?"";????//修改為自定義的服務名
????????????????//ILoggerFactory?loggerFactory?=?serviceProvider.GetRequiredService<ILoggerFactory>();
????????????????var?loggerFactory?=?LoggerFactory.Create(builder?=>??
????????????????{??
????????????????????//?添加控制臺日志提供程序??
????????????????????builder.AddConsole();??
????????????????????//?(可選)其他配置,例如設置日志級別??
????????????????????//?builder.SetMinimumLevel(LogLevel.Debug);??
????????????????});
????????????????ISampler?sampler?=?new?ConstSampler(sample:?true);
????????????????
????????????????//將token替換為自己的鑒權token
????????????????IReporter?reporter?=?new?RemoteReporter.Builder()
????????????????????.WithSender(new?HttpSender.Builder(_jaegerUri.ToString()).WithAuth("token").Build())
????????????????????.Build();
???????????????
????????????????//IReporter?reporter?=?new?LoggingReporter(loggerFactory);
???????????????
????????????????ITracer?tracer?=?new?Tracer.Builder(serviceName)
????????????????????.WithLoggerFactory(loggerFactory)
????????????????????.WithSampler(sampler)
????????????????????.WithReporter(reporter)
????????????????????.Build();
????????????????GlobalTracer.Register(tracer);
????????????????return?tracer;
????????????});
????????????//?Prevent?endless?loops?when?OpenTracing?is?tracking?HTTP?requests?to?Jaeger.
????????????services.Configure<HttpHandlerDiagnosticOptions>(options?=>
????????????{
????????????????options.IgnorePatterns.Add(request?=>?_jaegerUri.IsBaseOf(request.RequestUri));
????????????});
???????????
????????????return?services;
????????}
????}
}
4、開啟鏈路跟蹤
using?Jaeger;
using?Jaeger.Reporters;
using?Jaeger.Samplers;
using?Microsoft.Extensions.Logging;
var?builder?=?WebApplication.CreateBuilder(args);
builder.Services.AddJaeger();????????//ITracer對象的初始化和注冊
builder.Services.AddOpenTracing();???//開啟Http鏈路
builder.Services.AddControllers();
var?app?=?builder.Build();
app.MapControllers();
app.Run();