6️⃣ راهاندازی OpenTelemetry 🔍
درک اینکه داخل اپلیکیشن شما دقیقاً چه اتفاقی میافتد، حیاتی است. OpenTelemetry یک روش استاندارد برای جمعآوری و تحلیل دادههای telemetry از اپلیکیشنها فراهم میکند و به شما دید (visibility) دقیقی نسبت به رفتار سیستم میدهد. 👁
هر اپلیکیشن وابستگیهای خارجی دارد؛ مثل دیتابیسها، cacheها، APIها و سایر سرویسها. مانیتور کردن این وابستگیها برای درک عملکرد اپلیکیشن و نحوهی تعامل آن با بقیهی سیستم ضروری است. ⚙️
ءOpenTelemetry سه نوع داده از اپلیکیشن جمعآوری میکند:
• ءLogs توضیح میدهند چه اتفاقی افتاده است. 📝
• ءTraces نشان میدهند عملیات کجا انجام شده و چقدر زمان برده است. ⏱️
• ءMetrics نشان میدهند رویدادها با چه فرکانسی رخ میدهند. 📊
وقتی از Aspire استفاده میکنید، OpenTelemetry از قبل برای شما پیکربندی شده است. پروژهی ServiceDefaults شامل تنظیمات observability است:
public static TBuilder ConfigureOpenTelemetry<TBuilder>(this TBuilder builder)
where TBuilder : IHostApplicationBuilder
{
builder.Logging.AddOpenTelemetry(logging =>
{
logging.IncludeFormattedMessage = true;
logging.IncludeScopes = true;
});
builder.Services.AddOpenTelemetry()
.WithMetrics(metrics =>
{
metrics.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddRuntimeInstrumentation();
})
.WithTracing(tracing =>
{
tracing.AddSource(builder.Environment.ApplicationName)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation();
});
builder.AddOpenTelemetryExporters();
return builder;
}
ءAspire بهصورت خودکار OpenTelemetry را طوری تنظیم میکند که logs، metrics و traces را به داشبورد Aspire ارسال کند.
اما Aspire دادههای OpenTelemetry و داشبورد را ذخیره (persist) نمیکند. در محیط production، به یک راهحل قویتر برای ذخیره و تحلیل دادههای telemetry نیاز دارید. 🏗
میتوانید exporterهای اضافی تنظیم کنید تا دادهها به ابزارهایی مثل Jaeger، Seq، Grafana یا سایر ابزارهای observability ارسال شوند. 📡
بهصورت پیشفرض، OpenTelemetry فقط برای ASP.NET Core و HttpClient فعال است. برای وابستگیهای اضافی مثل PostgreSQL یا Redis، باید پکیجهای instrumentation را نصب کنید:
dotnet add package Npgsql.OpenTelemetry
dotnet add package OpenTelemetry.Instrumentation.StackExchangeRedis
سپس آنها را در ServiceDefaults رجیستر کنید:
tracing.AddSource(builder.Environment.ApplicationName)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddNpgsql()
.AddRedisInstrumentation();
داشبورد Aspire، distributed traceها را در تمام سرویسها نمایش میدهد. میتوانید دقیقاً ببینید چه کوئریهایی روی دیتابیس اجرا شدهاند، چقدر طول کشیدهاند و bottleneckها کجا هستند. 🧠
شروع observability از همان روز اول به شما کمک میکند ویژگیهای عملکردی سیستم را زودتر درک کنید. میتوانید کوئریهای کند را شناسایی کنید، API callها را بهینه کنید و مشکلات را قبل از رسیدن به production رفع کنید. 🚀