یک راه یکپارچه برای جمعآوری این دادهها فراهم میکند، که درک رفتار و سلامت اپلیکیشنهای توزیعشده پیچیده را آسانتر میکند.
ما میتوانیم دادههای تلهمتری که جمعآوری میکنیم را به سرویسی که قادر به پردازش آن است و یک اینترفیس برای تحلیل آن به ما ارائه میدهد، صادر (export) کنیم.
ما قصد داریم OpenTelemetry را طوری پیکربندی کنیم که traceها را مستقیماً به Jaeger صادر کند.
افزودن OpenTelemetry به اپلیکیشنهای NET.🔧
OpenTelemetry
کتابخانهها و SDKهایی برای افزودن کد (instrumentation) به اپلیکیشنهای NET. شما فراهم میکند. این instrumentationها به طور خودکار traces، metrics و logs مورد علاقه ما را ضبط میکنند.
ما قصد داریم پکیجهای NuGet زیر را نصب کنیم: 📦
# Automatic tracing, metrics
Install-Package OpenTelemetry.Extensions.Hosting
# Telemetry data exporter
Install-Package OpenTelemetry.Exporter.OpenTelemetryProtocol
# Instrumentation packages
Install-Package OpenTelemetry.Instrumentation.Http
Install-Package OpenTelemetry.Instrumentation.AspNetCore
هنگامی که این پکیجهای NuGet را نصب کردیم، زمان پیکربندی برخی سرویسها فرا میرسد.
services
.AddOpenTelemetry()
.ConfigureResource(resource => resource.AddService(serviceName))
.WithTracing(tracing =>
{
tracing
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddEntityFrameworkCoreInstrumentation()
.AddRedisInstrumentation()
.AddNpgsql();
tracing.AddOtlpExporter();
});
🌐 AddAspNetCoreInstrumentation -
این ابزار دقیق (instrumentation) ASP.NET Core را فعال میکند.
📤 AddHttpClientInstrumentation -
این ابزار دقیق HttpClient را برای درخواستهای خروجی فعال میکند.
💾 AddEntityFrameworkCoreInstrumentation -
این ابزار دقیق EF Core را فعال میکند.
🔥 AddRedisInstrumentation -
این ابزار دقیق Redis را فعال میکند.
🐘 AddNpgsql -
این ابزار دقیق PostgreSQL را فعال میکند.
با پیکربندی تمام این ابزارهای دقیق، اپلیکیشن ما شروع به جمعآوری بسیاری از ردیابیهای (traces) ارزشمند در زمان اجرا خواهد کرد.
ما همچنین باید یک متغیر محیطی را برای exporter اضافه شده با AddOtlpExporter پیکربندی کنیم تا به درستی کار کند. ما میتوانیم OTEL_EXPORTER_OTLP_ENDPOINT را از طریق تنظیمات اپلیکیشن تنظیم کنیم. آدرس مشخص شده در اینجا به یک نمونه محلی Jaeger اشاره خواهد کرد.
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
اجرای Jaeger به صورت محلی 🐳
Jaeger
یک پلتفرم متنباز و توزیعشده برای ردیابی است. Jaeger جریان درخواستها و دادهها را حین عبور از یک سیستم توزیعشده، ترسیم میکند.
در اینجا نحوه اجرای Jaeger داخل یک کانتینر Docker آمده است:
docker run -d -p 4317:4317 -p 16686:16686 jaegertracing/all-in-one:latest
ما از ایمیج jaegertracing/all-in-one:latest استفاده میکنیم و پورت 4317 را برای پذیرش دادههای تلهمتری باز میکنیم. رابط کاربری Jaeger روی پورت 16686 در دسترس خواهد بود.
Distributed Tracing (ردیابی توزیعشده)
پس از نصب کتابخانههای OpenTelemetry و پیکربندی tracing در اپلیکیشنهایمان، میتوانیم چند درخواست برای تولید دادههای تلهمتری ارسال کنیم. سپس میتوانیم به Jaeger دسترسی پیدا کرده و شروع به تحلیل distributed traceهای خود کنیم.
ثبت نام یک کاربر جدید 👤
انتشار یک پیام با MassTransit 📨
بررسی اطلاعات اضافی trace 💾
traceهای توزیعشده پیچیده 🕸