Sdílet prostřednictvím


Použití OpenTelemetry se službou Azure Functions

Důležité

Podpora OpenTelemetry pro Azure Functions je aktuálně ve verzi Preview a vaše aplikace musí být hostovaná v plánu Flex Consumption, aby používala OpenTelemetry.

V tomto článku se dozvíte, jak nakonfigurovat aplikaci funkcí pro export dat protokolu a trasování ve formátu OpenTelemetry. Azure Functions generuje telemetrická data na spouštění funkcí z hostitelského procesu Functions i pracovního procesu specifického pro jazyk, ve kterém běží kód funkce. Ve výchozím nastavení se tato telemetrická data odesílají do aplikace Přehledy pomocí sady Application Přehledy SDK. Tato data ale můžete exportovat pomocí sémantiky OpenTelemetry. I když stále můžete k odesílání dat do aplikace Přehledy použít formát OpenTelemetry, můžete teď také exportovat stejná data do libovolného jiného koncového bodu kompatibilního s OpenTelemetry.

Tip

Vzhledem k tomu, že se tento článek zaměřuje na zvolený vývojový jazyk, nezapomeňte zvolit správný jazyk v horní části článku.

V současné době pro aplikace v Javě není žádná podpora OpenTelemetry optimalizovaná pro klienty.

OpenTelemetry se v současné době nepodporuje pro procesní aplikace jazyka C#.

Tyto výhody můžete získat povolením OpenTelemetry ve vaší aplikaci funkcí:

  • Korelace mezi trasováními a protokoly generovanými v hostiteli i v kódu vaší aplikace.
  • Konzistentní generování exportovatelných telemetrických dat založených na standardech
  • Integruje se s jinými poskytovateli, kteří můžou využívat data kompatibilní s OpenTeleletry.

OpenTelemetry je povolená na úrovni aplikace funkcí v konfiguraci hostitele (host.json) i v projektu kódu. Funkce také poskytují prostředí optimalizované pro klienta pro export dat OpenTelemetry z kódu funkce, který běží v pracovním procesu specifickém pro jazyk.

1. Povolení OpenTelemetry v hostiteli Functions

Když v souboru host.json aplikace funkcí povolíte výstup OpenTelemetry, exportuje hostitel výstup OpenTelemetry bez ohledu na zásobník jazyka používaný vaší aplikací.

Pokud chcete povolit výstup OpenTelemetry z hostitele Functions, aktualizujte soubor host.json v projektu kódu a přidejte "telemetryMode": "openTelemetry" do kořenové kolekce prvek. Když je povolený OpenTelemetry, může váš soubor host.json vypadat takto:

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            },
            "enableLiveMetricsFilters": true
        }
    },
    "telemetryMode": "openTelemetry"
}

2. Konfigurace nastavení aplikace

Pokud je v souboru host.json povolená funkce OpenTelemetry, určí se koncové body, do kterých se odesílají data, na základě kterých jsou v proměnných prostředí vaší aplikace k dispozici nastavení aplikace s podporou OpenTelemetry.

Vytvořte v aplikaci funkcí konkrétní nastavení aplikace na základě cíle výstupu OpenTelemetry. Pokud jsou k dispozici nastavení připojení pro exportér protokolu OTLP (Application Přehledy i OpenTelemetry), data OpenTelemetry se odesílají do obou koncových bodů.

APPLICATIONINSIGHTS_CONNECTION_STRING: připojovací řetězec pracovního prostoru Přehledy aplikace. Pokud toto nastavení existuje, data OpenTelemetry se odesílají do tohoto pracovního prostoru. Toto nastavení je stejné jako pro připojení k Přehledy aplikace bez povolené OpenTelemetry. Pokud vaše aplikace toto nastavení ještě nemá, možná budete muset povolit integraci Přehledy aplikace.

3. Povolení OpenTelemetry v aplikaci

Pokud je hostitel Functions nakonfigurovaný tak, aby používal OpenTelemetry, měli byste také aktualizovat kód aplikace tak, aby vystavoval data OpenTelemetry. Povolení OpenTelemetry v hostiteli i kódu vaší aplikace umožňuje lepší korelaci mezi trasováním a protokoly vygenerovaným hostitelským procesem služby Functions i z pracovního procesu vašeho jazyka.

Způsob instrumentace aplikace pro použití OpenTelemetry závisí na cílovém koncovém bodu OpenTelemetry:

  1. Spuštěním těchto příkazů nainstalujte požadovaná sestavení v aplikaci:

    dotnet add package Microsoft.Azure.Functions.Worker.OpenTelemetry --version 1.0.0-preview1 
    dotnet add package OpenTelemetry.Extensions.Hosting 
    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore  
    
  2. Do souboru projektu Program.cs přidejte tento using příkaz:

    using Azure.Monitor.OpenTelemetry.AspNetCore; 
    
  3. V delegátu ConfigureServices přidejte tuto konfiguraci služby:

    services.AddOpenTelemetry()
    .UseFunctionsWorkerDefaults()
    .UseAzureMonitor();
    

    Pokud chcete exportovat oba koncové body OpenTelemetry, zavolejte obě UseAzureMonitor i UseOtlpExporter.

Optimalizace pracovních procesů Java zatím nejsou pro OpenTelemetry dostupné, takže v kódu Java není nic konfigurovat.

  1. Nainstalujte do projektu tyto balíčky npm:

    npm install @opentelemetry/api 
    npm install @opentelemetry/auto-instrumentations-node 
    npm install @azure/monitor-opentelemetry-exporter 
    npm install @azure/functions-opentelemetry-instrumentation
    
  1. Vytvořte v projektu soubor kódu, zkopírujte a vložte do tohoto nového souboru následující kód a uložte ho takto src/index.js:

    const { AzureFunctionsInstrumentation } = require('@azure/functions-opentelemetry-instrumentation');
    const { AzureMonitorLogExporter, AzureMonitorTraceExporter } = require('@azure/monitor-opentelemetry-exporter');
    const { getNodeAutoInstrumentations, getResourceDetectors } = require('@opentelemetry/auto-instrumentations-node');
    const { registerInstrumentations } = require('@opentelemetry/instrumentation');
    const { detectResourcesSync } = require('@opentelemetry/resources');
    const { LoggerProvider, SimpleLogRecordProcessor } = require('@opentelemetry/sdk-logs');
    const { NodeTracerProvider, SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-node');
    
    const resource = detectResourcesSync({ detectors: getResourceDetectors() });
    
    const tracerProvider = new NodeTracerProvider({ resource });
    tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new AzureMonitorTraceExporter()));
    tracerProvider.register();
    
    const loggerProvider = new LoggerProvider({ resource });
    loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(new AzureMonitorLogExporter()));
    
    registerInstrumentations({
        tracerProvider,
        loggerProvider,
        instrumentations: [getNodeAutoInstrumentations(), new AzureFunctionsInstrumentation()],
    });
    
  2. main Aktualizujte pole v souboru package.json tak, aby zahrnovalo tento nový src/index.js soubor, který může vypadat takto:

    "main": "src/{index.js,functions/*.js}"
    
  1. Vytvořte v projektu soubor kódu, zkopírujte a vložte do tohoto nového souboru následující kód a uložte ho takto src/index.ts:

    import { AzureFunctionsInstrumentation } from '@azure/functions-opentelemetry-instrumentation';
    import { AzureMonitorLogExporter, AzureMonitorTraceExporter } from '@azure/monitor-opentelemetry-exporter';
    import { getNodeAutoInstrumentations, getResourceDetectors } from '@opentelemetry/auto-instrumentations-node';
    import { registerInstrumentations } from '@opentelemetry/instrumentation';
    import { detectResourcesSync } from '@opentelemetry/resources';
    import { LoggerProvider, SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs';
    import { NodeTracerProvider, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';
    
    const resource = detectResourcesSync({ detectors: getResourceDetectors() });
    
    const tracerProvider = new NodeTracerProvider({ resource });
    tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new AzureMonitorTraceExporter()));
    tracerProvider.register();
    
    const loggerProvider = new LoggerProvider({ resource });
    loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(new AzureMonitorLogExporter()));
    
    registerInstrumentations({
        tracerProvider,
        loggerProvider,
        instrumentations: [getNodeAutoInstrumentations(), new AzureFunctionsInstrumentation()],
    });
    
  2. main Aktualizujte pole v souboru package.json tak, aby zahrnovalo výstup tohoto nového src/index.ts souboru, který může vypadat takto:

    "main": "dist/src/{index.js,functions/*.js}"
    

Důležité

Výstup OpenTelemetry do aplikace Přehledy z pracovního procesu jazyka se v současné době nepodporuje pro aplikace PowerShellu. Místo toho můžete chtít použít koncový bod exportéru OTLP. Pokud je váš hostitel nakonfigurovaný pro výstup OpenTelemetry do aplikace Přehledy, protokoly vygenerované pracovním procesem PowerShellu se stále přeposílají, ale distribuované trasování se v tuto chvíli nepodporuje.

Tyto pokyny platí pouze pro vývozce OTLP:

  1. Přidejte nastavení aplikace s názvem OTEL_FUNCTIONS_WORKER_ENABLED hodnota True.

  2. V kořenovém adresáři aplikace vytvořte složku na úrovni Modules aplikace a spusťte následující příkaz:

    Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
    

    Tím se požadovaný AzureFunctions.PowerShell.OpenTelemetry.SDK modul nainstaluje přímo do vaší aplikace. Tento soubor nemůžete použít requirements.psd1 k automatické instalaci této závislosti, protože spravované závislosti nejsou v současné době podporovány v plánu Flex Consumption Ve verzi Preview.

  3. Přidejte tento kód do souboru profile.ps1:

    Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop 
    Initialize-FunctionsOpenTelemetry 
    
  1. Do souboru přidejte tuto položku requirements.txt :

    azure.monitor.opentelemetry
    
  2. Přidejte tento kód do function_app.py hlavního souboru vstupního bodu:

    from azure.monitor.opentelemetry import configure_azure_monitor 
    configure_azure_monitor() 
    

Důležité informace o OpenTelemetry

Při exportu dat pomocí OpenTelemetry mějte na paměti tyto aktuální aspekty.

  • Pokud je hostitel nakonfigurovaný tak, aby používal OpenTelemetry, exportují se pouze protokoly a trasování. Metriky hostitele se momentálně neexportují.

  • Projekt aplikace teď nemůžete spustit místně pomocí nástrojů Core Tools, pokud máte v hostiteli povolenou openTelemetry. V současné době potřebujete nasadit kód do Azure, abyste ověřili aktualizace související s OpenTelemetry.

  • V tuto chvíli se s výstupy OpenTelemetry podporují jenom triggery HTTP a triggery založené na sadě Azure SDK.

Monitorování plánu Flex Consumption služby Azure Functions