-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
110 lines (96 loc) · 3.61 KB
/
Program.cs
File metadata and controls
110 lines (96 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using Microsoft.AspNetCore.Mvc;
using ObservabilityExample.Extensions.Helper;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Diagnostics.Metrics;
var builder = WebApplication.CreateBuilder(args);
var tracingOtlpEndpoint = builder.Configuration["OTLP_ENDPOINT_URL"];
builder.Services.AddSingleton<GreetingService>();
var serviceName = "ObservabilityExample"; // 📌 Servis Adını Burada Tanımla
var serviceVersion = "1.0.0";
// OpenTelemetry Kaynak Tanımlama
var resourceBuilder = ResourceBuilder.CreateDefault()
.AddService(serviceName: serviceName, serviceVersion: serviceVersion);
// OpenTelemetry İzleme (Tracing) için ActivitySource oluştur
var activitySource = new ActivitySource(serviceName);
// OpenTelemetry Metrik Sistemi (Metrics)
var meter = new Meter(serviceName, serviceVersion);
var greetingsCounter = meter.CreateCounter<int>("greetings_count");
// 📌 **OpenTelemetry Konfigürasyonu**
builder.Services.AddOpenTelemetry()
.ConfigureResource(rb => rb.AddService(serviceName)) // ✅ Servis adı buraya tanımlanmalı
.WithTracing(tracing =>
{
tracing
.AddAspNetCoreInstrumentation() // 📌 HTTP isteklerini takip et
.AddHttpClientInstrumentation() // 📌 Dış HTTP isteklerini takip et
.AddSource(activitySource.Name) // 📌 Activity Source ekle
.SetResourceBuilder(resourceBuilder)
.AddOtlpExporter(opt =>
{
opt.Endpoint = new Uri("http://jaeger:4317"); // 📌 Jaeger gRPC bağlantısı
opt.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
})
.AddConsoleExporter(); // 📌 Terminale log yazdır
if (tracingOtlpEndpoint != null)
{
tracing.AddOtlpExporter(otlpOptions =>
{
otlpOptions.Endpoint = new Uri(tracingOtlpEndpoint);
});
}
else
{
tracing.AddConsoleExporter();
}
})
.WithMetrics(metrics =>
{
metrics
.AddAspNetCoreInstrumentation()
.AddMeter(meter.Name)
.AddPrometheusExporter(); // 📌 Prometheus Exporter
});
builder.Services.AddAuthorization();
builder.Services.AddControllers();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// 📌 **Prometheus için /metrics endpoint'ini doğru şekilde aç**
app.UseOpenTelemetryPrometheusScrapingEndpoint();
// Configure the Prometheus scraping endpoint
app.MapPrometheusScrapingEndpoint();
app.MapGet("/hello", () =>
{
using var activity = activitySource.StartActivity("HelloWorldActivity"); // 📌 **Jaeger Tracing Başlat**
greetingsCounter.Add(1); // **Metriği artır**
activity?.SetTag("customTag", "HelloWorld");
activity?.SetTag("response", "Hello, World!"); // **Jaeger İçin Etiket Ekle**
return "Hello, World!";
});
// Nested Greeting endpoint'i
app.MapGet("/nested-greeting", async (
HttpContext context,
[FromServices] ILogger<Program> logger,
[FromServices] IHttpClientFactory clientFactory,
[FromServices] GreetingService greetingService
) =>
{
int nestlevel = 5;
if (context.Request.Query.ContainsKey("nestlevel") &&
int.TryParse(context.Request.Query["nestlevel"], out int level))
{
nestlevel = level;
}
await greetingService.SendNestedGreetingAsync(nestlevel, logger, context, clientFactory);
});
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();