Använda OpenTelemetry med Azure Functions
Viktigt!
OpenTelemetry-stöd för Azure Functions är för närvarande i förhandsversion och din app måste finnas i en Flex Consumption-plan för att använda OpenTelemetry.
Den här artikeln visar hur du konfigurerar funktionsappen för att exportera logg- och spårningsdata i ett OpenTelemetry-format. Azure Functions genererar telemetridata om dina funktionskörningar från både Functions-värdprocessen och den språkspecifika arbetsprocess där funktionskoden körs. Som standard skickas dessa telemetridata till Application Insights med hjälp av Application Insights SDK. Du kan dock välja att exportera dessa data med hjälp av OpenTelemetry-semantik. Du kan fortfarande använda ett OpenTelemetry-format för att skicka dina data till Application Insights, men du kan nu även exportera samma data till andra OpenTelemetry-kompatibla slutpunkter.
Dricks
Eftersom den här artikeln riktar sig till valfritt utvecklingsspråk bör du komma ihåg att välja rätt språk överst i artikeln.
För närvarande finns det inget klientoptimerad OpenTelemetry-stöd för Java-appar.
OpenTelemetry stöds för närvarande inte för processbaserade C#-appar.
Du kan få dessa fördelar genom att aktivera OpenTelemetry i funktionsappen:
- Korrelation mellan spårningar och loggar som genereras både på värden och i programkoden.
- Konsekvent, standardbaserad generering av exportbara telemetridata.
- Integrerar med andra leverantörer som kan använda OpenTeleletry-kompatibla data.
OpenTelemetry är aktiverat på funktionsappsnivå, både i värdkonfigurationen (host.json
) och i kodprojektet. Functions ger också en klientoptimerad upplevelse för att exportera OpenTelemetry-data från din funktionskod som körs i en språkspecifik arbetsprocess.
1. Aktivera OpenTelemetry i Functions-värden
När du aktiverar OpenTelemetry-utdata i funktionsappens host.json fil exporterar värden OpenTelemetry-utdata oavsett vilken språkstack som används av din app.
Om du vill aktivera OpenTelemetry-utdata från Functions-värden uppdaterar du filen host.json i kodprojektet för att lägga till ett "telemetryMode": "openTelemetry"
element i rotsamlingen. Med OpenTelemetry aktiverat kan din host.json-fil se ut så här:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
},
"telemetryMode": "openTelemetry"
}
2. Konfigurera programinställningar
När OpenTelemetry är aktiverat i filen host.json bestäms slutpunkterna som data skickas till baserat på vilka Programinställningar som stöds av OpenTelemetry i appens miljövariabler.
Skapa specifika programinställningar i funktionsappen baserat på utdatamålet OpenTelemetry. När anslutningsinställningar anges för både Application Insights och en exportör av OpenTelemetry Protocol (OTLP) skickas OpenTelemetry-data till båda slutpunkterna.
APPLICATIONINSIGHTS_CONNECTION_STRING
: anslutningssträng för en Application Insights-arbetsyta. När den här inställningen finns skickas OpenTelemetry-data till den arbetsytan. Den här inställningen är samma som används för att ansluta till Application Insights utan OpenTelemetry aktiverat. Om din app inte redan har den här inställningen kan du behöva aktivera Application Insights-integrering.
3. Aktivera OpenTelemetry i din app
Med Functions-värden konfigurerad för att använda OpenTelemetry bör du även uppdatera programkoden för att mata ut OpenTelemetry-data. Genom att aktivera OpenTelemetry i både värden och programkoden kan du bättre korrelation mellan spårningar och loggar som genereras både av Functions-värdprocessen och från språkarbetareprocessen.
Hur du instrumentera ditt program för att använda OpenTelemetry beror på målslutpunkten för OpenTelemetry:
Kör dessa kommandon för att installera de nödvändiga sammansättningarna i din app:
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
Lägg till den här
using
instruktionen i din Program.cs projektfil:using Azure.Monitor.OpenTelemetry.AspNetCore;
Lägg till den här tjänstkonfigurationen i ombudet
ConfigureServices
:services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitor();
Om du vill exportera till båda OpenTelemetry-slutpunkterna anropar du både
UseAzureMonitor
ochUseOtlpExporter
.
Java Worker-optimeringar är ännu inte tillgängliga för OpenTelemetry, så det finns inget att konfigurera i Java-koden.
Installera dessa npm-paket i projektet:
npm install @opentelemetry/api npm install @opentelemetry/auto-instrumentations-node npm install @azure/monitor-opentelemetry-exporter npm install @azure/functions-opentelemetry-instrumentation
Skapa en kodfil i projektet, kopiera och klistra in följande kod i den nya filen och spara filen som
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()], });
Uppdatera fältet
main
i din package.json-fil så att den innehåller den här nyasrc/index.js
filen, vilket kan se ut så här:"main": "src/{index.js,functions/*.js}"
Skapa en kodfil i projektet, kopiera och klistra in följande kod i den nya filen och spara filen som
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()], });
Uppdatera fältet
main
i package.json-filen så att det innehåller utdata från den nyasrc/index.ts
filen, vilket kan se ut så här:"main": "dist/src/{index.js,functions/*.js}"
Viktigt!
OpenTelemetry-utdata till Application Insights från språkarbetaren stöds för närvarande inte för PowerShell-appar. Du kanske i stället vill använda en SLUTpunkt för OTLP-exportören. När värden har konfigurerats för OpenTelemetry-utdata till Application Insights vidarebefordras loggarna som genereras av PowerShell-arbetsprocessen fortfarande, men distribuerad spårning stöds inte just nu.
Dessa instruktioner gäller endast för en OTLP-exportör:
Lägg till en programinställning med namnet
OTEL_FUNCTIONS_WORKER_ENABLED
med värdetTrue
.Skapa en mapp på appnivå
Modules
i appens rot och kör följande kommando:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
Detta installerar den nödvändiga
AzureFunctions.PowerShell.OpenTelemetry.SDK
modulen direkt i din app. Du kan inte användarequirements.psd1
filen för att installera det här beroendet automatiskt eftersom hanterade beroenden för närvarande inte stöds i förhandsversionen av Flex Consumption-planen .Lägg till den här koden i filen profile.ps1:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Lägg till den här posten i
requirements.txt
filen:azure.monitor.opentelemetry
Lägg till den här koden i huvudinmatningspunktens
function_app.py
fil:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()
Överväganden för OpenTelemetry
När du exporterar dina data med OpenTelemetry bör du tänka på dessa aktuella överväganden.
När värden har konfigurerats för att använda OpenTelemetry exporteras endast loggar och spårningar. Värdmått exporteras för närvarande inte.
Du kan för närvarande inte köra ditt appprojekt lokalt med Core Tools när du har OpenTelemetry aktiverat på värden. För närvarande måste du distribuera koden till Azure för att verifiera dina OpenTelemetry-relaterade uppdateringar.
För närvarande stöds endast HTTP-utlösare och Azure SDK-baserade utlösare med OpenTelemetry-utdata.