otel simple
This commit is contained in:
parent
577f5aec95
commit
198b24ba64
@ -5,10 +5,14 @@ using Fake.Autofac;
|
|||||||
using Fake.Modularity;
|
using Fake.Modularity;
|
||||||
using FluentValidation.AspNetCore;
|
using FluentValidation.AspNetCore;
|
||||||
using Hangfire;
|
using Hangfire;
|
||||||
|
using OpenTelemetry.Resources;
|
||||||
|
using OpenTelemetry.Trace;
|
||||||
using TrackCenter.Application;
|
using TrackCenter.Application;
|
||||||
using TrackCenter.Application.Hangfire;
|
using TrackCenter.Application.Hangfire;
|
||||||
using TrackCenter.Domain.Extensions;
|
using TrackCenter.Domain.Extensions;
|
||||||
using TrackCenter.Repository;
|
using TrackCenter.Repository;
|
||||||
|
using TrackCenter.Repository.Otel;
|
||||||
|
using TrackCenter.Repository.Otel.Options;
|
||||||
|
|
||||||
namespace TrackCenter.Api;
|
namespace TrackCenter.Api;
|
||||||
|
|
||||||
@ -38,7 +42,51 @@ public class TrackCenterApiModule : FakeModule
|
|||||||
.AddFakeUnitOfWorkActionFilter();
|
.AddFakeUnitOfWorkActionFilter();
|
||||||
|
|
||||||
services.AddFakeSwaggerGen();
|
services.AddFakeSwaggerGen();
|
||||||
context.Services.AddFluentValidationAutoValidation().AddFluentValidationClientsideAdapters();
|
services.AddFluentValidationAutoValidation().AddFluentValidationClientsideAdapters();
|
||||||
|
|
||||||
|
var otelOptions = new OTelOptions()
|
||||||
|
{
|
||||||
|
EnableAspNetCore = true,
|
||||||
|
EnableHttpClient = true,
|
||||||
|
EnableSql = true
|
||||||
|
};
|
||||||
|
configuration.GetSection("OTel").Bind(otelOptions);
|
||||||
|
ActivityHelper.InitActivitySource(otelOptions);
|
||||||
|
services.AddOpenTelemetry()
|
||||||
|
.ConfigureResource(resource => resource.AddService(otelOptions.ServiceName))
|
||||||
|
.WithTracing(tracing =>
|
||||||
|
{
|
||||||
|
switch (otelOptions.SamplerType)
|
||||||
|
{
|
||||||
|
case SamplerType.AlwaysOn:
|
||||||
|
tracing.SetSampler(new AlwaysOnSampler());
|
||||||
|
break;
|
||||||
|
case SamplerType.AlwaysOff:
|
||||||
|
tracing.SetSampler(new AlwaysOffSampler());
|
||||||
|
break;
|
||||||
|
case SamplerType.ParentBasedSampler:
|
||||||
|
{
|
||||||
|
Sampler childSampler = otelOptions.ChildBasedSampler switch
|
||||||
|
{
|
||||||
|
SamplerType.AlwaysOn => new AlwaysOnSampler(),
|
||||||
|
SamplerType.AlwaysOff => new AlwaysOffSampler(),
|
||||||
|
SamplerType.TraceIdRatio =>
|
||||||
|
new TraceIdRatioBasedSampler(otelOptions.SamplerProbability),
|
||||||
|
_ => new AlwaysOnSampler(),
|
||||||
|
};
|
||||||
|
tracing.SetSampler(new ParentBasedSampler(childSampler));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SamplerType.TraceIdRatio:
|
||||||
|
tracing.SetSampler(new TraceIdRatioBasedSampler(otelOptions.SamplerProbability));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tracing.SetSampler(new AlwaysOnSampler());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tracing.AddSource(otelOptions.ServiceName);
|
||||||
|
});
|
||||||
|
|
||||||
services.AddCors(options =>
|
services.AddCors(options =>
|
||||||
{
|
{
|
||||||
|
|||||||
@ -157,5 +157,23 @@
|
|||||||
"PushTrackInterfaceCode": "A051",
|
"PushTrackInterfaceCode": "A051",
|
||||||
"TrackUpdateInterfaceCode": "A0400",
|
"TrackUpdateInterfaceCode": "A0400",
|
||||||
"OrderPodPullInterfaceCode": "A059"
|
"OrderPodPullInterfaceCode": "A059"
|
||||||
|
},
|
||||||
|
"OTel": {
|
||||||
|
"ExporterUrl": "",
|
||||||
|
"ExporterTimeoutSeconds":10, //导出超时时间(秒) 默认 10秒
|
||||||
|
"ServiceName": "TrackCenter.Api.Test",//服务名称
|
||||||
|
"ServiceVersion": "1.0.0",//服务版本
|
||||||
|
"SamplerType":"AlwaysOn",// 采样类型 默认 AlwaysOn
|
||||||
|
//枚举
|
||||||
|
//0 AlwaysOn 总是采样
|
||||||
|
//1 AlwaysOff 从不采样
|
||||||
|
//2 TraceIdRatio 概率采样 与SamplerProbability 字段结合使用
|
||||||
|
//3 ParentBasedSampler 与ChildBasedSampler 结合使用
|
||||||
|
"SamplerProbability":0.5,// 采样率 10%上报采样
|
||||||
|
"EnableStaticWeav":true,//启动静态编织 默认 true
|
||||||
|
"EnableAspNetCore": true,//启动AspNetCore 默认 true
|
||||||
|
"EnableHttpClient": true,//启用HTTP请求 默认 true
|
||||||
|
"EnableSql": true,//启动SQL 默认 true
|
||||||
|
"EnableSqlParameters": true //启动SQL参数,默认 false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,8 @@
|
|||||||
<PackageReference Include="FeishuNetSdk" Version="2.4.6" />
|
<PackageReference Include="FeishuNetSdk" Version="2.4.6" />
|
||||||
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.18" />
|
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.18" />
|
||||||
<PackageReference Include="Hangfire.Redis.StackExchange" Version="1.9.4" />
|
<PackageReference Include="Hangfire.Redis.StackExchange" Version="1.9.4" />
|
||||||
|
<PackageReference Include="OpenTelemetry.Api" Version="1.12.0" />
|
||||||
|
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.12.0" />
|
||||||
<PackageReference Include="Savorboard.CAP.InMemoryMessageQueue" Version="8.2.1"/>
|
<PackageReference Include="Savorboard.CAP.InMemoryMessageQueue" Version="8.2.1"/>
|
||||||
<PackageReference Include="DotNetCore.CAP" Version="8.2.0"/>
|
<PackageReference Include="DotNetCore.CAP" Version="8.2.0"/>
|
||||||
<PackageReference Include="DotNetCore.CAP.Dashboard" Version="8.2.0"/>
|
<PackageReference Include="DotNetCore.CAP.Dashboard" Version="8.2.0"/>
|
||||||
@ -29,8 +31,4 @@
|
|||||||
<ProjectReference Include="..\TrackCenter.Domain\TrackCenter.Domain.csproj" />
|
<ProjectReference Include="..\TrackCenter.Domain\TrackCenter.Domain.csproj" />
|
||||||
<ProjectReference Include="..\TrackCenter.Repository\TrackCenter.Repository.csproj" />
|
<ProjectReference Include="..\TrackCenter.Repository\TrackCenter.Repository.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Remove="Validations\Forewarning\FactorItemDtoValidator.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -1,4 +1,9 @@
|
|||||||
namespace TrackCenter.Repository.Otel.Options
|
using System.Text.Encodings.Web;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using System.Text.Unicode;
|
||||||
|
|
||||||
|
namespace TrackCenter.Repository.Otel.Options
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// OTel options
|
/// OTel options
|
||||||
@ -125,10 +130,27 @@
|
|||||||
/// <para>用于定义tags/events等名称</para>
|
/// <para>用于定义tags/events等名称</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public KeyNames KeyNames { get; set; }
|
public KeyNames KeyNames { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 序列化参数和返回值时使用的函数
|
/// 序列化参数和返回值时使用的函数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Func<object, string> Serializer { get; set; }
|
public Func<object, string> Serializer { get; set; } = obj =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
JsonSerializerOptions options = new JsonSerializerOptions()
|
||||||
|
{
|
||||||
|
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
|
||||||
|
ReferenceHandler = ReferenceHandler.Preserve,
|
||||||
|
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
|
||||||
|
};
|
||||||
|
return JsonSerializer.Serialize<object>(obj, options);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return obj?.ToString();
|
||||||
|
}
|
||||||
|
};
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否启用静态weaving
|
/// 是否启用静态weaving
|
||||||
/// <para>默认启用,如果设置为false,则不会对静态方法进行weaving</para>
|
/// <para>默认启用,如果设置为false,则不会对静态方法进行weaving</para>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user