.NET Application Insights SDK'larından Azure İzleyici OpenTelemetry'ye geçiş
Bu kılavuz, Application Insights yazılım geliştirme setlerini (SDK' lar) kullanarak Azure İzleyici OpenTelemetry'ye çeşitli .NET uygulamalarını geçirmeye yönelik adım adım yönergeler sağlar.
Azure İzleyici OpenTelemetry izlemesi ile Application Insights SDK'larında olduğu gibi benzer bir deneyim bekleyebilirsiniz. Daha fazla bilgi ve özelliğe göre özellik karşılaştırması için bkz . Özelliklerin yayın durumu.
Application Insights'ı kullanmaya başlıyorsanız ve Klasik API'den geçiş yapmanız gerekmiyorsa bkz . Azure İzleyici OpenTelemetry'yi etkinleştirme.
Önkoşullar
İpucu
Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.
Application Insights SDK'sını kaldırma
Not
Bu adımlara devam etmeden önce, uygulamanızın geçerli bir yedeğine sahip olduğunuzu onaylamanız gerekir.
NuGet paketlerini kaldırma
Microsoft.ApplicationInsights.AspNetCore
paketinizdencsproj
kaldırın.dotnet remove package Microsoft.ApplicationInsights.AspNetCore
Başlatma Kodunu ve özelleştirmeleri kaldırma
Kod tabanınızdaki Application Insights türlerine yönelik başvuruları kaldırın.
İpucu
Application Insights paketini kaldırdıktan sonra, kaldırılması gereken başvuruların listesini almak için uygulamanızı yeniden oluşturabilirsiniz.
Aşağıdaki satırı silerek Application Insights'ı cihazınızdan
ServiceCollection
kaldırın:builder.Services.AddApplicationInsightsTelemetry();
ApplicationInsights
bölümünü içindenappsettings.json
kaldırın.{ "ApplicationInsights": { "ConnectionString": "<Your Connection String>" } }
Temizleme ve Derleme
Tüm başvuruların kaldırıldığını doğrulamak için
Microsoft.ApplicationInsights.*
bin dizininizi inceleyin.Uygulamanızı test edin
Uygulamanızın beklenmeyen bir sonucu olmadığını doğrulayın.
İpucu
Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.
OpenTelemetry'yi etkinleştirme
Bu yönergeleri takip ederken bir geliştirme kaynağı oluşturmanızı ve bağlantı dizesi kullanmanızı öneririz.
Geçişin başarılı olduğunu onayladıktan sonra bağlantı dizesi özgün kaynağa telemetri gönderecek şekilde güncelleştirmeyi planlayın.
Azure İzleyici Dağıtımı'nı yükleme
Azure İzleyici Dağıtımımız izlemeleri, ölçümleri, günlükleri ve özel durumları toplamak için OpenTelemetry izleme kitaplıklarını ekleyerek otomatik telemetriyi etkinleştirir ve özel telemetrinin toplanmasına izin verir.
Azure İzleyici Dağıtımı'nı yüklemek OpenTelemetry SDK'sını bağımlılık olarak getirir.
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Hem OpenTelemetry hem de Azure İzleyici ekleme ve yapılandırma
OpenTelemery SDK'sı, genellikle içinde
Program.cs
uygulamanızınServiceCollection
bir parçası olarak uygulama başlangıcında yapılandırılmalıdır.OpenTelemetry üç sinyal kavramına sahiptir; İzlemeler, Ölçümler ve Günlükler. Azure İzleyici Dağıtımı bu sinyallerin her birini yapılandırıyor.
Program.cs
Aşağıdaki kod örneği temel bilgileri gösterir.
using Azure.Monitor.OpenTelemetry.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Call AddOpenTelemetry() to add OpenTelemetry to your ServiceCollection.
// Call UseAzureMonitor() to fully configure OpenTelemetry.
builder.Services.AddOpenTelemetry().UseAzureMonitor();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
}
}
Bağlantı Dizenizi bir ortam değişkeninde ayarlamanızı öneririz:
APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
Bağlantı Dizesini yapılandırmaya yönelik diğer seçenekler burada ayrıntılı olarak anlatılır: Application Insights Bağlantı Dizesini Yapılandırma.
İpucu
Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.
İzleme kitaplıklarını yükleme ve yapılandırma
Belirli bileşenler veya bağımlılıklar hakkında telemetriyi otomatik olarak toplamak için izleme kitaplıkları projenize eklenebilir.
Aşağıdaki kitaplıklar Distro'ya dahildir.
İzleme kitaplıklarını özelleştirme
Azure İzleyici Dağıtımı ASP.NET Core, HttpClient ve SQLClient için .NET OpenTelemetry izlemesini içerir. Bu dahil edilen izlemeleri özelleştirebilir veya OpenTelemetry API'sini kullanarak kendiniz ek izleme ekleyebilirsiniz.
aşağıda izlemenin nasıl özelleştirileceğine ilişkin bazı örnekler verilmiştir:
AspNetCoreTraceInstrumentationOptions'ı Özelleştirme
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<AspNetCoreTraceInstrumentationOptions>(options =>
{
options.RecordException = true;
options.Filter = (httpContext) =>
{
// only collect telemetry about HTTP GET requests
return HttpMethods.IsGet(httpContext.Request.Method);
};
});
HttpClientTraceInstrumentationOptions'ı Özelleştirme
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<HttpClientTraceInstrumentationOptions>(options =>
{
options.RecordException = true;
options.FilterHttpRequestMessage = (httpRequestMessage) =>
{
// only collect telemetry about HTTP GET requests
return HttpMethods.IsGet(httpRequestMessage.Method.Method);
};
});
SqlClientInstrumentationOptions'ı Özelleştirme
Paketimiz beta sürümündeyken SQLClient izlemesini satıyoruz. Kararlı bir sürüme ulaştığında standart paket başvurusu olarak ekleriz. O zamana kadar SQLClient izlemesini özelleştirmek için projenize paket başvurusunu OpenTelemetry.Instrumentation.SqlClient
ekleyin ve genel API'sini kullanın.
dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
builder.Services.AddOpenTelemetry().UseAzureMonitor().WithTracing(builder =>
{
builder.AddSqlClientInstrumentation(options =>
{
options.SetDbStatementForStoredProcedure = false;
});
});
Azure İzleyici'yi yapılandırma
Application Insights aracılığıyla ApplicationInsightsServiceOptions
çok daha fazla yapılandırma seçeneği sundu.
Application Insights Ayarı | OpenTelemetry Alternatifi |
---|---|
AddAutoCollectedMetricExtractor | Yok |
ApplicationVersion | Kaynakta "service.version" değerini ayarlama |
ConnectionString | Bağlantı Dizesini yapılandırma yönergelerine bakın. |
DependencyCollectionOptions | Yok. Bağımlılıkları özelleştirmek için, geçerli İzleme kitaplıkları için kullanılabilir yapılandırma seçeneklerini gözden geçirin. |
Geliştirici Modu | Yok |
EnableActiveTelemetryConfigurationSetup | Yok |
EnableAdaptiveSampling | Yok. Yalnızca sabit hızda örnekleme desteklenir. |
EnableAppServicesHeartbeatTelemetryModule | Yok |
EnableAuthenticationTrackingJavaScript | Yok |
EnableAzureInstanceMetadataTelemetryModule | Yok |
EnableDependencyTrackingTelemetryModule | İzlemeleri filtreleme yönergelerine bakın. |
EnableDiagnosticsTelemetryModule | Yok |
EnableEventCounterCollectionModule | Yok |
EnableHeartbeat | Yok |
EnablePerformanceCounterCollectionModule | Yok |
EnableQuickPulseMetricStream | AzureMonitorOptions.EnableLiveMetrics |
EnableRequestTrackingTelemetryModule | İzlemeleri filtreleme yönergelerine bakın. |
EndpointAddress | ConnectionString'i kullanın. |
InstrumentationKey | ConnectionString'i kullanın. |
RequestCollectionOptions | Yok. Bkz. OpenTelemetry.Instrumentation.AspNetCore seçenekleri. |
Özel yapılandırmaları kaldırma
Aşağıdaki senaryolar isteğe bağlıdır ve yalnızca ileri düzey kullanıcılar için geçerlidir.
telemetriyi
TelemetryClient
el ile kaydetmek için kullanılabilecek daha fazla başvurunuz varsa, bunların kaldırılması gerekir.Özel veya biçiminde herhangi bir
TelemetryProcessor
TelemetryInitializer
özel filtreleme veya zenginleştirme eklediyseniz, bunlar kaldırılmalıdır. Bunlar sizinServiceCollection
içinde bulunabilir.builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
JavaScript Parçacığını Kaldırma
Application Insights .NET SDK'sı tarafından sağlanan Kod Parçacığını kullandıysanız, bu parçacığın da kaldırılması gerekir. Nelerin kaldırılacağına ilişkin tam kod örnekleri için, web uygulamaları için istemci tarafı telemetrisini etkinleştirme kılavuzunu gözden geçirin.
İstemci tarafı telemetrisini toplamak için JavaScript SDK'sını eklediyseniz, .NET SDK'sı olmadan çalışmaya devam etse de kaldırılabilir. Nelerin kaldırılacağına ilişkin tam kod örnekleri için JavaScript SDK'sı için ekleme kılavuzunu gözden geçirin.
Visual Studio Yapıtlarını kaldırma
Application Insights'a eklemek için Visual Studio kullandıysanız projenizde daha fazla dosya kalmış olabilir.
Properties/ServiceDependencies
dizininin Application Insights kaynağınıza bir başvurusu olabilir.
İpucu
Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.
Sık sorulan sorular
Bu bölüm, telemetri başlatıcıları veya işlemcileri kullanan veya özel telemetri oluşturmak için klasik Application Insights API'sine özel kod yazan müşterilere yöneliktir.
SDK API'sinin OpenTelemetry kavramlarıyla eşlemesi nasıl yapılır?
OpenTelemetry , satıcı tarafından gözlemlenebilirlik çerçevesidir. OpenTelemetry SDK'sında veya kitaplıklarında Application Insights API'leri yoktur. Geçiş öncesinde, OpenTelemetry'nin bazı kavramlarını anlamak önemlidir.
Application Insights'ta tüm telemetri tek
TelemetryClient
TelemetryConfiguration
ve aracılığıyla yönetilir. OpenTelemetry'de üç telemetri sinyalinin (İzlemeler, Ölçümler ve Günlükler) her biri kendi yapılandırmasına sahiptir. Dış kitaplıklar olmadan .NET çalışma zamanı aracılığıyla el ile telemetri oluşturabilirsiniz. Daha fazla bilgi için dağıtılmış izleme, ölçümler ve günlüğe kaydetme ile ilgili .NET kılavuzlarına bakın.Uygulamanız için telemetri verilerini otomatik olarak toplamak için kullanılan
TelemetryModules
Application Insights. Bunun yerine OpenTelemetry, belirli bileşenlerden (İstekler için AspNetCore ve Bağımlılıklar için HttpClient gibi) telemetri toplamak için İzleme kitaplıklarını kullanır.Telemetriyi ek bilgilerle zenginleştirmek veya özellikleri geçersiz kılmak için kullanılan
TelemetryInitializers
Application Insights. OpenTelemetry ile, belirli bir sinyali özelleştirmek için bir İşlemci yazabilirsiniz. Buna ek olarak, birçok OpenTelemetry Instrumentation kitaplığı belirli bir bileşen tarafından oluşturulan telemetriyi özelleştirmek için birEnrich
yöntem sunar.Telemetriyi filtrelemek için kullanılan
TelemetryProcessors
Application Insights. OpenTelemetry İşlemcisi , belirli bir sinyale filtreleme kuralları uygulamak için de kullanılabilir.
Application Insights telemetri türleri OpenTelemetry ile nasıl eşlenmiştir?
Bu tablo, Application Insights veri türlerini OpenTelemetry kavramlarına ve bunların .NET uygulamalarına eşler.
Azure İzleyici Tablosu | Application Insights DataType | OpenTelemetry DataType | .NET Uygulaması |
---|---|---|---|
customEvents | EventTelemetry | Yok | Yok |
customMetrics | MetricTelemetry | Ölçümler | System.Diagnostics.Metrics.Meter |
bağımlılıklar | DependencyTelemetry | Spans (İstemci, İç, Tüketici) | System.Diagnostics.Activity |
özel durumlar | ExceptionTelemetry | Özel durumlar | System.Exception |
istekler | RequestTelemetry | Spans (Sunucu, Üretici) | System.Diagnostics.Activity |
izlemeler | TraceTelemetry | Günlükler | Microsoft.Extensions.Logging.ILogger |
Aşağıdaki belgeler daha fazla bilgi sağlar.
- Azure İzleyici Application Insights'ın Veri Toplama Temelleri
- Application Insights telemetri verileri modeli
- OpenTelemetry Kavramları
Application Insights örnekleme kavramları OpenTelemetry ile nasıl eşler?
Application Insights örneklemeyi yapılandırmak için birden çok seçenek sunarken, Azure İzleyici Verme veya Azure İzleyici Dağıtımı yalnızca sabit oranda örnekleme sunar. Yalnızca İstekler ve Bağımlılıklar (OpenTelemetry traces) örneklenebilir.
Örneklemeyi yapılandırma hakkında ayrıntılı kod örnekleri için bkz. Örneklemeyi Etkinleştirme kılavuzumuz
Telemetri İşlemcileri ve Başlatıcıları OpenTelemetry ile nasıl eşler?
Application Insights .NET SDK'sında telemetriyi filtrelemek ve değiştirmek veya atmak için telemetri işlemcilerini kullanın. Özel özellikler eklemek veya değiştirmek için telemetri başlatıcılarını kullanın. Daha fazla bilgi için Azure İzleyici belgelerine bakın. OpenTelemetry, bu kavramları, telemetriyi zenginleştiren ve filtreleyen etkinlik veya günlük işlemcileriyle değiştirir.
İzlemeleri Filtreleme
OpenTelemetry'de telemetri verilerini filtrelemek için bir etkinlik işlemcisi uygulayabilirsiniz. Bu örnek, Azure İzleyici belgelerinde açıklandığı gibi telemetri verilerini filtrelemek için Application Insights örneğine eşdeğerdir. Örnek, başarısız bağımlılık çağrılarının nerede filtrelendiğini gösterir.
using System.Diagnostics;
using OpenTelemetry;
internal sealed class SuccessfulDependencyFilterProcessor : BaseProcessor<Activity>
{
public override void OnEnd(Activity activity)
{
if (!OKtoSend(activity))
{
activity.ActivityTraceFlags &= ~ActivityTraceFlags.Recorded;
}
}
private bool OKtoSend(Activity activity)
{
return activity.Kind == ActivityKind.Client && activity.Status == ActivityStatusCode.Ok;
}
}
Bu işlemciyi kullanmak için önce bir TracerProvider
oluşturmanız ve işlemciyi AddAzureMonitorTraceExporter
eklemeniz gerekir.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddProcessor(new SuccessfulDependencyFilterProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
Günlükleri Filtreleme
ILogger
uygulamaları, günlük filtreleme uygulamak için yerleşik bir mekanizmaya sahiptir.
Bu filtreleme, dahil olmak üzere OpenTelemetryLoggerProvider
her kayıtlı sağlayıcıya gönderilen günlükleri denetlemenize olanak tanır. "OpenTelemetry", filtreleme kurallarını yapılandırmada kullanılan diğer adıdır OpenTelemetryLoggerProvider
.
Aşağıdaki örnek, "Hata" öğesini varsayılan LogLevel
olarak tanımlar ve ayrıca kullanıcı tanımlı bir kategori için "Uyarı" değerini en düşük LogLevel
değer olarak tanımlar.
Tanımlanan bu kurallar yalnızca için OpenTelemetryLoggerProvider
geçerlidir.
builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);
Daha fazla bilgi için lütfen günlüklerde OpenTelemetry .NET belgelerini okuyun.
İzlemelere Özel Özellikler Ekleme
OpenTelemetry'de, telemetri verilerini daha fazla özellik ile zenginleştirmek için etkinlik işlemcilerini kullanabilirsiniz. Telemetri özelliklerini değiştirebileceğiniz Application Insights'ta telemetri başlatıcılarını kullanmaya benzer.
Varsayılan olarak, Azure İzleyici Dışarı Aktarma işlemi tüm HTTP isteklerini 400 veya üzeri bir yanıt koduyla başarısız olarak işaretler. Ancak, 400'e başarılı olarak davranmak istiyorsanız, etkinlikte başarıyı ayarlayan ve daha fazla telemetri özelliği eklemek için bir etiket ekleyen bir zenginleştirme etkinliği işlemcisi ekleyebilirsiniz. Azure İzleyici belgelerinde açıklandığı gibi Application Insights'ta başlatıcı kullanarak özellikleri eklemeye veya değiştirmeye benzer.
Özel özellikler ekleme ve belirli yanıt kodları için varsayılan davranışı geçersiz kılma örneği aşağıda verilmiştir:
using System.Diagnostics;
using OpenTelemetry;
/// <summary>
/// Custom Processor that overrides the default behavior of treating response codes >= 400 as failed requests.
/// </summary>
internal class MyEnrichingProcessor : BaseProcessor<Activity>
{
public override void OnEnd(Activity activity)
{
if (activity.Kind == ActivityKind.Server)
{
int responseCode = GetResponseCode(activity);
if (responseCode >= 400 && responseCode < 500)
{
// If we set the Success property, the SDK won't change it
activity.SetStatus(ActivityStatusCode.Ok);
// Allow to filter these requests in the portal
activity.SetTag("Overridden400s", "true");
}
// else leave the SDK to set the Success property
}
}
private int GetResponseCode(Activity activity)
{
foreach (ref readonly var tag in activity.EnumerateTagObjects())
{
if (tag.Key == "http.response.status_code" && tag.Value is int value)
{
return value;
}
}
return 0;
}
}
Bu işlemciyi kullanmak için önce bir TracerProvider
oluşturmanız ve işlemciyi AddAzureMonitorTraceExporter
eklemeniz gerekir.
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Company.Product.Name")
.AddProcessor(new MyEnrichingProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
OpenTelemetry kullanarak telemetriyi el ile izleme Nasıl yaparım??
İzlemeleri Gönderme - El ile
Application Insights'taki izlemeler ve DependencyTelemetry
olarak RequestTelemetry
depolanır. OpenTelemetry'de izlemeler sınıfı kullanılarak Activity
modellenirSpan
.
OpenTelemetry .NET, .NET çalışma zamanının ActivitySource
bir parçası olan ve Activity
sınıflarını izleme için kullanır. .NET uygulaması izleme API'sini doğrudan çalışma zamanının kendisiyle tümleştirdiğinden bu yaklaşım ayırt edicidir. Paket, System.Diagnostics.DiagnosticSource
geliştiricilerin örnekleri oluşturmak ve yönetmek Activity
için kullanmasına ActivitySource
olanak tanır. Bu yöntem, .NET ekosisteminin yerleşik özelliklerini uygulayarak dış kitaplıklara bağlı kalmadan .NET uygulamalarına izleme eklemek için sorunsuz bir yol sağlar. Daha ayrıntılı bilgi için dağıtılmış izleme izleme yönergelerine bakın.
El ile izlemeyi şu şekilde geçirelim:
Not
Application Insights'ta rol adı ve rol örneği telemetri başına düzeyinde ayarlanabilir. Ancak Azure İzleyici Dışarı Aktarma ile telemetri düzeyinde özelleştiremeyiz. Rol adı ve rol örneği OpenTelemetry kaynağından ayıklanır ve tüm telemetriye uygulanır. Daha fazla bilgi için lütfen bu belgeyi okuyun: Bulut rolü adını ve bulut rolü örneğini ayarlayın.
DependencyTelemetry
Application Insights DependencyTelemetry
giden istekleri modellemek için kullanılır. Bunu OpenTelemetry'ye şu şekilde dönüştürebilirsiniz:
Application Insights Örneği:
DependencyTelemetry dep = new DependencyTelemetry
{
Name = "DependencyName",
Data = "https://www.example.com/",
Type = "Http",
Target = "www.example.com",
Duration = TimeSpan.FromSeconds(10),
ResultCode = "500",
Success = false
};
dep.Context.Cloud.RoleName = "MyRole";
dep.Context.Cloud.RoleInstance = "MyRoleInstance";
dep.Properties["customprop1"] = "custom value1";
client.TrackDependency(dep);
OpenTelemetry Örneği:
var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Emit traces
using (var activity = activitySource.StartActivity("DependencyName", ActivityKind.Client))
{
activity?.SetTag("url.full", "https://www.example.com/");
activity?.SetTag("server.address", "www.example.com");
activity?.SetTag("http.request.method", "GET");
activity?.SetTag("http.response.status_code", "500");
activity?.SetTag("customprop1", "custom value1");
activity?.SetStatus(ActivityStatusCode.Error);
activity?.SetEndTime(activity.StartTimeUtc.AddSeconds(10));
}
RequestTelemetry
Application Insights RequestTelemetry
gelen istekleri modeller. OpenTelemetry'ye şu şekilde geçirilmez:
Application Insights Örneği:
RequestTelemetry req = new RequestTelemetry
{
Name = "RequestName",
Url = new Uri("http://example.com"),
Duration = TimeSpan.FromSeconds(10),
ResponseCode = "200",
Success = true,
Properties = { ["customprop1"] = "custom value1" }
};
req.Context.Cloud.RoleName = "MyRole";
req.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackRequest(req);
OpenTelemetry Örneği:
var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Emit traces
using (var activity = activitySource.StartActivity("RequestName", ActivityKind.Server))
{
activity?.SetTag("url.scheme", "https");
activity?.SetTag("server.address", "www.example.com");
activity?.SetTag("url.path", "/");
activity?.SetTag("http.response.status_code", "200");
activity?.SetTag("customprop1", "custom value1");
activity?.SetStatus(ActivityStatusCode.Ok);
}
Özel İşlem İzleme
Application Insights'ta ve StopOperation
yöntemlerini kullanarak StartOperation
özel işlemleri izleyin. OpenTelemetry .NET'te ve Activity
kullanarak ActivitySource
bunu gerçekleştirin. ve ActivityKind.Consumer
ile ActivityKind.Server
yapılan işlemler için Azure İzleyici Exporter oluştururRequestTelemetry
. , ActivityKind.Client
ActivityKind.Producer
ve ActivityKind.Internal
için oluştururDependencyTelemetry
. Özel işlemleri izleme hakkında daha fazla bilgi için Bkz . Azure İzleyici belgeleri. .NET'te ve Activity
kullanma ActivitySource
hakkında daha fazla bilgi için bkz. .NET dağıtılmış izleme izleme izleme kılavuzları.
Özel işlemler için bir etkinliği başlatma ve durdurma örneği aşağıda verilmiştir:
using System.Diagnostics;
using OpenTelemetry;
var activitySource = new ActivitySource("Company.Product.Name");
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Start a new activity
using (var activity = activitySource.StartActivity("CustomOperation", ActivityKind.Server))
{
activity?.SetTag("customTag", "customValue");
// Perform your custom operation logic here
// No need to explicitly call Activity.Stop() because the using block automatically disposes the Activity object, which stops it.
}
Günlükleri Gönderme
Application Insights'taki günlükler ve ExceptionTelemetry
olarak TraceTelemetry
depolanır.
TraceTelemetry
OpenTelemetry'de günlük arabirimi aracılığıyla ILogger
tümleştirilir. Geçiş şu şekilde yapılır TraceTelemetry
:
Application Insights Örneği:
TraceTelemetry traceTelemetry = new TraceTelemetry
{
Message = "hello from tomato 2.99",
SeverityLevel = SeverityLevel.Warning,
};
traceTelemetry.Context.Cloud.RoleName = "MyRole";
traceTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackTrace(traceTelemetry);
OpenTelemetry Örneği:
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var loggerFactory = LoggerFactory.Create(builder => builder
.AddOpenTelemetry(logging =>
{
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
}));
// Create a new instance `ILogger` from the above LoggerFactory
var logger = loggerFactory.CreateLogger<Program>();
// Use the logger instance to write a new log
logger.FoodPrice("tomato", 2.99);
internal static partial class LoggerExtensions
{
[LoggerMessage(LogLevel.Warning, "Hello from `{name}` `{price}`.")]
public static partial void FoodPrice(this ILogger logger, string name, double price);
}
ExceptionTelemetry
Application Insights, özel durumları günlüğe kaydetmek için kullanır ExceptionTelemetry
. OpenTelemetry'ye şu şekilde geçiş yapabilirsiniz:
Application Insights Örneği:
ExceptionTelemetry exceptionTelemetry = new ExceptionTelemetry(new Exception("Test exception"))
{
SeverityLevel = SeverityLevel.Error
};
exceptionTelemetry.Context.Cloud.RoleName = "MyRole";
exceptionTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
exceptionTelemetry.Properties["customprop1"] = "custom value1";
client.TrackException(exceptionTelemetry);
OpenTelemetry Örneği:
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var loggerFactory = LoggerFactory.Create(builder => builder
.AddOpenTelemetry(logging =>
{
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
}));
// Create a new instance `ILogger` from the above LoggerFactory.
var logger = loggerFactory.CreateLogger<Program>();
try
{
// Simulate exception
throw new Exception("Test exception");
}
catch (Exception ex)
{
logger?.LogError(ex, "An error occurred");
}
Ölçüm Gönderme
Application Insights'taki ölçümler olarak MetricTelemetry
depolanır. OpenTelemetry'de ölçümler paketten System.Diagnostics.DiagnosticSource
olarak Meter
modellenir.
Application Insights hem önceden toplamaTrackMetric()
() hem de önceden toplama (GetMetric().TrackValue()
) Ölçüm API'lerine sahiptir. OpenTelemetry'nin aksine, Application Insights'ta alet diye bir fikir yoktur. Application Insights tüm ölçüm senaryoları için aynı API'ye sahiptir.
OpenTelemetry ise kullanıcıların önce ölçümün gerçek semantiğine göre doğru ölçüm aracını seçmesini gerektirir. Örneğin, amaç bir şeyi saymaksa (alınan toplam sunucu isteği sayısı gibi), OpenTelemetry Sayacı kullanılmalıdır. Amaç çeşitli yüzdebirlik dilimleri hesaplamaksa (sunucu gecikme süresinin P99 değeri gibi), OpenTelemetry Histogram aracı kullanılmalıdır. Application Insights ile OpenTelemetry arasındaki bu temel fark nedeniyle, bunlar arasında doğrudan karşılaştırma yapılmaz.
Application Insights'ın aksine, OpenTelemetry ölçümleri zenginleştirmek veya filtrelemek için yerleşik mekanizmalar sağlamaz. Application Insights'ta, ölçümleri değiştirmek veya atmak için telemetri işlemcileri ve başlatıcılar kullanılabilir, ancak bu özellik OpenTelemetry'de kullanılamaz.
Ayrıca OpenTelemetry, Application Insights'ta bulunan işlevlere eşdeğer olmadığından ham ölçümlerin TrackMetric()
doğrudan gönderilmesini desteklemez.
Application Insights'tan OpenTelemetry'ye geçiş, tüm Application Insights Ölçüm API'sinin kullanımını OpenTelemetry API'siyle değiştirmeyi içerir. Çeşitli OpenTelemetry Araçlarını ve bunların semantiğini anlamanızı gerektirir.
İpucu
Histogram, Application Insights GetMetric().TrackValue()
API'sinin en çok yönlü ve en yakın eşdeğeridir. Aynı amaca ulaşmak için Application Insights Ölçüm API'lerini Histogram ile değiştirebilirsiniz.
Diğer Telemetri Türleri
CustomEvents
OpenTelemetry'de desteklenmez.
Application Insights Örneği:
TelemetryClient.TrackEvent()
AvailabilityTelemetry
OpenTelemetry'de desteklenmez.
Application Insights Örneği:
TelemetryClient.TrackAvailability()
PageViewTelemetry
OpenTelemetry'de desteklenmez.
Application Insights Örneği:
TelemetryClient.TrackPageView()
Konsol ve çalışan hizmeti uygulamaları için canlı ölçümler alabilir miyim?
Canlı ölçümleri içermeyen konsol ve çalışan hizmeti uygulamaları için Azure İzleyici OpenTelemetry Exporter'ı öneririz.
Sonraki adımlar
İpucu
Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.
Destek
- Azure desteği sorunlar için bir Azure desteği bileti açın.
- OpenTelemetry sorunları için doğrudan OpenTelemetry .NET topluluğuna başvurun.
- Azure İzleyici Dışarı Aktarma ile ilgili açık sorunların listesi için GitHub Sorunları Sayfasına bakın.