Конфігурація інструментування .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, яке наразі знаходиться в бета-версії.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!