Skip to content

Commit 1eed44b

Browse files
committed
Refactor: Replace Jaeger with OpenTelemetry
Removed Jaeger-related code and dependencies across multiple files. Added OpenTelemetry SDK and updated configurations accordingly. Refactored methods and classes to improve parameter formatting and added nullability annotations. Updated service registration and configuration files to reflect these changes.
1 parent a1e01bb commit 1eed44b

File tree

22 files changed

+141
-402
lines changed

22 files changed

+141
-402
lines changed

containers/infrastructure-monitoring.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ services:
3535
- 9411:9411
3636
- 14268:14268
3737
- 16686:16686
38+
- 4317:4317
3839
# network_mode: host
3940
networks:
4041
- genocs

src/Genocs.Core/Builders/Extensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public static IApplicationBuilder UseGenocs(this IApplicationBuilder app)
5050
using var scope = app.ApplicationServices.CreateScope();
5151
var initializer = scope.ServiceProvider.GetRequiredService<IStartupInitializer>();
5252
Task.Run(() => initializer.InitializeAsync()).GetAwaiter().GetResult();
53-
5453
return app;
5554
}
5655

src/Genocs.MessageBrokers.RabbitMQ/IRabbitMqClient.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ namespace Genocs.MessageBrokers.RabbitMQ;
22

33
public interface IRabbitMQClient
44
{
5-
void Send(object message, IConventions conventions, string? messageId = null, string? correlationId = null,
6-
string? spanContext = null, object? messageContext = null, IDictionary<string, object> headers = null);
5+
void Send(
6+
object? message,
7+
IConventions conventions,
8+
string? messageId = null,
9+
string? correlationId = null,
10+
string? spanContext = null,
11+
object? messageContext = null,
12+
IDictionary<string, object>? headers = null);
713
}

src/Genocs.Tracing/Extensions.cs

Lines changed: 84 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
using Genocs.Core.Builders;
44
using Genocs.Logging.Configurations;
55
using Genocs.Tracing.Jaeger.Configurations;
6-
using Jaeger.Samplers;
7-
using Jaeger.Senders.Thrift;
86
using Microsoft.Extensions.DependencyInjection;
97
using Microsoft.Extensions.Logging;
108
using OpenTelemetry;
@@ -28,143 +26,113 @@ public static class Extensions
2826
public static IGenocsBuilder AddOpenTelemetry(this IGenocsBuilder builder)
2927
{
3028

31-
var appOptions = builder.GetOptions<AppOptions>(AppOptions.Position);
29+
AppOptions options = builder.GetOptions<AppOptions>(AppOptions.Position);
3230

3331
// No OpenTelemetryTracing in case of missing ServiceName
34-
if (string.IsNullOrWhiteSpace(appOptions.Service))
32+
if (string.IsNullOrWhiteSpace(options.Service))
3533
{
3634
return builder;
3735
}
3836

37+
//builder.Logging.AddOpenTelemetry(logging =>
38+
//{
39+
// logging.IncludeFormattedMessage = true;
40+
// logging.IncludeScopes = true;
41+
//});
42+
3943
var services = builder.Services;
4044

4145
// Set Custom Open telemetry
42-
services.AddOpenTelemetry().WithTracing(x =>
43-
{
44-
TracerProviderBuilder provider = x.SetResourceBuilder(ResourceBuilder.CreateDefault()
45-
.AddService(appOptions.Service)
46-
.AddTelemetrySdk()
47-
.AddEnvironmentVariableDetector())
48-
.AddSource("*");
49-
50-
var loggerOptions = builder.GetOptions<LoggerOptions>(LoggerOptions.Position);
51-
52-
// No OpenTelemetryTracing in case of missing LoggerSettings
53-
if (loggerOptions != null)
46+
services.AddOpenTelemetry()
47+
.WithTracing(x =>
5448
{
55-
if (loggerOptions.Mongo != null && loggerOptions.Mongo.Enabled)
49+
TracerProviderBuilder provider = x.SetResourceBuilder(ResourceBuilder.CreateDefault()
50+
.AddService(serviceName: options.Service, serviceVersion: options.Version, serviceInstanceId: options.Instance)
51+
.AddTelemetrySdk()
52+
.AddEnvironmentVariableDetector())
53+
.AddAspNetCoreInstrumentation()
54+
.AddHttpClientInstrumentation()
55+
.AddSource("*");
56+
57+
var loggerOptions = builder.GetOptions<LoggerOptions>(LoggerOptions.Position);
58+
59+
// No OpenTelemetryTracing in case of missing LoggerSettings
60+
if (loggerOptions != null)
5661
{
57-
// you should add MongoDB.Driver.Core.Extensions.OpenTelemetry NuGet package
58-
provider.AddMongoDBInstrumentation();
59-
}
62+
if (loggerOptions.Mongo != null && loggerOptions.Mongo.Enabled)
63+
{
64+
// you should add MongoDB.Driver.Core.Extensions.OpenTelemetry NuGet package
65+
provider.AddMongoDBInstrumentation();
66+
}
6067

61-
// Check for Console config
62-
if (loggerOptions.Console != null && loggerOptions.Console.Enabled)
63-
{
64-
// you should add OpenTelemetry.Exporter.Console NuGet package
65-
provider.AddConsoleExporter();
66-
}
68+
// Check for Console config
69+
if (loggerOptions.Console != null && loggerOptions.Console.Enabled)
70+
{
71+
// you should add OpenTelemetry.Exporter.Console NuGet package
72+
// Any OTEL supportable exporter can be used here
73+
provider.AddConsoleExporter();
74+
}
6775

68-
// Check for Azure ApplicationInsights config
69-
if (loggerOptions.Azure != null && loggerOptions.Azure.Enabled)
70-
{
71-
provider.AddAzureMonitorTraceExporter(o =>
76+
// Check for Azure ApplicationInsights config
77+
if (loggerOptions.Azure != null && loggerOptions.Azure.Enabled)
7278
{
73-
o.ConnectionString = loggerOptions.Azure.ConnectionString;
74-
});
79+
provider.AddAzureMonitorTraceExporter(o =>
80+
{
81+
o.ConnectionString = loggerOptions.Azure.ConnectionString;
82+
});
83+
}
7584
}
76-
}
7785

78-
var jaegerOptions = builder.GetOptions<JaegerOptions>(JaegerOptions.Position);
86+
var jaegerOptions = builder.GetOptions<JaegerOptions>(JaegerOptions.Position);
7987

80-
if (jaegerOptions != null && jaegerOptions.Enabled)
81-
{
82-
83-
provider.AddJaegerExporter(o =>
88+
if (jaegerOptions != null && jaegerOptions.Enabled)
8489
{
85-
o.AgentHost = jaegerOptions.UdpHost;
86-
o.AgentPort = jaegerOptions.UdpPort;
87-
o.MaxPayloadSizeInBytes = jaegerOptions.MaxPacketSize;
88-
o.ExportProcessorType = ExportProcessorType.Batch;
89-
o.BatchExportProcessorOptions = new BatchExportProcessorOptions<System.Diagnostics.Activity>
90-
{
91-
MaxQueueSize = 2048,
92-
ScheduledDelayMilliseconds = 5000,
93-
ExporterTimeoutMilliseconds = 30000,
94-
MaxExportBatchSize = 512,
95-
};
96-
});
97-
}
98-
99-
/*
100-
Action<ResourceBuilder> appResourceBuilder =
101-
resource => resource
102-
.AddDetector(new ContainerResourceDetector());
103-
104-
builder.Services.AddOpenTelemetry()
105-
.ConfigureResource(appResourceBuilder)
106-
.WithTracing(tracerBuilder => tracerBuilder
107-
.AddRedisInstrumentation(
108-
cartStore.GetConnection(),
109-
options => options.SetVerboseDatabaseStatements = true)
110-
.AddAspNetCoreInstrumentation()
111-
.AddGrpcClientInstrumentation()
112-
.AddHttpClientInstrumentation()
113-
.AddOtlpExporter())
114-
.WithMetrics(meterBuilder => meterBuilder
115-
.AddRuntimeInstrumentation()
116-
.AddAspNetCoreInstrumentation()
117-
.AddOtlpExporter());
118-
*/
119-
});
120-
121-
return builder;
122-
}
12390

124-
private static ISampler GetSampler(JaegerOptions options)
125-
{
126-
switch (options.Sampler)
127-
{
128-
case "const": return new ConstSampler(true);
129-
case "rate": return new RateLimitingSampler(options.MaxTracesPerSecond);
130-
case "probabilistic": return new ProbabilisticSampler(options.SamplingRate);
131-
default: return new ConstSampler(true);
132-
}
133-
}
134-
135-
private static HttpSender BuildHttpSender(JaegerOptions.HttpSenderSettings? options)
136-
{
137-
if (options is null)
138-
{
139-
throw new Exception("Missing Jaeger HTTP sender options.");
140-
}
141-
142-
if (string.IsNullOrWhiteSpace(options.Endpoint))
143-
{
144-
throw new Exception("Missing Jaeger HTTP sender endpoint.");
145-
}
91+
provider.AddOtlpExporter(o =>
92+
{
93+
o.Endpoint = new Uri(jaegerOptions.Endpoint);
94+
o.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.Grpc;
95+
o.ExportProcessorType = ExportProcessorType.Batch;
96+
o.BatchExportProcessorOptions = new BatchExportProcessorOptions<System.Diagnostics.Activity>
97+
{
98+
MaxQueueSize = 2048,
99+
ScheduledDelayMilliseconds = 5000,
100+
ExporterTimeoutMilliseconds = 30000,
101+
MaxExportBatchSize = 512,
102+
};
103+
});
104+
}
146105

147-
var builder = new HttpSender.Builder(options.Endpoint);
148-
if (options.MaxPacketSize > 0)
149-
{
150-
builder = builder.WithMaxPacketSize(options.MaxPacketSize);
151-
}
106+
/*
107+
Action<ResourceBuilder> appResourceBuilder =
108+
resource => resource
109+
.AddDetector(new ContainerResourceDetector());
110+
111+
builder.Services.AddOpenTelemetry()
112+
.ConfigureResource(appResourceBuilder)
113+
.WithTracing(tracerBuilder => tracerBuilder
114+
.AddRedisInstrumentation(
115+
cartStore.GetConnection(),
116+
options => options.SetVerboseDatabaseStatements = true)
117+
.AddAspNetCoreInstrumentation()
118+
.AddGrpcClientInstrumentation()
119+
.AddHttpClientInstrumentation()
120+
.AddOtlpExporter())
121+
122+
*/
123+
}).WithMetrics(x =>
124+
{
125+
MeterProviderBuilder provider = x.SetResourceBuilder(ResourceBuilder.CreateDefault());
152126

153-
if (!string.IsNullOrWhiteSpace(options.AuthToken))
154-
{
155-
builder = builder.WithAuth(options.AuthToken);
156-
}
127+
provider.AddConsoleExporter();
128+
provider.AddAspNetCoreInstrumentation();
157129

158-
if (!string.IsNullOrWhiteSpace(options.Username) && !string.IsNullOrWhiteSpace(options.Password))
159-
{
160-
builder = builder.WithAuth(options.Username, options.Password);
161-
}
130+
// provider.AddRuntimeInstrumentation();
131+
provider.AddHttpClientInstrumentation();
132+
provider.AddOtlpExporter();
162133

163-
if (!string.IsNullOrWhiteSpace(options.UserAgent))
164-
{
165-
builder = builder.WithUserAgent(options.Username);
166-
}
134+
});
167135

168-
return builder.Build();
136+
return builder;
169137
}
170138
}

src/Genocs.Tracing/Genocs.Tracing.csproj

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,14 @@
4545
<PackageReference Include="Genocs.MessageBrokers.RabbitMQ" Version="6.1.*" />
4646
</ItemGroup>
4747

48-
<ItemGroup>
49-
<PackageReference Include="Jaeger" Version="1.0.3" />
50-
</ItemGroup>
51-
5248
<ItemGroup>
5349
<PackageReference Include="Azure.Monitor.OpenTelemetry.Exporter" Version="1.3.0" />
5450
<PackageReference Include="MongoDB.Driver.Core.Extensions.OpenTelemetry" Version="1.0.0" />
5551
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.9.0" />
56-
<PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="1.5.1" />
5752
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
5853
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
54+
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.9.0" />
55+
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
5956
</ItemGroup>
6057

6158
</Project>

src/Genocs.Tracing/Jaeger/Builders/JaegerOptionsBuilder.cs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,9 @@ public IJaegerOptionsBuilder WithServiceName(string serviceName)
1818
return this;
1919
}
2020

21-
public IJaegerOptionsBuilder WithUdpHost(string udpHost)
21+
public IJaegerOptionsBuilder WithEndpoint(string endpoint)
2222
{
23-
_options.UdpHost = udpHost;
24-
return this;
25-
}
26-
27-
public IJaegerOptionsBuilder WithUdpPort(int udpPort)
28-
{
29-
_options.UdpPort = udpPort;
23+
_options.Endpoint = endpoint;
3024
return this;
3125
}
3226

@@ -36,12 +30,6 @@ public IJaegerOptionsBuilder WithMaxPacketSize(int maxPacketSize)
3630
return this;
3731
}
3832

39-
public IJaegerOptionsBuilder WithSampler(string sampler)
40-
{
41-
_options.Sampler = sampler;
42-
return this;
43-
}
44-
4533
public IJaegerOptionsBuilder WithMaxTracesPerSecond(double maxTracesPerSecond)
4634
{
4735
_options.MaxTracesPerSecond = maxTracesPerSecond;

src/Genocs.Tracing/Jaeger/Configurations/IJaegerOptionsBuilder.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ public interface IJaegerOptionsBuilder
44
{
55
IJaegerOptionsBuilder Enable(bool enabled);
66
IJaegerOptionsBuilder WithServiceName(string serviceName);
7-
IJaegerOptionsBuilder WithUdpHost(string udpHost);
8-
IJaegerOptionsBuilder WithUdpPort(int udpPort);
7+
IJaegerOptionsBuilder WithEndpoint(string endpoint);
98
IJaegerOptionsBuilder WithMaxPacketSize(int maxPacketSize);
10-
IJaegerOptionsBuilder WithSampler(string sampler);
119
IJaegerOptionsBuilder WithMaxTracesPerSecond(double maxTracesPerSecond);
1210
IJaegerOptionsBuilder WithSamplingRate(double samplingRate);
1311
JaegerOptions Build();

src/Genocs.Tracing/Jaeger/Configurations/JaegerOptions.cs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,12 @@ public class JaegerOptions
1616
public bool Enabled { get; set; }
1717

1818
public string? ServiceName { get; set; }
19-
public string? UdpHost { get; set; }
20-
public int UdpPort { get; set; }
19+
20+
/// <summary>
21+
/// The Jaeger agent endpoint.
22+
/// </summary>
23+
public string Endpoint { get; set; } = "http://localhost:4317";
2124
public int MaxPacketSize { get; set; } = 64967;
22-
public string? Sampler { get; set; }
2325
public double MaxTracesPerSecond { get; set; } = 5;
2426
public double SamplingRate { get; set; } = 0.2;
25-
public IEnumerable<string>? ExcludePaths { get; set; }
26-
public string? Sender { get; set; }
27-
public HttpSenderSettings? HttpSender { get; set; }
28-
29-
public class HttpSenderSettings
30-
{
31-
public string? Endpoint { get; set; }
32-
public string? AuthToken { get; set; }
33-
public string? Username { get; set; }
34-
public string? Password { get; set; }
35-
public string? UserAgent { get; set; }
36-
public int MaxPacketSize { get; set; } = 1048576;
37-
}
3827
}

0 commit comments

Comments
 (0)