Фото: Cédric Dhaenens на Unsplash
У сучасному світі розробки додатків мікросервіси стали основою для масштабованих, ефективних і зручних у підтримці систем. Розбиваючи великі монолітні додатки на менші, спеціалізовані сервіси, організації можуть створювати додатки, які є більш стійкими і легшими для масштабування. Однак така архітектура породжує значну проблему: спостережуваність. У розподіленому середовищі з безліччю мікросервісів, які взаємодіють між собою на різних вузлах, відстеження потоку одного запиту стає складним. Коли виникає непередбачувана проблема — чи то сплеск латентності, помилка чи неочікувана поведінка — визначити джерело проблеми може бути дуже складно. Це може бути сервіс вище по ланцюгу, залежність нижче, певний вузол чи зовнішній фактор? Відсутність прозорості в тому, як запити проходять через ці взаємопов'язані сервіси, робить налагодження складним і часозатратним процесом, часто призводячи до тривалих простоїв і розчарованих команд. Це і є основною проблемою, яку розв'язують інструменти для розподіленого трасування, такі як OpenTelemetry.
Фото: Growtika на Unsplash
Що таке розподілене трасування?
Розподілене трасування — це метод спостереження і відстеження потоку запитів, коли вони проходять через різні компоненти розподіленої системи. Воно надає повний огляд життєвого циклу запиту, захоплюючи дані про кожен сервіс, з яким він взаємодіє, час, проведений у кожному компоненті, та будь-які помилки, що виникли на шляху. Розподілене трасування вирішує проблему налагодження в складних архітектурах мікросервісів, створюючи трасу — детальну карту, яка показує, як запит проходить від клієнта через кілька сервісів і назад. Кожна взаємодія позначена унікальними ідентифікаторами, що корелюють запит між сервісами, що дозволяє точно визначати місця затримок у роботі, збої і корінні причини. Візуалізуючи ці сліди, розробники та операційні команди можуть легко виявити проблеми, такі як повільні запити до баз даних, неуспішні API виклики чи перевантажені вузли, що значно зменшує час, витрачений на налагодження та вирішення проблем у розподіленому середовищі.
Існує кілька інструментів для розподіленого трасування, включаючи Jaeger, Zipkin та OpenTelemetry. Серед них OpenTelemetry здобув найбільшу популярність завдяки своїй відкритій природі, незалежному від постачальника підходу та широкій підтримці спільноти.
Тепер давайте розглянемо, як інтегрувати OpenTelemetry в існуючі проекти на базі .NET Core.
Інтеграція OpenTelemetry в .NET Core
Щоб інтегрувати OpenTelemetry в додаток на базі .NET Core, дотримуйтесь наступних кроків:
- Встановіть необхідні пакети NuGet: Додайте необхідні пакети OpenTelemetry NuGet, такі як OpenTelemetry.Extensions.Hosting та спеціалізовані пакети інструментації (наприклад, OpenTelemetry.Instrumentation.AspNetCore або OpenTelemetry.Instrumentation.Http).
- Налаштуйте OpenTelemetry у Program.cs: У файлі Program.cs налаштуйте OpenTelemetry у HostBuilder за допомогою AddOpenTelemetryTracing.
Налаштуйте TracerProvider, щоб додати інструментацію для відповідних бібліотек (наприклад, ASP.NET Core, HttpClient тощо).
Дотримуючись цих кроків, ви можете безперешкодно інтегрувати OpenTelemetry в додаток на .NET Core для розподіленого трасування.
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
var builder = WebApplication.CreateBuilder(args);
// Додати трасування OpenTelemetry
builder.Services.AddOpenTelemetryTracing(tracerProviderBuilder =>
{
tracerProviderBuilder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(“MyDotNetApp”))
.AddAspNetCoreInstrumentation() // Інструментувати запити ASP.NET Core
.AddHttpClientInstrumentation() // Інструментувати виклики HTTP клієнта
.AddSqlClientInstrumentation() // Інструментувати SQL виклики
.AddJaegerExporter(jaegerOptions =>
{
jaegerOptions.AgentHost = “localhost”; // Хост агента Jaeger
jaegerOptions.AgentPort = 6831; // Порт агента Jaeger
});
});
var app = builder.Build();
app.MapGet(“/”, () => “Hello, OpenTelemetry!”);
app.Run();
Після цього можна завантажити Jaeger з https://www.jaegertracing.io/ та встановити Jaeger локально. Коли ви завершите установку, перейдіть за адресою http://localhost:16686, щоб отримати доступ до інтерфейсу користувача Jaeger. Там ви зможете побачити всі дані про інструментацію для вашого додатку.
Щоб отримувати більше статей подібного роду —
Слідкуйте за мною на Medium.
Слідкуйте за мною на Twitter.
Перекладено з: Distributed Tracing: The Magic wand to debug applications in Distributed System