Share via


OpenTelemetry gebruiken met Azure Functions

Belangrijk

Ondersteuning voor OpenTelemetry voor Azure Functions is momenteel in preview en uw app moet worden gehost in een Flex Consumption-abonnement om OpenTelemetry te kunnen gebruiken.

In dit artikel leest u hoe u uw functie-app configureert voor het exporteren van logboek- en traceringsgegevens in een OpenTelemetry-indeling. Azure Functions genereert telemetriegegevens over de uitvoering van uw functie vanuit zowel het Functions-hostproces als het taalspecifieke werkproces waarin uw functiecode wordt uitgevoerd. Deze telemetriegegevens worden standaard verzonden naar Application Insights met behulp van de Application Insights SDK. U kunt er echter voor kiezen om deze gegevens te exporteren met behulp van semantiek van OpenTelemetry. Hoewel u nog steeds een OpenTelemetry-indeling kunt gebruiken om uw gegevens naar Application Insights te verzenden, kunt u nu ook dezelfde gegevens exporteren naar elk ander openTelemetry-compatibel eindpunt.

Tip

Omdat dit artikel is gericht op uw ontwikkeltaal van keuze, moet u de juiste taal bovenaan het artikel kiezen.

Momenteel is er geen client geoptimaliseerde OpenTelemetry-ondersteuning voor Java-apps.

OpenTelemetry wordt momenteel niet ondersteund voor in-process C#-apps.

U kunt deze voordelen verkrijgen door OpenTelemetry in te schakelen in uw functie-app:

  • Correlatie tussen traceringen en logboeken die zowel op de host als in uw toepassingscode worden gegenereerd.
  • Consistente, op standaarden gebaseerde generatie van exportbare telemetriegegevens.
  • Integreert met andere providers die openTeleletry-compatibele gegevens kunnen gebruiken.

OpenTelemetry is ingeschakeld op het niveau van de functie-app, zowel in de hostconfiguratie (host.json) als in uw codeproject. Functions biedt ook een door de client geoptimaliseerde ervaring voor het exporteren van OpenTelemetry-gegevens uit uw functiecode die wordt uitgevoerd in een taalspecifiek werkproces.

1. OpenTelemetry inschakelen in de Functions-host

Wanneer u OpenTelemetry-uitvoer inschakelt in het host.json-bestand van de functie-app, exporteert de host OpenTelemetry-uitvoer, ongeacht de taalstack die door uw app wordt gebruikt.

Als u OpenTelemetry-uitvoer van de Functions-host wilt inschakelen, werkt u het host.json-bestand in uw codeproject bij om een "telemetryMode": "openTelemetry" element toe te voegen aan de hoofdverzameling. Als OpenTelemetry is ingeschakeld, ziet uw host.json bestand er als volgt uit:

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

2. Toepassingsinstellingen configureren

Wanneer OpenTelemetry is ingeschakeld in het host.json bestand, worden de eindpunten waarnaar gegevens worden verzonden bepaald op basis van welke openTelemetry-ondersteunde toepassingsinstellingen beschikbaar zijn in de omgevingsvariabelen van uw app.

Maak specifieke toepassingsinstellingen in uw functie-app op basis van de doeluitvoer van OpenTelemetry. Wanneer verbindingsinstellingen worden opgegeven voor zowel Application Insights als een OTLP-exporteur (OpenTelemetry Protocol), worden OpenTelemetry-gegevens naar beide eindpunten verzonden.

APPLICATIONINSIGHTS_CONNECTION_STRING: het verbindingsreeks voor een Application Insights-werkruimte. Wanneer deze instelling bestaat, worden OpenTelemetry-gegevens naar die werkruimte verzonden. Deze instelling is dezelfde die wordt gebruikt om verbinding te maken met Application Insights zonder OpenTelemetry ingeschakeld. Als uw app deze instelling nog niet heeft, moet u mogelijk Application Insights-integratie inschakelen.

3. OpenTelemetry inschakelen in uw app

Als de Functions-host is geconfigureerd voor het gebruik van OpenTelemetry, moet u ook uw toepassingscode bijwerken om OpenTelemetry-gegevens uit te voeren. Als u OpenTelemetry inschakelt in zowel de host als uw toepassingscode, kunt u beter correlatie tussen traceringen en logboeken die worden verzonden door het Functions-hostproces en vanuit uw taalwerkproces.

De manier waarop u uw toepassing instrumenteren voor het gebruik van OpenTelemetry, is afhankelijk van uw doeleindpunt voor OpenTelemetry:

  1. Voer deze opdrachten uit om de vereiste assembly's in uw app te installeren:

    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. Voeg in het Program.cs projectbestand deze using instructie toe:

    using Azure.Monitor.OpenTelemetry.AspNetCore; 
    
  3. Voeg in de ConfigureServices gemachtigde deze serviceconfiguratie toe:

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

    Als u wilt exporteren naar beide OpenTelemetry-eindpunten, roept u beide UseAzureMonitor aan en UseOtlpExporter.

Optimalisaties voor Java-werkrollen zijn nog niet beschikbaar voor OpenTelemetry, dus er is niets te configureren in uw Java-code.

  1. Installeer deze NPM-pakketten in uw project:

    npm install @opentelemetry/api 
    npm install @opentelemetry/auto-instrumentations-node 
    npm install @azure/monitor-opentelemetry-exporter 
    npm install @azure/functions-opentelemetry-instrumentation
    
  1. Maak een codebestand in uw project, kopieer en plak de volgende code in dit nieuwe bestand en sla het bestand op als 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. Werk het veld in het main package.json-bestand bij om dit nieuwe src/index.js bestand op te nemen. Dit kan er als volgt uitzien:

    "main": "src/{index.js,functions/*.js}"
    
  1. Maak een codebestand in uw project, kopieer en plak de volgende code in dit nieuwe bestand en sla het bestand op als 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. Werk het veld in het main package.json-bestand bij om de uitvoer van dit nieuwe src/index.ts bestand op te nemen. Dit kan er als volgt uitzien:

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

Belangrijk

OpenTelemetry-uitvoer naar Application Insights van de taalwerker wordt momenteel niet ondersteund voor PowerShell-apps. U kunt in plaats daarvan een OTLP-exporteur-eindpunt gebruiken. Wanneer uw host is geconfigureerd voor OpenTelemetry-uitvoer naar Application Insights, worden de logboeken die door het PowerShell-werkproces worden gegenereerd, nog steeds doorgestuurd, maar gedistribueerde tracering wordt op dit moment niet ondersteund.

Deze instructies zijn alleen van toepassing op een OTLP-exporteur:

  1. Voeg een toepassingsinstelling toe met de OTEL_FUNCTIONS_WORKER_ENABLED naam met de waarde van True.

  2. Maak een map op app-niveau Modules in de hoofdmap van uw app en voer de volgende opdracht uit:

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

    Hiermee wordt de vereiste AzureFunctions.PowerShell.OpenTelemetry.SDK module rechtstreeks in uw app geïnstalleerd. U kunt het requirements.psd1 bestand niet gebruiken om deze afhankelijkheid automatisch te installeren, omdat beheerde afhankelijkheden momenteel niet worden ondersteund in de preview van het Flex Consumption-abonnement .

  3. Voeg deze code toe aan uw profiel.ps1-bestand:

    Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop 
    Initialize-FunctionsOpenTelemetry 
    
  1. Voeg deze vermelding toe aan uw requirements.txt bestand:

    azure.monitor.opentelemetry
    
  2. Voeg deze code toe aan het function_app.py hoofdinvoerpuntbestand:

    from azure.monitor.opentelemetry import configure_azure_monitor 
    configure_azure_monitor() 
    

Overwegingen voor OpenTelemetry

Wanneer u uw gegevens exporteert met Behulp van OpenTelemetry, moet u rekening houden met deze huidige overwegingen.

  • Wanneer de host is geconfigureerd voor het gebruik van OpenTelemetry, worden alleen logboeken en traceringen geëxporteerd. Metrische hostgegevens worden momenteel niet geëxporteerd.

  • U kunt uw app-project momenteel niet lokaal uitvoeren met Behulp van Core Tools wanneer OpenTelemetry is ingeschakeld op de host. U moet uw code momenteel implementeren in Azure om uw OpenTelemetry-gerelateerde updates te valideren.

  • Op dit moment worden alleen HTTP-triggers en op Azure SDK gebaseerde triggers ondersteund met OpenTelemetry-uitvoer.

Azure FunctionsFlex Consumption-abonnement bewaken