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:
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
Voeg in het Program.cs projectbestand deze
using
instructie toe:using Azure.Monitor.OpenTelemetry.AspNetCore;
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 enUseOtlpExporter
.
Optimalisaties voor Java-werkrollen zijn nog niet beschikbaar voor OpenTelemetry, dus er is niets te configureren in uw Java-code.
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
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()], });
Werk het veld in het
main
package.json-bestand bij om dit nieuwesrc/index.js
bestand op te nemen. Dit kan er als volgt uitzien:"main": "src/{index.js,functions/*.js}"
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()], });
Werk het veld in het
main
package.json-bestand bij om de uitvoer van dit nieuwesrc/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:
Voeg een toepassingsinstelling toe met de
OTEL_FUNCTIONS_WORKER_ENABLED
naam met de waarde vanTrue
.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 hetrequirements.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 .Voeg deze code toe aan uw profiel.ps1-bestand:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Voeg deze vermelding toe aan uw
requirements.txt
bestand:azure.monitor.opentelemetry
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.