Експорт до Jaeger

Дізнайтеся, як експортувати трасування до Jaeger за допомогою OpenTelemetry .NET

Цей посібник покаже вам, як експортувати трасування OpenTelemetry .NET до Jaeger для візуалізації та аналізу.

Необхідні умови

Створення застосунку .NET з експортом OTLP

Створіть новий консольний застосунок:

dotnet new console --output getting-started-jaeger cd getting-started-jaeger

Встановіть необхідні пакунки OpenTelemetry:

dotnet add package OpenTelemetry.Exporter.Console dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol dotnet add package OpenTelemetry.Instrumentation.Http

Оновіть файл Program.cs наступним кодом:

using System.Diagnostics; using OpenTelemetry; using OpenTelemetry.Resources; using OpenTelemetry.Trace; namespace GettingStartedJaeger; internal static class Program { private static readonly ActivitySource MyActivitySource = new("OpenTelemetry.Demo.Jaeger"); public static async Task Main() { using var tracerProvider = Sdk.CreateTracerProviderBuilder() .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService( serviceName: "DemoApp", serviceVersion: "1.0.0")) .AddSource("OpenTelemetry.Demo.Jaeger") .AddHttpClientInstrumentation() .AddConsoleExporter() .AddOtlpExporter() .Build(); using var parent = MyActivitySource.StartActivity("JaegerDemo"); using (var client = new HttpClient()) { using (var slow = MyActivitySource.StartActivity("SomethingSlow")) { await client.GetStringAsync(new Uri("https://httpstat.us/200?sleep=1000")).ConfigureAwait(false); await client.GetStringAsync(new Uri("https://httpstat.us/200?sleep=1000")).ConfigureAwait(false); } using (var fast = MyActivitySource.StartActivity("SomethingFast")) { await client.GetStringAsync(new Uri("https://httpstat.us/301")).ConfigureAwait(false); } } } }

Коли ви запускаєте цей застосунок, він виводить трейси в консоль за допомогою ConsoleExporter, а також намагається надіслати трейси до Jaeger за допомогою OtlpExporter. Оскільки Jaeger ще не налаштований, ці трейси спочатку будуть відкинуті.

Налаштування Jaeger

Jaeger — це система розподіленого трасування з відкритим вихідним кодом, яка допомагає моніторити та усувати неполадки в мікросервісних застосунках.

Встановлення та запуск Jaeger

  1. Завантажте Jaeger з офіційної сторінки завантаження.
  2. Розпакуйте його в будь-яке місце на вашому компʼютері.
  3. Запустіть виконуваний файл Jaeger all-in-one з увімкненим OTLP:
./jaeger-all-in-one --collector.otlp.enabled

Він запускає:

  • Jaeger UI (http://localhost:16686)
  • Колектор Jaeger з приймачем OTLP (http://localhost:4317)
  • Служба запитів Jaeger та інші компоненти

Перегляд трейсів у Jaeger

  1. Відкрийте вебоглядач і перейдіть за адресою http://localhost:16686
  2. Запустіть свій .NET застосунок
  3. У Jaeger UI:
    • Виберіть “DemoApp” зі списку “Service”
    • Натисніть “Find Traces”

Ви повинні побачити трейси вашого застосунку в Jaeger UI. Натисніть на трейс, щоб побачити детальний вигляд діаграми Гантта всіх відрізків у трейсі.

Як працює код

Налаштування провайдера трасування

Застосунок налаштовує OpenTelemetry за допомогою:

using var tracerProvider = Sdk.CreateTracerProviderBuilder() .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService( serviceName: "DemoApp", serviceVersion: "1.0.0")) .AddSource("OpenTelemetry.Demo.Jaeger") .AddHttpClientInstrumentation() .AddConsoleExporter() .AddOtlpExporter() .Build();

Цей код:

  1. Налаштовує ресурс з імʼям служби та версією
  2. Реєструє наше джерело активності
  3. Додає автоматичну інструментацію для HttpClient
  4. Налаштовує експортери консолі та OTLP

Створення активності

Застосунок створює відрізки за допомогою ActivitySource:

private static readonly ActivitySource MyActivitySource = new("OpenTelemetry.Demo.Jaeger"); // Створити батьківський відрізок using var parent = MyActivitySource.StartActivity("JaegerDemo"); // Створити дочірні відрізки using (var slow = MyActivitySource.StartActivity("SomethingSlow")) { // Операції всередині цього блоку будуть частиною відрізку «SomethingSlow». }

Відстеження потоку експорту

Дані трасування проходять через такі компоненти:

  1. Застосунок створює відрізки за допомогою ActivitySource
  2. TracerProvider збирає та обробляє відрізки
  3. OTLP Exporter надсилає відрізки до Jaeger через протокол OTLP
  4. Jaeger зберігає та дозволяє вам запитувати і візуалізувати трасування

Промислове використання

Для промислового використання вам слід видалити експортер консолі та використовувати лише експортер OTLP:

using var tracerProvider = Sdk.CreateTracerProviderBuilder() .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService( serviceName: "DemoApp", serviceVersion: "1.0.0")) .AddSource("OpenTelemetry.Demo.Jaeger") .AddHttpClientInstrumentation() // Вилучення Console Exporter // .AddConsoleExporter() .AddOtlpExporter() .Build();

Ви також можете видалити пакунок Console Exporter:

dotnet remove package OpenTelemetry.Exporter.Console

Дізнайтесь більше


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (bd70b52d)