Megosztás a következőn keresztül:


OpenTelemetria használata az Azure Functions használatával

Fontos

Az Azure Functions OpenTelemetry-támogatása jelenleg előzetes verzióban érhető el.

Ez a cikk bemutatja, hogyan konfigurálhatja a függvényalkalmazást a napló- és nyomkövetési adatok OpenTelemetria formátumban való exportálására. Az Azure Functions telemetriai adatokat hoz létre a függvényvégrehajtásokról mind a Functions-gazdagépfolyamatból, mind a nyelvspecifikus feldolgozói folyamatból, amelyben a függvénykód fut. Alapértelmezés szerint ezek a telemetriai adatok az Application Insights SDK-val lesznek elküldve az Application Insightsba. Azonban dönthet úgy, hogy openTelemetria szemantikával exportálja ezeket az adatokat. Bár továbbra is használhat OpenTelemetry-formátumot az adatok Application Insightsba való küldéséhez, ugyanezeket az adatokat exportálhatja bármely más OpenTelemetria-kompatibilis végpontra is.

Tipp.

Mivel ez a cikk a választott fejlesztési nyelvre irányul, ne felejtse el kiválasztani a megfelelő nyelvet a cikk tetején.

Jelenleg nincs ügyféloptimalizált OpenTelemetry-támogatás Java-alkalmazásokhoz.

Az OpenTelemetry jelenleg nem támogatott a C# folyamatban lévő alkalmazások esetében.

Ezeket az előnyöket az OpenTelemetria függvényalkalmazásban való engedélyezésével érheti el:

  • Korreláció a gazdagépen és az alkalmazás kódjában létrehozott nyomkövetések és naplók között.
  • Exportálható telemetriai adatok konzisztens, szabványokon alapuló generálása.
  • Integrálható más, OpenTelemetry-kompatibilis adatokat használó szolgáltatókkal.

Az OpenTelemetria a függvényalkalmazás szintjén engedélyezve van a gazdagép konfigurációjában (host.json) és a kódprojektben is. A Functions emellett ügyféloptimalizált felületet biztosít az OpenTelemetry-adatok exportálásához a nyelvspecifikus feldolgozói folyamatban futó függvénykódból.

1. OpenTelemetria engedélyezése a Functions-gazdagépen

Ha engedélyezi az OpenTelemetry kimenetet a függvényalkalmazás host.json fájljában, a gazdagép az alkalmazás által használt nyelvi veremtől függetlenül exportálja az OpenTelemetry kimenetet.

Ha engedélyezni szeretné az OpenTelemetry-kimenetet a Functions-gazdagépről, frissítse a kódprojekt host.json fájlját , hogy hozzáadjon egy "telemetryMode": "openTelemetry" elemet a gyökérgyűjteményhez. Ha az OpenTelemetry engedélyezve van, a host.json fájl a következőképpen nézhet ki:

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

2. Alkalmazásbeállítások konfigurálása

Ha az OpenTelemetria engedélyezve van a host.json fájlban, a rendszer meghatározza azokat a végpontokat, amelyekre az adatokat küldi a rendszer, amelyek alapján az OpenTelemetria által támogatott alkalmazásbeállítások elérhetők az alkalmazás környezeti változóiban.

Hozzon létre konkrét alkalmazásbeállításokat a függvényalkalmazásban az OpenTelemetry kimeneti célhelyének megfelelően. Ha az Application Insights és az OpenTelemetry protocol (OTLP) exportőre is megadja a kapcsolati beállításokat, az OpenTelemetry-adatokat a rendszer mindkét végpontra elküldi.

APPLICATIONINSIGHTS_CONNECTION_STRING: egy Application Insights-munkaterület kapcsolati sztring. Ha ez a beállítás létezik, a rendszer OpenTelemetry-adatokat küld az adott munkaterületre. Ez a beállítás ugyanaz, mint az Application Insightshoz való csatlakozáshoz az OpenTelemetry engedélyezése nélkül. Ha az alkalmazás még nem rendelkezik ezzel a beállítással, lehetséges, hogy engedélyeznie kell az Application Insights integrációját.

3. OpenTelemetria engedélyezése az alkalmazásban

Az OpenTelemetria használatára konfigurált Functions-gazdagéppel az alkalmazás kódját is frissítenie kell az OpenTelemetria-adatok kimenetére. Az OpenTelemetria engedélyezése mind a gazdagépen, mind az alkalmazáskódban jobb korrelációt tesz lehetővé a Functions gazdagépfolyamat és a nyelvi feldolgozó folyamat által kibocsátott nyomkövetések és naplók között.

Az alkalmazás OpenTelemetry használatára való eszközkezelésének módja a cél OpenTelemetry-végponttól függ:

  1. Futtassa az alábbi parancsokat a szükséges szerelvények telepítéséhez az alkalmazásban:

    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. A Program.cs projektfájlban adja hozzá ezt az utasítást using :

    using Azure.Monitor.OpenTelemetry.AspNetCore; 
    
  3. A meghatalmazottban adja hozzá ezt a ConfigureServices szolgáltatáskonfigurációt:

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

    Ha mindkét OpenTelemetry-végpontra szeretne exportálni, hívja meg mindkettőt UseAzureMonitor és UseOtlpExporter.

A Java-feldolgozó optimalizálásai még nem érhetők el az OpenTelemetryhez, ezért nincs mit konfigurálni a Java-kódban.

  1. Telepítse ezeket az npm-csomagokat a projektben:

    npm install @opentelemetry/api 
    npm install @opentelemetry/auto-instrumentations-node 
    npm install @azure/monitor-opentelemetry-exporter 
    npm install @azure/functions-opentelemetry-instrumentation
    
  1. Hozzon létre egy kódfájlt a projektben, másolja és illessze be az alábbi kódot az új fájlba, és mentse a fájlt a következőként 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. Frissítse a main package.json fájl mezőjét úgy, hogy az tartalmazza ezt az új src/index.js fájlt, amely így nézhet ki:

    "main": "src/{index.js,functions/*.js}"
    
  1. Hozzon létre egy kódfájlt a projektben, másolja és illessze be az alábbi kódot az új fájlba, és mentse a fájlt a következőként 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. Frissítse a main package.json fájl mezőjét úgy, hogy az tartalmazza az új src/index.ts fájl kimenetét, amely így nézhet ki:

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

Fontos

A PowerShell-alkalmazások jelenleg nem támogatják az Application Insights openTelemetry kimenetét a nyelvi feldolgozótól. Érdemes lehet inkább OTLP-exportőri végpontot használnia. Ha a gazdagép OpenTelemetry-kimenethez van konfigurálva az Application Insightshoz, a PowerShell-feldolgozó folyamat által létrehozott naplók továbbra is továbbítva lesznek, de az elosztott nyomkövetés jelenleg nem támogatott.

Ezek az utasítások csak egy OTLP-exportőrre vonatkoznak:

  1. Adjon hozzá egy olyan alkalmazásbeállítást OTEL_FUNCTIONS_WORKER_ENABLED , amelynek értéke : True.

  2. Hozzon létre egy alkalmazásszintű Modules mappát az alkalmazás gyökerében, és futtassa a következő parancsot:

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

    Ez közvetlenül az alkalmazásban telepíti a szükséges AzureFunctions.PowerShell.OpenTelemetry.SDK modult. A fájllal nem telepítheti automatikusan ezt a requirements.psd1 függőséget, mert a Felügyelt függőségek jelenleg nem támogatottak a Flex Consumption csomag előzetes verziójában.

  3. Adja hozzá ezt a kódot a profile.ps1 fájlhoz:

    Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop 
    Initialize-FunctionsOpenTelemetry 
    
  1. Adja hozzá ezt a bejegyzést a requirements.txt fájlhoz:

    azure.monitor.opentelemetry
    
  2. Adja hozzá ezt a kódot a fő belépési pont fájljához function_app.py :

    from azure.monitor.opentelemetry import configure_azure_monitor 
    configure_azure_monitor() 
    

Az OpenTelemetria szempontjai

Amikor OpenTelemetria használatával exportálja az adatokat, tartsa szem előtt ezeket az aktuális szempontokat.

  • Ha a gazdagép OpenTelemetria használatára van konfigurálva, csak a naplók és nyomkövetések lesznek exportálva. A gazdagépmetrikák jelenleg nincsenek exportálva.

  • Jelenleg nem futtathatja helyileg az alkalmazásprojektet a Core Tools használatával, ha engedélyezve van az OpenTelemetry a gazdagépen. Az OpenTelemetryvel kapcsolatos frissítések érvényesítéséhez jelenleg telepítenie kell a kódot az Azure-ban.

  • Jelenleg csak a HTTP-eseményindítók és az Azure SDK-alapú triggerek támogatottak OpenTelemetry-kimenetekkel.

Az Azure FunctionsFlex használati csomag figyelése