Start Debugging

ASP.NET Core 11 поставляет нативную трассировку OpenTelemetry: уберите дополнительный NuGet-пакет

ASP.NET Core в .NET 11 Preview 2 добавляет семантические атрибуты OpenTelemetry прямо в активность HTTP-сервера, устраняя необходимость в OpenTelemetry.Instrumentation.AspNetCore.

В каждом проекте ASP.NET Core, экспортирующем трассировки, есть одна и та же строка в .csproj: ссылка на OpenTelemetry.Instrumentation.AspNetCore. Этот пакет подписывается на источник Activity фреймворка и помечает каждый span семантическими атрибутами, которые ожидают экспортёры: http.request.method, url.path, http.response.status_code, server.address и так далее.

Начиная с .NET 11 Preview 2, фреймворк выполняет эту работу сам. ASP.NET Core теперь заполняет стандартные атрибуты семантических соглашений OpenTelemetry прямо в активности HTTP-сервера, поэтому отдельная библиотека инструментирования больше не требуется для сбора базовых данных трассировки.

Что фреймворк теперь предоставляет

Когда запрос попадает в Kestrel в .NET 11 Preview 2, встроенный middleware пишет те же атрибуты, которые добавлял пакет инструментирования:

Это семантические соглашения HTTP-сервера, на которые опирается любой OTLP-совместимый бэкенд для дашбордов и оповещений.

До и после

Типичная настройка .NET 10 для получения HTTP-трассировок выглядела так:

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing =>
    {
        tracing
            .AddAspNetCoreInstrumentation()   // requires the NuGet package
            .AddOtlpExporter();
    });

В .NET 11 вы вместо этого подписываетесь на встроенный activity source:

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing =>
    {
        tracing
            .AddSource("Microsoft.AspNetCore")  // no extra package needed
            .AddOtlpExporter();
    });

Пакет OpenTelemetry.Instrumentation.AspNetCore не исчез; он всё ещё существует для команд, которым нужны его callback-и обогащения или продвинутая фильтрация. Но базовые атрибуты, которые нужны 90 % проектов, теперь запечены во фреймворк.

Почему это важно

Меньше пакетов означает меньший граф зависимостей, более быстрые restore-времена и одну вещь меньше, которую нужно держать в синхронизации при крупных обновлениях версий. Это также означает, что приложения ASP.NET Core, опубликованные с NativeAOT, получают стандартные трассировки, не подтягивая код инструментирования, тяжёлый на reflection.

Если вы уже используете пакет инструментирования, ничего не сломается. Атрибуты фреймворка и атрибуты пакета чисто сливаются на одной и той же Activity. Вы можете удалить ссылку на пакет, когда будете готовы, протестировать свои дашборды и двигаться дальше.

Полные заметки о выпуске ASP.NET Core .NET 11 Preview 2 покрывают остальные изменения, включая поддержку TempData в Blazor SSR и новый шаблон проекта Web Worker.

< Назад