Udostępnij za pośrednictwem


Konfigurowanie usługi Azure Monitor OpenTelemetry

W tym artykule opisano ustawienia konfiguracji dystrybucji OpenTelemetry usługi Azure Monitor.

Connection string

Parametry połączenia w usłudze Application Insights definiuje lokalizację docelową wysyłania danych telemetrycznych.

Aby skonfigurować parametry połączenia, użyj jednego z następujących trzech sposobów:

  • Dodaj UseAzureMonitor() do program.cs pliku:

    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();
    
  • Ustaw zmienną środowiskową.

    APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
    
  • Dodaj następującą sekcję do appsettings.json pliku konfiguracji.

    {
      "AzureMonitor": {
          "ConnectionString": "<Your Connection String>"
      }
    }
    

Uwaga

Jeśli ustawisz parametry połączenia w więcej niż jednym miejscu, przestrzegamy następującego pierwszeństwa:

  1. Kod
  2. Zmienna środowiskowa
  3. Plik konfiguracji

Ustawianie nazwy roli chmury i wystąpienia roli w chmurze

W przypadku obsługiwanych języków dystrybucja OpenTelemetry usługi Azure Monitor automatycznie wykrywa kontekst zasobu i udostępnia wartości domyślne właściwości Nazwa roli chmury i Wystąpienie roli chmury składnika. Warto jednak zastąpić wartości domyślne coś, co ma sens dla twojego zespołu. Wartość nazwy roli chmury jest wyświetlana na mapie aplikacji jako nazwa poniżej węzła.

Ustaw nazwę roli chmury i wystąpienie roli chmury za pomocą atrybutów zasobów . Nazwa roli chmury używa service.namespace atrybutów i service.name , chociaż nie service.name service.namespace jest ustawiona. Wystąpienie roli w chmurze używa wartości atrybutu service.instance.id . Aby uzyskać informacje na temat atrybutów standardowych dla zasobów, zobacz OpenTelemetry Semantic Conventions (Konwencje semantyczne protokołu OpenTelemetry).

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

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

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

Włączanie próbkowania

Możesz włączyć próbkowanie, aby zmniejszyć ilość pozyskiwania danych, co zmniejsza koszt. Usługa Azure Monitor udostępnia niestandardowy próbkator o stałej szybkości , który wypełnia zdarzenia współczynnikiem próbkowania, który usługa Application Insights konwertuje na ItemCountwartość . Próbkator o stałej szybkości zapewnia dokładne środowiska i liczby zdarzeń. Przykładowy program został zaprojektowany tak, aby zachować ślady w usługach i współdziałać ze starszymi zestawami SDK (Software Development Kit) usługi Application Insights. Aby uzyskać więcej informacji, zobacz Dowiedz się więcej o próbkowaniu.

Uwaga

Metryki i dzienniki nie mają wpływu na próbkowanie.

Próbkator oczekuje częstotliwości próbkowania z zakresu od 0 do 1 włącznie. Szybkość 0,1 oznacza, że wysyłane są około 10% śladów.

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

Napiwek

W przypadku korzystania z próbkowania o stałej szybkości/wartości procentowej nie masz pewności, co należy ustawić częstotliwość próbkowania jako, zacznij od 5% (tj. współczynnik próbkowania 0,05) i dostosuj szybkość na podstawie dokładności operacji wyświetlanych w okienkach błędów i wydajności. Wyższa stawka zwykle skutkuje wyższą dokładnością. Jednak każde próbkowanie będzie miało wpływ na dokładność, dlatego zalecamy alerty dotyczące metryk OpenTelemetry, które nie mają wpływu na próbkowanie.

Metryki na żywo

Metryki na żywo udostępnia pulpit nawigacyjny analizy w czasie rzeczywistym umożliwiający wgląd w aktywność aplikacji i wydajność.

Ważne

Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.

Ten funkcjonalność jest włączona domyślnie.

Użytkownicy mogą wyłączyć metryki na żywo podczas konfigurowania dystrybucji.

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

Włączanie uwierzytelniania w usłudze Microsoft Entra ID (dawniej Azure AD)

Możesz włączyć uwierzytelnianie entra firmy Microsoft na potrzeby bezpieczniejszego połączenia z platformą Azure, co uniemożliwia pozyskiwanie nieautoryzowanych danych telemetrycznych do subskrypcji.

Obsługujemy klasy poświadczeń udostępniane przez usługę Azure Identity.

  • Zalecamy DefaultAzureCredential tworzenie aplikacji lokalnych.
  • Zalecamy ManagedIdentityCredential używanie tożsamości zarządzanych przypisanych przez system i przypisanych przez użytkownika.
    • W przypadku przypisanego przez system użyj konstruktora domyślnego bez parametrów.
    • W przypadku przypisanego przez użytkownika podaj identyfikator klienta konstruktorowi.
  • Zalecamy ClientSecretCredential korzystanie z jednostek usługi.
    • Podaj identyfikator dzierżawy, identyfikator klienta i klucz tajny klienta konstruktora.
  1. Zainstaluj najnowszy pakiet Azure.Identity :

    dotnet add package Azure.Identity
    
  2. Podaj żądaną klasę poświadczeń:

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

Magazyn w trybie offline i automatyczne ponawianie prób

Aby zwiększyć niezawodność i odporność, oferty oparte na usłudze Azure Monitor OpenTelemetry zapisują się do magazynu w trybie offline/lokalnym domyślnie, gdy aplikacja utraci połączenie z usługą Application Insights. Zapisuje ona dane telemetryczne aplikacji na dysku i okresowo próbuje wysłać ją ponownie przez maksymalnie 48 godzin. W aplikacjach o dużym obciążeniu dane telemetryczne są od czasu do czasu porzucane z dwóch powodów. Po pierwsze, gdy dozwolony czas zostanie przekroczony, a po drugie, gdy maksymalny rozmiar pliku zostanie przekroczony lub zestaw SDK nie ma możliwości wyczyszczenia pliku. Jeśli musimy wybrać, produkt zapisuje najnowsze zdarzenia w porównaniu ze starymi. Dowiedz się więcej

Pakiet dystrybucji zawiera element AzureMonitorExporter, który domyślnie używa jednej z następujących lokalizacji dla magazynu offline (wymienionego w kolejności pierwszeństwa):

  • Windows:
    • %LOCALAPPDATA%\Microsoft\AzureMonitor
    • %TEMP%\Microsoft\AzureMonitor
  • System inny niż Windows
    • %TMPDIR%/Microsoft/AzureMonitor
    • /var/tmp/Microsoft/AzureMonitor
    • /tmp/Microsoft/AzureMonitor

Aby zastąpić katalog domyślny, należy ustawić wartość 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();

Aby wyłączyć tę funkcję, należy ustawić wartość AzureMonitorOptions.DisableOfflineStorage = true.

Włączanie eksportera OTLP

Możesz włączyć eksportera protokołu OpenTelemetry Protocol (OTLP) wraz z eksporterem usługi Azure Monitor w celu wysłania danych telemetrycznych do dwóch lokalizacji.

Uwaga

Eksporter OTLP jest wyświetlany tylko dla wygody. Nie obsługujemy oficjalnie eksportera OTLP ani żadnych składników ani środowisk innych firm podrzędnych.

  1. Zainstaluj pakiet OpenTelemetry.Exporter.OpenTelemetryProtocol w projekcie.

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    
  2. Dodaj następujący fragment kodu. W tym przykładzie założono, że masz moduł zbierający OpenTelemetry z uruchomionym odbiornikiem OTLP. Aby uzyskać szczegółowe informacje, zobacz przykład w witrynie 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();
    

Konfiguracje openTelemetry

Następujące konfiguracje biblioteki OpenTelemetry można uzyskać za pośrednictwem zmiennych środowiskowych podczas korzystania z dystrybucji OpenTelemetry usługi Azure Monitor.

Zmienna środowiskowa opis
APPLICATIONINSIGHTS_CONNECTION_STRING Ustaw go na parametry połączenia dla zasobu usługi Application Insights.
APPLICATIONINSIGHTS_STATSBEAT_DISABLED Ustaw ją, aby true zrezygnować z wewnętrznej kolekcji metryk.
OTEL_RESOURCE_ATTRIBUTES Pary klucz-wartość, które mają być używane jako atrybuty zasobów. Aby uzyskać więcej informacji na temat atrybutów zasobów, zobacz specyfikację zestawu Resource SDK.
OTEL_SERVICE_NAME Ustawia wartość atrybutu service.name zasobu. Jeśli service.name element jest również podany w pliku OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME ma pierwszeństwo.

Redact URL Query Strings

Aby zredagować ciągi zapytania adresu URL, wyłącz zbieranie ciągów zapytania. Zalecamy to ustawienie, jeśli wywołasz usługę Azure Storage przy użyciu tokenu SAS.

W przypadku korzystania z pakietu dystrybucji Azure.Monitor.OpenTelemetry.AspNetCore uwzględniane są zarówno biblioteki ASP.NET Core , jak i HttpClient Instrumentation. Nasz pakiet dystrybucji domyślnie ustawia funkcję redaction ciągu zapytania.

Aby zmienić to zachowanie, należy ustawić zmienną środowiskową na wartość "true" lub "false".

  • ASP.NET Instrumentacja podstawowa: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION redakcja ciągu zapytania jest domyślnie wyłączona. Aby włączyć, ustaw tę zmienną środowiskową na wartość "false".
  • Instrumentacja klienta HTTP: OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION redakcja ciągu zapytania jest domyślnie wyłączona. Aby włączyć, ustaw tę zmienną środowiskową na wartość "false".