Bu kılavuz, Azure Monitor OpenTelemetry dağıtımını kullanarak Azure Monitor Application Insights'ta OpenTelemetry (OTel) yapılandırmanın nasıl yapılacağını açıklamaktadır. Uygun yapılandırma. .NET, Java, Node.jsve Python uygulamalarında tutarlı telemetri verilerinin toplanmasını sağlayarak daha güvenilir izleme ve tanılama sağlar.
Bağlantı dizesi
Application Insights'taki bir bağlantı dizesi, telemetri verilerini göndermek için hedef konumu tanımlar.
bağlantı dizesi yapılandırmak için aşağıdaki üç yoldan birini kullanın:
Dosyanıza UseAzureMonitor() ekleyinprogram.cs.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
});
var app = builder.Build();
app.Run();
Ortam değişkeni ayarlayın.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Yapılandırma dosyanıza appsettings.json aşağıdaki bölümü ekleyin.
{
"AzureMonitor": {
"ConnectionString": "<YOUR-CONNECTION-STRING>"
}
}
Not veya Dikkat
bağlantı dizesi birden fazla yerde ayarlarsanız, aşağıdaki önceliğe bağlıyız:
- Kod
- Ortam değişkeni
- Yapılandırma Dosyası
bağlantı dizesi yapılandırmak için aşağıdaki iki yoldan birini kullanın:
Uygulamanın başlangıcında her OpenTelemetry sinyaline Azure Monitor Exporter'ı ekleyin.
// Create a new OpenTelemetry tracer provider.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
})
.Build();
// Create a new OpenTelemetry meter provider.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter(options =>
{
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
})
.Build();
// Create a new logger factory.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddAzureMonitorLogExporter(options =>
{
options.ConnectionString = "<YOUR-CONNECTION-STRING>";
});
});
});
Ortam değişkeni ayarlayın.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Not veya Dikkat
bağlantı dizesi birden fazla yerde ayarlarsanız, aşağıdaki önceliğe bağlıyız:
- Kod
- Ortam değişkeni
bağlantı dizesi yapılandırmak için aşağıdaki iki yoldan birini kullanın:
Ortam değişkeni ayarlayın.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Bir parametre ayarlayın.
applicationinsights.connection.string=<YOUR-CONNECTION-STRING>
bağlantı dizesi yapılandırmak için aşağıdaki iki yoldan birini kullanın:
Ortam değişkeni ayarlayın.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
Yapılandırma nesnesi kullanın.
export class BasicConnectionSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized");
}
}
bağlantı dizesi yapılandırmak için aşağıdaki iki yoldan birini kullanın:
Ortam değişkeni ayarlayın.
APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
configure_azure_monitor işlevini kullanın.
# Import the `configure_azure_monitor()` function from the `azure.monitor.opentelemetry` package.
from azure.monitor.opentelemetry import configure_azure_monitor
# Configure OpenTelemetry to use Azure Monitor with the specified connection string.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string of your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
)
Bulut Rolü Adını ve Bulut Rolü Örneğini Ayarlama
Desteklenen diller için Azure İzleyici OpenTelemetry Distro kaynak bağlamını otomatik olarak algılar ve bileşeninizin Bulut Rolü Adı ve Bulut Rolü Örneği özellikleri için varsayılan değerler sağlar. Ancak, varsayılan değerleri ekibiniz için anlamlı bir değerle geçersiz kılmak isteyebilirsiniz. Bulut rolü adı değeri, Uygulama Haritası'nda düğümün altındaki ad olarak görünür.
Kaynak öznitelikleri aracılığıyla Bulut Rolü Adını ve Bulut Rolü Örneğini ayarlayın. Bulut Rolü Adı, service.namespace ve service.name özniteliklerini kullanır, ancak service.name ayarlanmadıysa, service.namespace özniteliğine geri döner. Bulut Rolü Örneği öznitelik değerini kullanır service.instance.id . Kaynakların standart öznitelikleri hakkında bilgi için bkz . OpenTelemetry Semantic Conventions.
// Setting role name and role instance
// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
{ "service.name", "my-service" },
{ "service.namespace", "my-namespace" },
{ "service.instance.id", "my-instance" }};
// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry()
.UseAzureMonitor()
// Configure the ResourceBuilder to add the custom resource attributes to all signals.
// Custom resource attributes should be added AFTER AzureMonitor to override the default ResourceDetectors.
.ConfigureResource(resourceBuilder => resourceBuilder.AddAttributes(resourceAttributes));
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Kaynak öznitelikleri aracılığıyla Bulut Rolü Adını ve Bulut Rolü Örneğini ayarlayın. Bulut Rolü Adı, service.namespace ve service.name özniteliklerini kullanır, ancak service.name ayarlanmadıysa, service.namespace özniteliğine geri döner. Bulut Rolü Örneği öznitelik değerini kullanır service.instance.id . Kaynakların standart öznitelikleri hakkında bilgi için bkz . OpenTelemetry Semantic Conventions.
// Setting role name and role instance
// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
{ "service.name", "my-service" },
{ "service.namespace", "my-namespace" },
{ "service.instance.id", "my-instance" }};
// Create a resource builder.
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
// Create a new OpenTelemetry tracer provider and set the resource builder.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
// Set ResourceBuilder on the TracerProvider.
.SetResourceBuilder(resourceBuilder)
.AddAzureMonitorTraceExporter()
.Build();
// Create a new OpenTelemetry meter provider and set the resource builder.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
// Set ResourceBuilder on the MeterProvider.
.SetResourceBuilder(resourceBuilder)
.AddAzureMonitorMetricExporter()
.Build();
// Create a new logger factory and add the OpenTelemetry logger provider with the resource builder.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
// Set ResourceBuilder on the Logging config.
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
});
});
Bulut rolü adını ayarlamak için:
- Spring Boot yerel görüntü uygulamaları için kullanın
spring.application.name .
- Quarkus yerel görüntü uygulamaları için kullanın
quarkus.application.name .
Not veya Dikkat
Quarkus topluluğu, Quarkus uzantılarını destekler ve korur. Yardım için Quarkus topluluk destek kanallarını kullanın. Microsoft bu tümleştirme için teknik destek sağlamaz.
Kaynak öznitelikleri aracılığıyla Bulut Rolü Adını ve Bulut Rolü Örneğini ayarlayın. Bulut Rolü Adı, service.namespace ve service.name özniteliklerini kullanır, ancak service.name ayarlanmadıysa, service.namespace özniteliğine geri döner. Bulut Rolü Örneği öznitelik değerini kullanır service.instance.id . Kaynakların standart öznitelikleri hakkında bilgi için bkz . OpenTelemetry Semantic Conventions.
export class CloudRoleSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { resourceFromAttributes } = await import("@opentelemetry/resources");
const { ATTR_SERVICE_NAME } = await import("@opentelemetry/semantic-conventions");
const { ATTR_SERVICE_NAMESPACE, ATTR_SERVICE_INSTANCE_ID } =
await import("@opentelemetry/semantic-conventions/incubating");
const customResource = resourceFromAttributes({
[ATTR_SERVICE_NAME]: process.env.OTEL_SERVICE_NAME || "my-service",
[ATTR_SERVICE_NAMESPACE]: process.env.OTEL_SERVICE_NAMESPACE || "my-namespace",
[ATTR_SERVICE_INSTANCE_ID]: process.env.OTEL_SERVICE_INSTANCE_ID || "my-instance",
});
const options = {
resource: customResource,
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (custom resource)");
}
}
Kaynak öznitelikleri aracılığıyla Bulut Rolü Adını ve Bulut Rolü Örneğini ayarlayın. Bulut Rolü Adı, service.namespace ve service.name özniteliklerini kullanır, ancak service.name ayarlanmadıysa, service.namespace özniteliğine geri döner. Bulut Rolü Örneği öznitelik değerini kullanır service.instance.id . Kaynakların standart öznitelikleri hakkında bilgi için bkz . OpenTelemetry Semantic Conventions.
ve/veya OTEL_RESOURCE_ATTRIBUTES ortam değişkenlerini kullanarak OTEL_SERVICE_NAME Kaynak özniteliklerini ayarlayın.
OTEL_RESOURCE_ATTRIBUTES virgülle ayrılmış bir dizi anahtar-değer çifti alır. Örneğin, Bulut Rolü Adı'nı my-namespace.my-helloworld-service olarak ve Bulut Rolü Örneği'ni my-instance olarak ayarlamak için, OTEL_RESOURCE_ATTRIBUTES ve OTEL_SERVICE_NAME'ü şu şekilde ayarlayabilirsiniz:
export OTEL_RESOURCE_ATTRIBUTES="service.namespace=my-namespace,service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Resource özniteliğini service.namespace ayarlamazsanız, alternatif olarak Bulut Rolü Adı'nı yalnızca OTEL_SERVICE_NAME ortam değişkeni veya service.name Resource özniteliğiyle ayarlayabilirsiniz. Örneğin, Bulut Rolü Adı'nı my-helloworld-service olarak ve Bulut Rolü Örneği'ni my-instance olarak ayarlamak için, OTEL_RESOURCE_ATTRIBUTES ve OTEL_SERVICE_NAME'ü şu şekilde ayarlayabilirsiniz:
export OTEL_RESOURCE_ATTRIBUTES="service.instance.id=my-instance"
export OTEL_SERVICE_NAME="my-helloworld-service"
Örneklemeyi Etkinleştir
Örnekleme telemetri alımı hacmini ve maliyetini azaltır. Azure İzleyici'nin OpenTelemetry dağıtımı, izlemeler için iki örnekleme stratejisini destekler ve (isteğe bağlı olarak) uygulama günlüklerini izleme örnekleme kararlarınızla hizalamanıza olanak tanır. Örnekleyici, Application Insights'ın deneyim sayılarını doğru şekilde ayarlayabilmesi için seçilen örnekleme oranını veya oranını dışarı aktarılan aralıklara ekler. Kavramsal genel bakış için bkz. Örnekleme hakkında daha fazla bilgi edinin.
Önemli
- Örnekleme kararları izlemeler (yayılma alanları) için geçerlidir.
- Örneklenmemiş izlemelere ait günlükler varsayılan olarak bırakılır, ancak günlükler için izleme tabanlı örneklemeyi geri çevirebilirsiniz.
-
Ölçümler hiçbir zaman örneklendirilemez.
Not veya Dikkat
Application Insights'ta beklenmeyen ücretler veya yüksek maliyetler görüyorsanız yaygın nedenler arasında yüksek telemetri hacmi, veri alımı ani artışları ve yanlış yapılandırılmış örnekleme sayılabilir. Sorun gidermeye başlamak için bkz. Application Insights'ta yüksek veri alımı sorunlarını giderme.
Standart OpenTelemetry ortam değişkenlerini kullanarak örnekleyici bileşenini seçin ve bağımsız değişkenini sağlayın. OpenTelemetry örnekleyici türleri hakkında daha fazla bilgi için bkz. OTEL_TRACES_SAMPLER.
Aşağıdaki örneklerde, ortam değişkenlerini kullanarak örneklemeyi yapılandırma gösterilmektedir.
Sabit yüzde örnekleme (yaklaşık 10%)
export OTEL_TRACES_SAMPLER="microsoft.fixed_percentage"
export OTEL_TRACES_SAMPLER_ARG=0.1
Hız sınırlı örnekleme (~1,5 izleme/sn)
export OTEL_TRACES_SAMPLER="microsoft.rate_limited"
export OTEL_TRACES_SAMPLER_ARG=1.5
Not veya Dikkat
Hem kod düzeyi seçenekleri hem de ortam değişkenleri yapılandırıldığında ortam değişkenleri önceliklidir. Varsayılan örnekleyici davranışı dile göre farklılık gösterebilir.
Örnekleme yüzdesi sabit
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.SamplingRatio = 0.1F; // ~10%
});
var app = builder.Build();
app.Run();
Hız sınırlı örnekleme
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.TracesPerSecond = 1.5; // ~1.5 traces/sec
});
var app = builder.Build();
app.Run();
Not veya Dikkat
Kodda veya ortam değişkenlerinde örnekleyici ayarlamazsanız Azure İzleyici varsayılan olarak ApplicationInsightsSampler kullanır.
Örnekleme yüzdesi sabit
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.SamplingRatio = 0.1F)
.Build();
Hız sınırlı örnekleme
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.TracesPerSecond = 1.5F)
.Build();
Not veya Dikkat
Kodda veya ortam değişkenlerinde örnekleyici ayarlamazsanız Azure İzleyici varsayılan olarak ApplicationInsightsSampler kullanır.
3.4.0'dan başlayarak , hız sınırlı örnekleme varsayılandır. Yapılandırma seçenekleri ve örnekler için bkz. Java örneklemesi.
1.16.0'dan başlayarak , hız sınırlı örnekleme varsayılandır.
Örnekleme yüzdesi sabit
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
samplingRatio: 0.1, // ~10%
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
Hız sınırlı örnekleme
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
tracesPerSecond: 1.5, // ~1.5 traces/sec
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
Not veya Dikkat
Kodda veya ortam değişkenlerinde örnekleyici ayarlamazsanız Azure İzleyici varsayılan olarak RateLimitedSampler kullanır.
1.8.6'dan başlayarak , hız sınırlı örnekleme varsayılandır.
Örnekleme yüzdesi sabit
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
sampling_ratio=0.1, # 0.1 = 10% of traces sampled
)
Hız sınırlı örnekleme
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
traces_per_second=1.5, # ~1.5 traces/sec
)
Not veya Dikkat
Herhangi bir ortam değişkeni ayarlamaz veya veya sampling_ratiosağlamazsanıztraces_per_second, configure_azure_monitor() varsayılan olarak RateLimitedSampler kullanır.
İpucu
Sabit yüzdeli örnekleme kullanırken ve örnekleme hızının ne olarak ayarlanacağından emin değilseniz , 5% (0.05) ile başlayın. Hatalar ve performans bölmelerinde gösterilen işlemlerin doğruluğuna göre hızı ayarlayın. Tüm örneklemeler doğruluğu azaltır, bu nedenle örneklemeden etkilenmeyen OpenTelemetry ölçümlerinde uyarı göndermenizi öneririz.
Etkinleştirildiğinde, örneklenmemiş izlemelere ait günlük kayıtları bırakılır, böylece günlükleriniz izleme örneklemesiyle uyumlu kalır.
- Günlük kaydı, geçerli
SpanId bir kayıt olduğunda izlemenin bir parçası olarak kabul edilir.
- İlişkili izleme
TraceFlagsörneklenmediğini gösteriyorsa günlük kaydı atılır.
- İz bağlamı içermeyen günlük kayıtları etkilenmez.
- Özellik varsayılan olarak etkindir.
İzleme tabanlı günlük örneklemeyi yapılandırmak için aşağıdaki ayarları kullanın:
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
o.EnableTraceBasedLogsSampler = true;
});
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(o => o.EnableTraceBasedLogsSampler = true)
.Build();
Java uygulamaları için izleme tabanlı örnekleme varsayılan olarak etkindir.
Spring Boot yerel ve Quarkus yerel uygulamaları için izleme tabanlı örnekleme varsayılan olarak etkinleştirilir.
Not veya Dikkat
Quarkus topluluğu, Quarkus uzantılarını destekler ve korur. Yardım için Quarkus topluluk destek kanallarını kullanın. Microsoft bu tümleştirme için teknik destek sağlamaz.
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const monitor = useAzureMonitor({
enableTraceBasedSamplingForLogs: true,
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
});
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
enable_trace_based_sampling_for_logs=True,
)
Canlı ölçümler
Canlı ölçümler , uygulama etkinliği ve performansıyla ilgili içgörüler için gerçek zamanlı bir analiz panosu sağlar.
Varsayılan olarak bu özellik etkindir.
Kullanıcılar, Distro'yu yapılandırırken Canlı Ölçümleri devre dışı bırakabilir.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
// Disable the Live Metrics feature.
options.EnableLiveMetrics = false;
});
Bu özellik Azure İzleyici .NET Exporter'da kullanılamaz.
Not veya Dikkat
Canlı ölçümleri içermeyen konsol ve çalışan hizmeti uygulamaları için Azure İzleyici OpenTelemetry Exporter'ı öneririz.
Canlı Ölçümler bugün GraalVM yerel uygulamaları için kullanılamıyor.
Kullanıcılar, enableLiveMetrics özelliğini kullanarak Dağıtım yapılandırılırken Canlı Ölçümleri etkinleştirebilir veya devre dışı bırakabilir.
export class LiveMetricsSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
enableLiveMetrics: true, // set to false to disable
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (live metrics enabled)");
}
}
Canlı ölçümleri etkinleştirmek için Python için OpenTelemetry Distro azure izleyicisini aşağıdaki gibi kullanabilirsiniz:
...
configure_azure_monitor(
enable_live_metrics=True
)
...
Azure'a daha güvenli bir bağlantı için Microsoft Entra kimlik doğrulamasını etkinleştirmek isteyebilirsiniz ve bu da yetkisiz telemetrinin aboneliğinize alınmasını önler.
Daha fazla bilgi için desteklenen her dil için bağlantılı ayrılmış Microsoft Entra kimlik doğrulama sayfamıza bakın.
GraalVM Yerel uygulamalarında Microsoft Entra Id kimlik doğrulaması kullanılamaz.
Çevrimdışı Depolama ve Otomatik Yeniden Denemeler
Azure Monitor OpenTelemetry tabanlı teklifler, bir uygulama Application Insights bağlantısı kesildiğinde telemetriyi önbelleğe alır ve göndermeyi 48 saate kadar yeniden dener. Veri işleme önerileri için bkz. Özel verileri dışarı aktarma ve silme. Yüksek yüke sahip uygulamalar bazen telemetri verilerini iki nedenden dolayı bırakır: izin verilen süreyi aşma veya dosya boyutu üst sınırını aşma. Gerektiğinde, ürün son olaylara eski olaylara göre öncelik verir.
Distro paketi, çevrimdışı depolama için varsayılan olarak aşağıdaki konumlardan birini kullanan AzureMonitorExporter'ı içerir (öncelik sırasına göre listelenir):
Windows
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
Windows Olmayan
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Varsayılan dizini geçersiz kılmak için değerini ayarlamanız AzureMonitorOptions.StorageDirectorygerekir.
// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any telemetry data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
});
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Bu özelliği devre dışı bırakmak için ayarını yapmalısınız AzureMonitorOptions.DisableOfflineStorage = true.
Varsayılan olarak, AzureMonitorExporter çevrimdışı depolama için aşağıdaki konumlardan birini kullanır (öncelik sırasına göre listelenir):
Windows
- %LOCALAPPDATA%\Microsoft\AzureMonitor
- %TEMP%\Microsoft\AzureMonitor
Windows Olmayan
- %TMPDIR%/Microsoft/AzureMonitor
- /var/tmp/Microsoft/AzureMonitor
- /tmp/Microsoft/AzureMonitor
Varsayılan dizini geçersiz kılmak için değerini ayarlamanız AzureMonitorExporterOptions.StorageDirectorygerekir.
// Create a new OpenTelemetry tracer provider and set the storage directory.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any trace data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
})
.Build();
// Create a new OpenTelemetry meter provider and set the storage directory.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any metric data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
})
.Build();
// Create a new logger factory and add the OpenTelemetry logger provider with the storage directory.
// It is important to keep the LoggerFactory instance active throughout the process lifetime.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddAzureMonitorLogExporter(options =>
{
// Set the Azure Monitor storage directory to "C:\\SomeDirectory".
// This is the directory where the OpenTelemetry SDK will store any log data that can't be sent to Azure Monitor immediately.
options.StorageDirectory = "C:\\SomeDirectory";
});
});
});
Bu özelliği devre dışı bırakmak için ayarını yapmalısınız AzureMonitorExporterOptions.DisableOfflineStorage = true.
Aracı Azure İzleyici'ye telemetri gönderemezse, telemetri dosyalarını diskte depolar. Dosyalar, telemetry klasörüne, java.io.tmpdir tarafından belirtilen sistem özelliği dizininin altına kaydedilir. Her dosya adı bir zaman damgasıyla başlar ve uzantıyla .trn biter. Bu çevrimdışı depolama mekanizması, geçici ağ kesintileri veya alma hataları sırasında telemetrinin korunmasına yardımcı olur.
Aracı varsayılan olarak 50 MB'a kadar telemetri verilerini depolar ve depolama sınırının yapılandırılmasına izin verir. Depolanan telemetri gönderme girişimleri düzenli aralıklarla yapılır. 48 saatten eski telemetri dosyaları silinir ve depolama sınırına ulaşıldığında en eski olaylar atılır.
Kullanılabilir yapılandırmaların tam listesi için bkz . Yapılandırma seçenekleri.
Aracı Azure İzleyici'ye telemetri gönderemezse, telemetri dosyalarını diskte depolar. Dosyalar, telemetry klasörüne, java.io.tmpdir tarafından belirtilen sistem özelliği dizininin altına kaydedilir. Her dosya adı bir zaman damgasıyla başlar ve uzantıyla .trn biter. Bu çevrimdışı depolama mekanizması, geçici ağ kesintileri veya alma hataları sırasında telemetrinin korunmasına yardımcı olur.
Varsayılan olarak, ajan 50 MB'a kadar telemetri verilerini depolar. Depolanan telemetri gönderme girişimleri düzenli aralıklarla yapılır. 48 saatten eski telemetri dosyaları silinir ve depolama sınırına ulaşıldığında en eski olaylar atılır.
Varsayılan olarak, AzureMonitorExporter çevrimdışı depolama için aşağıdaki konumlardan birini kullanır.
- Windows
- %TEMP%\Microsoft-AzureMonitor-
<unique-identifier>\opentelemetry-nodejs-<your-instrumentation-key>
- Windows Olmayan
- %TMPDIR%/Microsoft/Microsoft-AzureMonitor-
<unique-identifier>/opentelemetry-nodejs-<your-instrumentation-key>
- /var/tmp/Microsoft/Microsoft-AzureMonitor-
<unique-identifier>/opentelemetry-nodejs-<your-instrumentation-key>
<unique-identifier> izleme anahtarı, işlem adı, kullanıcı adı ve uygulama dizini gibi kullanıcı ortamı özniteliklerinden oluşturulan bir karmadır. Bu tanımlayıcı yaygın bir çok kullanıcılı sistem sorununu çözer: depolama dizinini ilk kullanıcı oluşturduğunda, dosya izinleri (umask ayarları) diğer kullanıcıların aynı yola erişmesini engelleyebilir. Her kullanıcı bağlamı için benzersiz bir dizin, her kullanıcının uygun erişim izinleriyle kendi depolama konumunu almasını sağlar.
Varsayılan dizini geçersiz kılmak için değerini ayarlamanız storageDirectorygerekir.
Örneğin:
export class OfflineStorageSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
storageDirectory: "C:\\\\SomeDirectory",
disableOfflineStorage: false, // set to true to disable
},
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (offline storage configured)");
}
}
Bu özelliği devre dışı bırakmak için ayarını yapmalısınız disableOfflineStorage = true.
Varsayılan olarak, Azure Monitor aktarıcıları aşağıdaki yolu kullanır.
<tempfile.gettempdir()>/Microsoft-AzureMonitor-<unique-identifier>/opentelemetry-python-<your-instrumentation-key>
<unique-identifier> izleme anahtarı, işlem adı, kullanıcı adı ve uygulama dizini gibi kullanıcı ortamı özniteliklerinden oluşturulan bir karmadır. Bu tanımlayıcı yaygın bir çok kullanıcılı sistem sorununu çözer: depolama dizinini ilk kullanıcı oluşturduğunda, dosya izinleri (umask ayarları) diğer kullanıcıların aynı yola erişmesini engelleyebilir. Her kullanıcı bağlamı için benzersiz bir dizin, her kullanıcının uygun erişim izinleriyle kendi depolama konumunu almasını sağlar.
Varsayılan dizini geçersiz kılmak için istediğiniz dizine ayarlamanız storage_directory gerekir.
Örneğin:
...
# Configure OpenTelemetry to use Azure Monitor with the specified connection string and storage directory.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string to your Azure Monitor Application Insights resource.
# Replace `C:\\SomeDirectory` with the directory where you want to store the telemetry data before it is sent to Azure Monitor.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
storage_directory="C:\\SomeDirectory",
)
...
Bu özelliği devre dışı bırakmak için disable_offline_storage'i True olarak ayarlamanız gerekir. Varsayılan olarak ayarlanır False.
Örneğin:
...
# Configure OpenTelemetry to use Azure Monitor with the specified connection string and disable offline storage.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string to your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
disable_offline_storage=True,
)
...
OTLP İhracatçısını Etkinleştirme
Telemetrinizi iki konuma göndermek için Azure İzleyici İhracatı ile birlikte OpenTelemetry Protokolü (OTLP) Vericisi'ni aynı anda etkinleştirmek isteyebilirsiniz.
Not veya Dikkat
OTLP İhracatçısı yalnızca kolaylık sağlamak için gösterilir. OTLP Exporter'ını veya onun ardındaki herhangi bir bileşeni ya da üçüncü taraf deneyimlerini resmi olarak desteklemiyoruz.
Projenize OpenTelemetry.Exporter.OpenTelemetryProtocol paketini yükleyin.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Aşağıdaki kod parçacığını ekleyin. Bu örnekte, OTLP alıcısı çalışan bir OpenTelemetry Toplayıcınız olduğu varsayılır. Ayrıntılar için GitHub örneğine bakın.
// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);
// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor();
// Add the OpenTelemetry OTLP exporter to the application.
// This exporter will send telemetry data to an OTLP receiver, such as Prometheus
builder.Services.AddOpenTelemetry().WithTracing(builder => builder.AddOtlpExporter());
builder.Services.AddOpenTelemetry().WithMetrics(builder => builder.AddOtlpExporter());
// Build the ASP.NET Core web application.
var app = builder.Build();
// Start the ASP.NET Core web application.
app.Run();
Projenize OpenTelemetry.Exporter.OpenTelemetryProtocol paketini yükleyin.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
Aşağıdaki kod parçacığını ekleyin. Bu örnekte, OTLP alıcısı çalışan bir OpenTelemetry Toplayıcınız olduğu varsayılır. Ayrıntılar için GitHub örneğine bakın.
// Create a new OpenTelemetry tracer provider and add the Azure Monitor trace exporter and the OTLP trace exporter.
// It is important to keep the TracerProvider instance active throughout the process lifetime.
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAzureMonitorTraceExporter()
.AddOtlpExporter()
.Build();
// Create a new OpenTelemetry meter provider and add the Azure Monitor metric exporter and the OTLP metric exporter.
// It is important to keep the MetricsProvider instance active throughout the process lifetime.
var metricsProvider = Sdk.CreateMeterProviderBuilder()
.AddAzureMonitorMetricExporter()
.AddOtlpExporter()
.Build();
Application Insights Java Aracısı OTLP'yi desteklemez.
Desteklenen yapılandırmalar hakkında daha fazla bilgi için Java ek belgelerine bakın.
Telemetri verilerinizi iki konuma göndermek için OpenTelemetry Protokolü (OTLP) İhracatçısını Azure İzleyici İhracatçısı ile birlikte etkinleştiremezsiniz.
Projenize OpenTelemetry Collector trace Exporter ve diğer OpenTelemetry paketlerini yükleyin.
npm install @opentelemetry/api
npm install @opentelemetry/exporter-trace-otlp-http
npm install @opentelemetry/sdk-trace-base
npm install @opentelemetry/sdk-trace-node
Aşağıdaki kod parçacığını ekleyin. Bu örnekte, OTLP alıcısı çalışan bir OpenTelemetry Toplayıcınız olduğu varsayılır. Ayrıntılar için GitHub örneğine bakın.
export class OtlpExporterSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { BatchSpanProcessor } = await import("@opentelemetry/sdk-trace-base");
const { OTLPTraceExporter } = await import("@opentelemetry/exporter-trace-otlp-http");
// Create an OTLP trace exporter (set 'url' if your collector isn't on the default endpoint).
const otlpExporter = new OTLPTraceExporter({
// url: "http://localhost:4318/v1/traces",
});
// Configure Azure Monitor and add the OTLP exporter as an additional span processor.
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
spanProcessors: [new BatchSpanProcessor(otlpExporter)],
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (OTLP exporter added)");
}
}
opentelemetry-exporter-otlp paketini yükleyin.
Aşağıdaki kod parçacığını ekleyin. Bu örnekte, OTLP alıcısı çalışan bir OpenTelemetry Toplayıcınız olduğu varsayılır. Ayrıntılar için bu README bölümüne bakın.
# Import the `configure_azure_monitor()`, `trace`, `OTLPSpanExporter`, and `BatchSpanProcessor` classes from the appropriate packages.
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import BatchSpanProcessor
# Configure OpenTelemetry to use Azure Monitor with the specified connection string.
# Replace `<YOUR-CONNECTION-STRING>` with the connection string to your Azure Monitor Application Insights resource.
configure_azure_monitor(
connection_string="<YOUR-CONNECTION-STRING>",
)
# Get the tracer for the current module.
tracer = trace.get_tracer(__name__)
# Create an OTLP span exporter that sends spans to the specified endpoint.
# Replace `http://localhost:4317` with the endpoint of your OTLP collector.
otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317")
# Create a batch span processor that uses the OTLP span exporter.
span_processor = BatchSpanProcessor(otlp_exporter)
# Add the batch span processor to the tracer provider.
trace.get_tracer_provider().add_span_processor(span_processor)
# Start a new span with the name "test".
with tracer.start_as_current_span("test"):
print("Hello world!")
OpenTelemetry yapılandırmaları
Aşağıdaki OpenTelemetry yapılandırmalarına, Azure Monitor OpenTelemetry Dağıtımı kullanılırken ortam değişkenleri aracılığıyla erişilebilir.
| Ortam değişkeni |
Açıklama |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Bunu Application Insights kaynağınız için bağlantı dizesi olarak ayarlayın. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Dahili ölçüm toplamayı devre dışı bırakmak için true olarak ayarlayın. |
OTEL_RESOURCE_ATTRIBUTES |
Kaynak öznitelikleri olarak kullanılacak anahtar-değer çiftleri. Kaynak öznitelikleri hakkında daha fazla bilgi için bkz . Kaynak SDK belirtimi. |
OTEL_SERVICE_NAME |
Kaynak özniteliğinin service.name değerini ayarlar. Eğer service.nameOTEL_RESOURCE_ATTRIBUTES içinde sağlanmışsa, o zaman OTEL_SERVICE_NAME öncelik kazanır. |
| Ortam değişkeni |
Açıklama |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Bunu Application Insights kaynağınız için bağlantı dizesi olarak ayarlayın. |
APPLICATIONINSIGHTS_STATSBEAT_DISABLED |
Dahili ölçüm toplamayı devre dışı bırakmak için true olarak ayarlayın. |
OTEL_RESOURCE_ATTRIBUTES |
Kaynak öznitelikleri olarak kullanılacak anahtar-değer çiftleri. Kaynak öznitelikleri hakkında daha fazla bilgi için bkz . Kaynak SDK belirtimi. |
OTEL_SERVICE_NAME |
Kaynak özniteliğinin service.name değerini ayarlar. Eğer service.nameOTEL_RESOURCE_ATTRIBUTES içinde sağlanmışsa, o zaman OTEL_SERVICE_NAME öncelik kazanır. |
Java hakkında daha fazla bilgi için Java ek belgelerine bakın.
| Ortam değişkeni |
Açıklama |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Bunu Application Insights kaynağınız için bağlantı dizesi olarak ayarlayın. |
Spring Boot yerel uygulamaları için OpenTelemetry Java SDK yapılandırmaları kullanılabilir.
Quarkus yerel uygulamaları için Quarkus OpenTelemetry belgelerini gözden geçirin.
Not veya Dikkat
Quarkus topluluğu, Quarkus uzantılarını destekler ve korur. Yardım için Quarkus topluluk destek kanallarını kullanın. Microsoft bu tümleştirme için teknik destek sağlamaz.
OpenTelemetry SDK yapılandırması hakkında daha fazla bilgi için OpenTelemetry belgelerine bakın.
URL Sorgu Dizelerini Düzenle
URL sorgu dizelerini gizlemek için sorgu dizesi toplamasını kapatın. Sas belirteci kullanarak Azure depolamayı çağırırsanız bu ayarı öneririz.
Azure.Monitor.OpenTelemetry.AspNetCore dağıtım paketini kullanırken hem ASP.NET Core hem de HttpClient Enstrümentasyon kitaplıkları dahildir.
Dağıtım paketimiz Sorgu Dizesi Redaction'ını varsayılan olarak devre dışı bırakır.
Bu davranışı değiştirmek için ortam değişkenini true veya false olarak ayarlamanız gerekir.
ASP.NET Core Enstrümantasyon: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION Sorgu Dizesi Düzenleme varsayılan olarak devre dışı bırakılmıştır. Etkinleştirmek için bu ortam değişkenini olarak falseayarlayın.
HTTP İstemci Enstrümantasyonu: OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION Sorgu Dizesi Sansürleme varsayılan olarak devre dışıdır. Etkinleştirmek için bu ortam değişkenini olarak falseayarlayın.
Azure.Monitor.OpenTelemetry.Exporter kullanırken, OpenTelemetry yapılandırmanıza ASP.NET Core veya HttpClient Instrumentation kitaplıklarını el ile eklemeniz gerekir.
Bu Araçlar kitaplıklarında QueryString Redaction varsayılan olarak etkinleştirilmiştir.
Bu davranışı değiştirmek için ortam değişkenini true veya false olarak ayarlamanız gerekir.
ASP.NET Core Enstrümantasyon: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION Sorgu Dizesi Kırpılması varsayılan olarak etkindir. Devre dışı bırakmak için bu ortam değişkenini olarak trueayarlayın.
Http İstemci İzleme: OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION Sorgu Dizesi Düzenlemesi varsayılan olarak etkindir. Devre dışı bırakmak için bu ortam değişkenini olarak trueayarlayın.
Yapılandırma dosyasına aşağıdakileri applicationinsights.json ekleyin:
{
"preview": {
"processors": [
{
"type": "attribute",
"actions": [
{
"key": "url.query",
"pattern": "^.*$",
"replace": "REDACTED",
"action": "mask"
}
]
},
{
"type": "attribute",
"actions": [
{
"key": "url.full",
"pattern": "[?].*$",
"replace": "?REDACTED",
"action": "mask"
}
]
}
]
}
}
Yeniden düzenlemeyi desteklemek için OpenTelemetry topluluğunda etkin bir şekilde çalışıyoruz.
Azure İzleyici OpenTelemetry dağıtım paketini kullanırken, dağıtım yapılandırmasına bir span işlemcisi oluşturup uygulayarak sorgu dizeleri yeniden uygulanabilir.
export class RedactQueryStringsSample {
static async run() {
const { useAzureMonitor } = await import("@azure/monitor-opentelemetry");
const { SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL } =
await import("@opentelemetry/semantic-conventions");
class RedactQueryStringProcessor {
forceFlush() { return Promise.resolve(); }
onStart() {}
shutdown() { return Promise.resolve(); }
onEnd(span: any) {
const route = String(span.attributes[SEMATTRS_HTTP_ROUTE] ?? "");
const url = String(span.attributes[SEMATTRS_HTTP_URL] ?? "");
const target = String(span.attributes[SEMATTRS_HTTP_TARGET] ?? "");
const strip = (s: string) => {
const i = s.indexOf("?");
return i === -1 ? s : s.substring(0, i);
};
if (route) span.attributes[SEMATTRS_HTTP_ROUTE] = strip(route);
if (url) span.attributes[SEMATTRS_HTTP_URL] = strip(url);
if (target) span.attributes[SEMATTRS_HTTP_TARGET] = strip(target);
}
}
const options = {
azureMonitorExporterOptions: {
connectionString:
process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR-CONNECTION-STRING>",
},
spanProcessors: [new RedactQueryStringProcessor()],
};
const monitor = useAzureMonitor(options);
console.log("Azure Monitor initialized (query strings redacted)");
}
}
Yeniden düzenlemeyi desteklemek için OpenTelemetry topluluğunda etkin bir şekilde çalışıyoruz.
Metrik dışa aktarma aralığı
Ortam değişkenini kullanarak OTEL_METRIC_EXPORT_INTERVAL ölçüm dışarı aktarma aralığını yapılandırabilirsiniz.
OTEL_METRIC_EXPORT_INTERVAL=60000
Varsayılan değer milisaniyedir 60000 (60 saniye). Bu ayar, OpenTelemetry SDK'sının ölçümleri dışarı aktarma sıklıklarını denetler.
İpucu
Azure İzleyici Ölçümleri ve Azure İzleyici Çalışma Alanı özel ölçümleri sabit 60 saniyelik aralıklarla alır. Daha sık gönderilen ölçümler her 60 saniyede bir arabelleğe alınıp işlenir. Log Analytics, ölçümleri gönderildikleri aralıkta kaydeder ve bu da maliyetleri daha kısa aralıklarla artırabilir ve daha uzun aralıklarla görünürlüğü geciktirebilir.
Referans için, aşağıdaki OpenTelemetry belirtimlerine bakın: