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:
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
A Program.cs projektfájlban adja hozzá ezt az utasítást
using
:using Azure.Monitor.OpenTelemetry.AspNetCore;
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
ésUseOtlpExporter
.
A Java-feldolgozó optimalizálásai még nem érhetők el az OpenTelemetryhez, ezért nincs mit konfigurálni a Java-kódban.
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
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()], });
Frissítse a
main
package.json fájl mezőjét úgy, hogy az tartalmazza ezt az újsrc/index.js
fájlt, amely így nézhet ki:"main": "src/{index.js,functions/*.js}"
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()], });
Frissítse a
main
package.json fájl mezőjét úgy, hogy az tartalmazza az újsrc/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:
Adjon hozzá egy olyan alkalmazásbeállítást
OTEL_FUNCTIONS_WORKER_ENABLED
, amelynek értéke :True
.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 arequirements.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.Adja hozzá ezt a kódot a profile.ps1 fájlhoz:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Adja hozzá ezt a bejegyzést a
requirements.txt
fájlhoz:azure.monitor.opentelemetry
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.