Share via


Konfigurera Azure Monitor OpenTelemetry

Den här artikeln beskriver konfigurationsinställningar för Azure Monitor OpenTelemetry-distributionen.

Connection string

En anslutningssträng i Application Insights definierar målplatsen för att skicka telemetridata, vilket säkerställer att den når rätt resurs för övervakning och analys.

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

  • Lägg till UseAzureMonitor() i startprogrammet i din program.cs klass.

    // 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 => {
        options.ConnectionString = "<Your Connection String>";
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.    
    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>"
      }
    }
    

Kommentar

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 det 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 OpenTelemetry tracer provider to add the resource attributes to all traces.
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => 
    builder.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 ett anpassat exempel på fast hastighet som fyller händelser med ett samplingsförhållande som Application Insights konverterar till ItemCount. Sampeln med fast hastighet säkerställer korrekta upplevelser och händelseantal. Exempelprogrammet är utformat för att bevara dina spårningar mellan tjänster, och det kan användas tillsammans med äldre Application Insights-SDK:er. Mer information finns i Läs mer om sampling.

Kommentar

Mått och loggar påverkas inte av sampling.

Provtagaren förväntar sig en exempelfrekvens på 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(o =>
{
    // Set the sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
    o.SamplingRatio = 0.1F;
});

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

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

Dricks

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 % (dvs. 0,05 samplingsförhållande) och justerar frekvensen baserat på noggrannheten i de åtgärder som visas i fel- och prestandabladen. En högre frekvens resulterar vanligtvis i högre noggrannhet. All sampling påverkar dock noggrannheten, så vi rekommenderar aviseringar om OpenTelemetry-mått, som inte påverkas av sampling.

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.

Vi stöder de autentiseringsklasser som tillhandahålls av Azure Identity.

  • Vi rekommenderar DefaultAzureCredential för lokal utveckling.
  • Vi rekommenderar ManagedIdentityCredential systemtilldelade och användartilldelade hanterade identiteter.
    • För systemtilldelade använder du standardkonstruktorn utan parametrar.
    • För användartilldelad anger du klient-ID:t till konstruktorn.
  • Vi rekommenderar ClientSecretCredential för tjänstens huvudnamn.
    • Ange klient-ID, klient-ID och klienthemlighet till konstruktorn.
  1. Installera det senaste Azure.Identity-paketet :

    dotnet add package Azure.Identity
    
  2. Ange önskad klass för autentiseringsuppgifter:

    // 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 credential to the DefaultAzureCredential.
        // This credential will use the Azure identity of the current user or
        // the service principal that the application is running as to authenticate
        // to Azure Monitor.
        options.Credential = new DefaultAzureCredential();
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

Offlinelagring och automatiska återförsök

För att förbättra tillförlitligheten och motståndskraften skriver Azure Monitor OpenTelemetry-baserade erbjudanden som standard till offline/lokal lagring när ett program förlorar sin anslutning till Application Insights. Programmets telemetri sparas på disken och försöker regelbundet skicka den igen i upp till 48 timmar. I program med hög belastning tas telemetri ibland bort av två skäl. Först när den tillåtna tiden överskrids, och för det andra, när den maximala filstorleken överskrids eller SDK:t inte har möjlighet att rensa filen. Om vi behöver välja sparar produkten nyare händelser jämfört med gamla. Läs mer

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.

Kommentar

OTLP-exportören visas endast för enkelhetens skull. Vi har inte officiellt stöd för OTLP-exportören eller komponenter eller tredjepartsupplevelser nedströms.

  1. Installera paketet OpenTelemetry.Exporter.OpenTelemetryProtocol i projektet.

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    
  2. Lägg till följande kodfragment. Det här exemplet förutsätter att du har en OpenTelemetry Collector med en OTLP-mottagare som körs. 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äng 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 anges också i OTEL_RESOURCE_ATTRIBUTEShar du OTEL_SERVICE_NAME företräde.

Vanliga frågor och svar

Det här avsnittet innehåller svar på vanliga frågor.

Vad är OpenTelemetry?

Det är en ny standard med öppen källkod för observerbarhet. Läs mer på OpenTelemetry.

Varför investerar Microsoft Azure Monitor i OpenTelemetry?

Microsoft är bland de största bidragsgivarna till OpenTelemetry.

De viktigaste värdeförslagen för OpenTelemetry är att det är leverantörsneutralt och ger konsekventa API:er/SDK:er mellan olika språk.

Med tiden tror vi att OpenTelemetry gör det möjligt för Azure Monitor-kunder att observera program som skrivits på språk utöver våra språk som stöds. Den utökar också de typer av data som du kan samla in via en omfattande uppsättning instrumentationsbibliotek. Dessutom tenderar OpenTelemetry Software Development Kits (SDK:er) att vara mer högpresterande i stor skala än sina föregångare, Application Insights SDK:er.

Slutligen överensstämmer OpenTelemetry med Microsofts strategi att ta till sig öppen källkod.

Vad är statusen för OpenTelemetry?

Se Status för OpenTelemetry.

Vad är "Azure Monitor OpenTelemetry Distro"?

Du kan se det som en tunn omslutning som buntar ihop alla OpenTelemetry-komponenter för en förstklassig upplevelse i Azure. Den här omslutningen kallas även för en distribution i OpenTelemetry.

Varför ska jag använda "Azure Monitor OpenTelemetry Distro"?

Det finns flera fördelar med att använda Azure Monitor OpenTelemetry Distro över inbyggd OpenTelemetry från communityn:

I OpenTelemetrys anda utformade vi distributionen så att den var öppen och utökningsbar. Du kan till exempel lägga till:

  • En OpenTelemetry Protocol-exportör (OTLP) och skicka till ett andra mål samtidigt
  • Andra instrumentationsbibliotek som inte ingår i distributionen

Eftersom Distro tillhandahåller en OpenTelemetry-distribution stöder distributionen allt som stöds av OpenTelemetry. Du kan till exempel lägga till fler telemetriprocessorer, exportörer eller instrumentationsbibliotek om OpenTelemetry stöder dem.

Kommentar

Distributionen anger sampler till en anpassad, fast frekvensexempel för Application Insights. Du kan ändra detta till en annan provtagare, men om du gör det kan du inaktivera några av distributionsfunktionerna. Mer information om exempelprogrammet som stöds finns i avsnittet Aktivera sampling i Konfigurera Azure Monitor OpenTelemetry.

För språk utan en fristående OpenTelemetry-exportör som stöds är Azure Monitor OpenTelemetry Distro det enda sättet att använda OpenTelemetry med Azure Monitor. För språk med en fristående OpenTelemetry-exportör som stöds kan du använda antingen Azure Monitor OpenTelemetry Distro eller lämplig fristående OpenTelemetry-exportör beroende på ditt telemetriscenario. Mer information finns i När ska jag använda Azure Monitor OpenTelemetry-exportören?.

Hur kan jag testa Azure Monitor OpenTelemetry Distro?

Kolla in våra aktiveringsdokument för .NET, Java, JavaScript (Node.js) och Python.

Ska jag använda OpenTelemetry eller Application Insights SDK?

Vi rekommenderar att du använder OpenTelemetry Distro om du inte behöver en funktion som endast är tillgänglig med formell support i Application Insights SDK.

Att använda OpenTelemetry förhindrar nu att du behöver migrera vid ett senare tillfälle.

När ska jag använda Azure Monitor OpenTelemetry-exportören?

För ASP.NET Core, Java, Node.js och Python rekommenderar vi att du använder Azure Monitor OpenTelemetry Distro. Det är en kodrad för att komma igång.

För alla andra .NET-scenarier, inklusive klassiska ASP.NET, konsolappar, Windows Forms (WinForms) osv. rekommenderar vi att du använder .NET Azure Monitor OpenTelemetry-exportören: Azure.Monitor.OpenTelemetry.Exporter.

För mer komplexa Python-telemetriscenarier som kräver avancerad konfiguration rekommenderar vi att du använder Python Azure Monitor OpenTelemetry Exporter.

Vad är det aktuella versionstillståndet för funktioner i Azure Monitor OpenTelemetry Distro?

Följande diagram delar upp funktionsstöd för OpenTelemetry för varje språk.

Funktion .NET Node.js Python Java
Distribuerad spårning
Anpassade mått
Standardmått (noggrannhet som för närvarande påverkas av sampling)
Sampling med fast frekvens
Offlinelagring och automatiska återförsök
Undantagsrapportering
Loggsamling ⚠️
Anpassade händelser ⚠️ ⚠️ ⚠️
Microsoft Entra-autentisering
Live-mått
Identifiera resurskontext för virtuell dator/VMSS och App Service
Identifiera resurskontext för Azure Kubernetes Service (AKS) och Functions
Filtrering av tillgänglighetstestintervall
Automatisk inpopulation av användar-ID, autentiserat användar-ID och användar-IP
Åsidosätt/ange åtgärdsnamn, användar-ID eller autentiserat användar-ID manuellt
Adaptiv sampling
Profilerare ⚠️
Felsökning av ögonblicksbild

Tangent

  • ✅ Den här funktionen är tillgänglig för alla kunder med formell support.
  • ⚠️ Den här funktionen är tillgänglig som en offentlig förhandsversion. Se Kompletterande användningsvillkor för Förhandsversioner av Microsoft Azure.
  • ❌ Den här funktionen är inte tillgänglig eller är inte tillämplig.

Kan OpenTelemetry användas för webbläsare?

Ja, men vi rekommenderar det inte och Azure stöder det inte. OpenTelemetry JavaScript är mycket optimerat för Node.js. I stället rekommenderar vi att du använder Application Insights JavaScript SDK.

När kan vi förvänta oss att OpenTelemetry SDK ska vara tillgängligt för användning i webbläsare?

OpenTelemetry-webb-SDK:t har ingen fastställd tillgänglighetstidslinje. Vi är förmodligen flera år från en webbläsar-SDK som är ett genomförbart alternativ till Application Insights JavaScript SDK.

Kan jag testa OpenTelemetry i en webbläsare idag?

OpenTelemetry-webbsandlådan är en förgrening som utformats för att få OpenTelemetry att fungera i en webbläsare. Det går ännu inte att skicka telemetri till Application Insights. SDK:t definierar inte allmänna klienthändelser.

Stöds application insights tillsammans med konkurrerande agenter som AppDynamics, DataDog och NewRelic?

Den här metoden är inte något som vi planerar att testa eller stödja, även om våra distributioner gör att du kan exportera till en OTLP-slutpunkt tillsammans med Azure Monitor samtidigt.

Kan jag använda förhandsversionsfunktioner i produktionsmiljöer?

Vi rekommenderar det inte. Se Kompletterande användningsvillkor för Förhandsversioner av Microsoft Azure.

Vad är skillnaden mellan manuell och automatisk instrumentering?

Se Översikt över OpenTelemetry.

Kan jag använda OpenTelemetry Collector?

Vissa kunder använder OpenTelemetry Collector som ett agentalternativ, även om Microsoft inte officiellt stöder en agentbaserad metod för programövervakning ännu. Under tiden bidrog communityn med öppen källkod med en OpenTelemetry Collector Azure Monitor-exportör som vissa kunder använder för att skicka data till Azure Monitor Application Insights. Detta stöds inte av Microsoft.

Vad är skillnaden mellan OpenCensus och OpenTelemetry?

OpenCensus är föregångaren till OpenTelemetry. Microsoft hjälpte till att samla OpenTracing och OpenCensus för att skapa OpenTelemetry, en enda observerbarhetsstandard för världen. Den aktuella produktionsrekommenderade Python SDK :t för Azure Monitor baseras på OpenCensus. Microsoft har åtagit sig att göra Azure Monitor baserat på OpenTelemetry.

Felsökning

Fungerar det inte? Kolla in felsökningssidan för ASP.NET Core.

Support

Välj en flik för det språk du väljer för att identifiera supportalternativ.

Feedback om OpenTelemetry

Så här ger du feedback: