Dela via


Konfigurera Azure Monitor OpenTelemetry

Den här guiden beskriver hur du konfigurerar OpenTelemetry (OTel) i Azure Monitor Application Insights med hjälp av Azure Monitor OpenTelemetry-distributionen. Korrekt konfiguration säkerställer konsekvent insamling av telemetridata i .NET-, Java-, Node.js- och Python-program, vilket möjliggör mer tillförlitlig övervakning och diagnostik.

Anmärkning

Information om Azure Function Apps finns i Använda OpenTelemetry med Azure Functions.

Anslutningssträng

En anslutningssträng i Application Insights definierar målplatsen för att skicka telemetridata.

Använd något av följande tre sätt att konfigurera anslutningssträng:

  • Lägg till UseAzureMonitor() i program.cs filen:
    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();
  • Ange en miljövariabel.
   APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
  • Lägg till följande avsnitt i konfigurationsfilen appsettings.json .
  {
    "AzureMonitor": {
        "ConnectionString": "<Your Connection String>"
    }
  }

Anmärkning

Om du anger anslutningssträng på fler än en plats följer vi följande prioritet:

  1. Kod
  2. Miljövariabel
  3. Konfigurationsfil

Ange namnet på molnrollen och molnrollinstansen

För språk som stöds identifierar Azure Monitor OpenTelemetry Distro automatiskt resurskontexten och tillhandahåller standardvärden för egenskaperna Cloud Role Name och Cloud Role Instance för din komponent. Men du kanske vill åsidosätta standardvärdena till något som passar ditt team. Värdet för molnrollens namn visas på programkartan som namnet under en nod.

Ange namnet på molnrollen och molnrollinstansen via resursattribut . Namnet på molnrollen använder service.namespace och service.name attribut, även om det återgår till service.name om service.namespace inte har angetts. Cloud Role Instance använder service.instance.id attributvärdet. Information om standardattribut för resurser finns i OpenTelemetry Semantiska konventioner.

// 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();

Aktivera sampling

Du kanske vill aktivera sampling för att minska datainmatningsvolymen, vilket minskar kostnaden. Azure Monitor tillhandahåller en anpassad fast samplingshastighet som tilldelar ett samplingsförhållande till händelser, vilket Application Insights konverterar till ItemCount. Sampeln med fast hastighet säkerställer korrekta upplevelser och händelseantal. Samplern är utformad för att bevara dina spår mellan tjänster, och den är kompatibel med äldre Application Insights Software Development Kits (SDK:er). Mer information finns i Läs mer om sampling.

Anmärkning

Mått och loggar påverkas inte av sampling. Om du ser oväntade avgifter eller höga kostnader i Application Insights kan den här guiden hjälpa dig. Den omfattar vanliga orsaker som hög telemetrivolym, datainmatningstoppar och felkonfigurerad sampling. Det är särskilt användbart om du felsöker problem som rör kostnadstoppar, telemetrivolym, sampling som inte fungerar, datatak, hög inmatning eller oväntad fakturering. Information om hur du kommer igång finns i Felsöka hög datainmatning i Application Insights.

Provtagaren förväntar sig en samplingsfrekvens mellan 0 och 1, inklusive. En hastighet på 0,1 innebär att cirka 10 % av dina spårningar skickas.

// 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 sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
    options.SamplingRatio = 0.1F;
});

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Tips

När du använder sampling med fast hastighet/procent och du inte är säker på vad du ska ange samplingsfrekvensen som, börjar du på 5 %. (0,05 samplingsförhållande) Justera hastigheten baserat på noggrannheten för de åtgärder som visas i fel- och prestandafönstret. En högre frekvens resulterar vanligtvis i högre noggrannhet. All sampling påverkar dock noggrannheten, så vi rekommenderar att du skickar aviseringar baserade på OpenTelemetry-mätvärden, som inte påverkas av sampling.

Live-metriker

Realtidsmått erbjuder en realtidsanalysinstrumentpanel för insikt i applikationsaktivitet och prestanda.

Viktigt!

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

Den här funktionen aktiveras som standard.

Användare kan inaktivera Live Metrics när de konfigurerar distributionen.

builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
	// Disable the Live Metrics feature.
    options.EnableLiveMetrics = false;
});

Aktivera autentisering med Microsoft Entra-ID (tidigare Azure AD)

Du kanske vill aktivera Microsoft Entra-autentisering för en säkrare anslutning till Azure, vilket förhindrar att obehörig telemetri matas in i din prenumeration.

Mer information finns på vår dedikerade Microsoft Entra-autentiseringssida länkad för varje språk som stöds.

Information om hur du konfigurerar Entra ID-autentisering finns i Microsoft Entra-autentisering för Application Insights

Offlinelagring och automatiska återförsök

Azure Monitor OpenTelemetry-baserade erbjudanden cachelagrar telemetri när ett program kopplas bort från Application Insights och försöker skicka igen i upp till 48 timmar. Rekommendationer för datahantering finns i Exportera och ta bort privata data. Program med hög belastning släpper ibland telemetri av två skäl: överskrider den tillåtna tiden eller överskrider den maximala filstorleken. Vid behov prioriterar produkten de senaste händelserna framför gamla.

Distributionspaketet innehåller AzureMonitorExporter, som som standard använder någon av följande platser för offlinelagring (listad i prioritetsordning):

  • Windows
    • %LOCALAPPDATA%\Microsoft\AzureMonitor
    • %TEMP%\Microsoft\AzureMonitor
  • Icke-Windows
    • %TMPDIR%/Microsoft/AzureMonitor
    • /var/tmp/Microsoft/AzureMonitor
    • /tmp/Microsoft/AzureMonitor

Om du vill åsidosätta standardkatalogen bör du ange AzureMonitorOptions.StorageDirectory.

// 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 cannot 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();

Om du vill inaktivera den här funktionen bör du ange AzureMonitorOptions.DisableOfflineStorage = true.

Aktivera OTLP-exportören

Du kanske vill aktivera exportör av OpenTelemetry Protocol (OTLP) tillsammans med Azure Monitor Exporter för att skicka telemetrin till två platser.

Anmärkning

OTLP-exportören visas bara för att underlätta. Vi stöder inte officiellt OTLP-exportören eller några komponenter eller tredjepartsupplevelser nedströms av det.

  1. Installera paketet OpenTelemetry.Exporter.OpenTelemetryProtocol i projektet.
    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
  1. Lägg till följande kodfragment. Det här exemplet förutsätter att du har en OpenTelemetry Collector med en OTLP-mottagare igång. Mer information finns i exemplet på GitHub.
// 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();

OpenTelemetry-konfigurationer

Följande OpenTelemetry-konfigurationer kan nås via miljövariabler när du använder Azure Monitor OpenTelemetry Distros.

Miljövariabel beskrivning
APPLICATIONINSIGHTS_CONNECTION_STRING Ange den till anslutningssträngen för Application Insights-resursen.
APPLICATIONINSIGHTS_STATSBEAT_DISABLED Ställ in den på true om du vill avregistrera dig från intern måttsamling.
OTEL_RESOURCE_ATTRIBUTES Nyckel/värde-par som ska användas som resursattribut. Mer information om resursattribut finns i Resource SDK-specifikationen.
OTEL_SERVICE_NAME Anger värdet för resursattributet service.name . Om service.name också anges i OTEL_RESOURCE_ATTRIBUTES, så har OTEL_SERVICE_NAME företräde.

Redigera URL-frågesträngar

Om du vill redigera URL-frågesträngar inaktiverar du frågesträngssamlingen. Vi rekommenderar den här inställningen om du anropar Azure Storage med en SAS-token.

När du använder distributionspaketet Azure.Monitor.OpenTelemetry.AspNetCore ingår både biblioteken ASP.NET Core och HttpClient Instrumentation. Vårt distributionspaket har frågesträngsredigering avstängd som standard.

Om du vill ändra det här beteendet måste du ange en miljövariabel till antingen true eller false.

  • ASP.NET Core Instrumentation: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION Frågesträngsredigering är inaktiverad som standard. Om du vill aktivera anger du den här miljövariabeln till false.
  • Http-klientinstrumentation: OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION Frågesträngsredigering är inaktiverad som standard. Om du vill aktivera anger du den här miljövariabeln till false.

Måttexportintervall

Du kan konfigurera måttexportintervallet med hjälp av OTEL_METRIC_EXPORT_INTERVAL miljövariabeln.

OTEL_METRIC_EXPORT_INTERVAL=60000

Standardvärdet är 60000 millisekunder (60 sekunder). Den här inställningen styr hur ofta OpenTelemetry SDK exporterar mått.

Tips

Azure Monitor Metrics och Azure Monitor Workspace matar in anpassade mått med ett fast intervall på 60 sekunder. Mått som skickas oftare är buffrade och bearbetas en gång varje 60:e sekund. Log Analytics registrerar mått med det intervall som de skickas, vilket kan öka kostnaden med kortare intervall och fördröja synligheten vid längre.

Mer information finns i följande OpenTelemetry-specifikationer: