Конфігурація інструментування .NET Framework

OpenTelemetry підтримує як .NET, так і .NET Framework (старіша реалізація .NET для Windows).

Якщо ви вже використовуєте сучасну, кросплатформенну реалізацію .NET, ви можете пропустити цю статтю.

Ініціалізація ASP.NET

Ініціалізація для ASP.NET трохи відрізняється від ASP.NET Core.

Спочатку встановіть наступні пакунки NuGet:

Далі, змініть ваш файл Web.Config, щоб додати необхідний HttpModule:

<system.webServer> <modules> <add name="TelemetryHttpModule" type="OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule, OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule" preCondition="integratedMode,managedHandler" /> </modules> </system.webServer>

Нарешті, ініціалізуйте інструментування ASP.NET у вашому файлі Global.asax.cs разом з іншою ініціалізацією OpenTelemetry:

using OpenTelemetry; using OpenTelemetry.Trace; public class WebApiApplication : HttpApplication { private TracerProvider _tracerProvider; protected void Application_Start() { _tracerProvider = Sdk.CreateTracerProviderBuilder() .AddAspNetInstrumentation() // Інша конфігурація, як додавання експортера та налаштування ресурсів .AddConsoleExporter() .AddSource("my-service-name") .SetResourceBuilder( ResourceBuilder.CreateDefault() .AddService(serviceName: "my-service-name", serviceVersion: "1.0.0")) .Build(); } protected void Application_End() { _tracerProvider?.Dispose(); } }

Розширена конфігурація ASP.NET

Інструментування ASP.NET можна налаштувати для зміни стандартної поведінки.

Фільтр

Інструментування ASP.NET стандартно збирає всі вхідні HTTP-запити. Однак, ви можете фільтрувати вхідні запити за допомогою методу Filter в AspNetInstrumentationOptions. Це працює подібно до Where в LINQ, де будуть зібрані лише запити, що відповідають умові.

Наступний фрагмент коду показує, як використовувати Filter, щоб дозволити лише GET-запити.

this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddAspNetInstrumentation( (options) => options.Filter = (httpContext) => { // збирати телеметрію лише про HTTP GET-запити return httpContext.Request.HttpMethod.Equals("GET"); }) .Build();

Фільтрація відбувається на ранній стадії і відрізняється від семплінгу, який відбувається після збору даних. Фільтрація обмежує те, що збирається спочатку.

Збагачення

Якщо у вас є дані, які ви хочете додати до кожної Activity, створеної OpenTelemetry, ви можете використовувати метод Enrich.

Дія Enrich викликається лише тоді, коли activity.IsAllDataRequested дорівнює true. Вона містить створену Activity, назву події та необроблений обʼєкт.

Наступний фрагмент коду показує, як додати додаткові теґи за допомогою Enrich.

this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddAspNetInstrumentation((options) => options.Enrich = (activity, eventName, rawObject) => { if (eventName.Equals("OnStartActivity")) { if (rawObject is HttpRequest httpRequest) { activity?.SetTag("physicalPath", httpRequest.PhysicalPath); } } else if (eventName.Equals("OnStopActivity")) { if (rawObject is HttpResponse httpResponse) { activity?.SetTag("responseType", httpResponse.ContentType); } } }) .Build();

Дивіться Додавання теґів до Activity для анотування даних трасування більш загально.

RecordException

Інструментування ASP.NET автоматично встановлює статус Activity як Error, якщо виникає необроблена помилка.

Ви також можете встановити властивість RecordException в true, що дозволить зберігати помилку у самій Activity як ActivityEvent.

Наступні кроки

Після того, як ви автоматично згенеруєте спостережуваність за допомогою інструментальних бібліотек, ви можете додати ручне інструментування для збору користувацьких телеметричних даних.

Вам також потрібно буде налаштувати відповідний експортер для експорту ваших телеметричних даних до одного або декількох бекендів телеметрії.

Ви також можете перевірити автоматичне інструментування для .NET, яке наразі знаходиться в бета-версії.