Použití OpenTelemetry se službou Azure Functions
Důležité
Podpora OpenTelemetry pro Azure Functions je aktuálně ve verzi Preview a vaše aplikace musí být hostovaná v plánu Flex Consumption, aby používala OpenTelemetry.
V tomto článku se dozvíte, jak nakonfigurovat aplikaci funkcí pro export dat protokolu a trasování ve formátu OpenTelemetry. Azure Functions generuje telemetrická data na spouštění funkcí z hostitelského procesu Functions i pracovního procesu specifického pro jazyk, ve kterém běží kód funkce. Ve výchozím nastavení se tato telemetrická data odesílají do aplikace Přehledy pomocí sady Application Přehledy SDK. Tato data ale můžete exportovat pomocí sémantiky OpenTelemetry. I když stále můžete k odesílání dat do aplikace Přehledy použít formát OpenTelemetry, můžete teď také exportovat stejná data do libovolného jiného koncového bodu kompatibilního s OpenTelemetry.
Tip
Vzhledem k tomu, že se tento článek zaměřuje na zvolený vývojový jazyk, nezapomeňte zvolit správný jazyk v horní části článku.
V současné době pro aplikace v Javě není žádná podpora OpenTelemetry optimalizovaná pro klienty.
OpenTelemetry se v současné době nepodporuje pro procesní aplikace jazyka C#.
Tyto výhody můžete získat povolením OpenTelemetry ve vaší aplikaci funkcí:
- Korelace mezi trasováními a protokoly generovanými v hostiteli i v kódu vaší aplikace.
- Konzistentní generování exportovatelných telemetrických dat založených na standardech
- Integruje se s jinými poskytovateli, kteří můžou využívat data kompatibilní s OpenTeleletry.
OpenTelemetry je povolená na úrovni aplikace funkcí v konfiguraci hostitele (host.json
) i v projektu kódu. Funkce také poskytují prostředí optimalizované pro klienta pro export dat OpenTelemetry z kódu funkce, který běží v pracovním procesu specifickém pro jazyk.
1. Povolení OpenTelemetry v hostiteli Functions
Když v souboru host.json aplikace funkcí povolíte výstup OpenTelemetry, exportuje hostitel výstup OpenTelemetry bez ohledu na zásobník jazyka používaný vaší aplikací.
Pokud chcete povolit výstup OpenTelemetry z hostitele Functions, aktualizujte soubor host.json v projektu kódu a přidejte "telemetryMode": "openTelemetry"
do kořenové kolekce prvek. Když je povolený OpenTelemetry, může váš soubor host.json vypadat takto:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
},
"telemetryMode": "openTelemetry"
}
2. Konfigurace nastavení aplikace
Pokud je v souboru host.json povolená funkce OpenTelemetry, určí se koncové body, do kterých se odesílají data, na základě kterých jsou v proměnných prostředí vaší aplikace k dispozici nastavení aplikace s podporou OpenTelemetry.
Vytvořte v aplikaci funkcí konkrétní nastavení aplikace na základě cíle výstupu OpenTelemetry. Pokud jsou k dispozici nastavení připojení pro exportér protokolu OTLP (Application Přehledy i OpenTelemetry), data OpenTelemetry se odesílají do obou koncových bodů.
APPLICATIONINSIGHTS_CONNECTION_STRING
: připojovací řetězec pracovního prostoru Přehledy aplikace. Pokud toto nastavení existuje, data OpenTelemetry se odesílají do tohoto pracovního prostoru. Toto nastavení je stejné jako pro připojení k Přehledy aplikace bez povolené OpenTelemetry. Pokud vaše aplikace toto nastavení ještě nemá, možná budete muset povolit integraci Přehledy aplikace.
3. Povolení OpenTelemetry v aplikaci
Pokud je hostitel Functions nakonfigurovaný tak, aby používal OpenTelemetry, měli byste také aktualizovat kód aplikace tak, aby vystavoval data OpenTelemetry. Povolení OpenTelemetry v hostiteli i kódu vaší aplikace umožňuje lepší korelaci mezi trasováním a protokoly vygenerovaným hostitelským procesem služby Functions i z pracovního procesu vašeho jazyka.
Způsob instrumentace aplikace pro použití OpenTelemetry závisí na cílovém koncovém bodu OpenTelemetry:
Spuštěním těchto příkazů nainstalujte požadovaná sestavení v aplikaci:
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
Do souboru projektu Program.cs přidejte tento
using
příkaz:using Azure.Monitor.OpenTelemetry.AspNetCore;
V delegátu
ConfigureServices
přidejte tuto konfiguraci služby:services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitor();
Pokud chcete exportovat oba koncové body OpenTelemetry, zavolejte obě
UseAzureMonitor
iUseOtlpExporter
.
Optimalizace pracovních procesů Java zatím nejsou pro OpenTelemetry dostupné, takže v kódu Java není nic konfigurovat.
Nainstalujte do projektu tyto balíčky npm:
npm install @opentelemetry/api npm install @opentelemetry/auto-instrumentations-node npm install @azure/monitor-opentelemetry-exporter npm install @azure/functions-opentelemetry-instrumentation
Vytvořte v projektu soubor kódu, zkopírujte a vložte do tohoto nového souboru následující kód a uložte ho takto
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()], });
main
Aktualizujte pole v souboru package.json tak, aby zahrnovalo tento novýsrc/index.js
soubor, který může vypadat takto:"main": "src/{index.js,functions/*.js}"
Vytvořte v projektu soubor kódu, zkopírujte a vložte do tohoto nového souboru následující kód a uložte ho takto
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()], });
main
Aktualizujte pole v souboru package.json tak, aby zahrnovalo výstup tohoto novéhosrc/index.ts
souboru, který může vypadat takto:"main": "dist/src/{index.js,functions/*.js}"
Důležité
Výstup OpenTelemetry do aplikace Přehledy z pracovního procesu jazyka se v současné době nepodporuje pro aplikace PowerShellu. Místo toho můžete chtít použít koncový bod exportéru OTLP. Pokud je váš hostitel nakonfigurovaný pro výstup OpenTelemetry do aplikace Přehledy, protokoly vygenerované pracovním procesem PowerShellu se stále přeposílají, ale distribuované trasování se v tuto chvíli nepodporuje.
Tyto pokyny platí pouze pro vývozce OTLP:
Přidejte nastavení aplikace s názvem
OTEL_FUNCTIONS_WORKER_ENABLED
hodnotaTrue
.V kořenovém adresáři aplikace vytvořte složku na úrovni
Modules
aplikace a spusťte následující příkaz:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
Tím se požadovaný
AzureFunctions.PowerShell.OpenTelemetry.SDK
modul nainstaluje přímo do vaší aplikace. Tento soubor nemůžete použítrequirements.psd1
k automatické instalaci této závislosti, protože spravované závislosti nejsou v současné době podporovány v plánu Flex Consumption Ve verzi Preview.Přidejte tento kód do souboru profile.ps1:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Do souboru přidejte tuto položku
requirements.txt
:azure.monitor.opentelemetry
Přidejte tento kód do
function_app.py
hlavního souboru vstupního bodu:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()
Důležité informace o OpenTelemetry
Při exportu dat pomocí OpenTelemetry mějte na paměti tyto aktuální aspekty.
Pokud je hostitel nakonfigurovaný tak, aby používal OpenTelemetry, exportují se pouze protokoly a trasování. Metriky hostitele se momentálně neexportují.
Projekt aplikace teď nemůžete spustit místně pomocí nástrojů Core Tools, pokud máte v hostiteli povolenou openTelemetry. V současné době potřebujete nasadit kód do Azure, abyste ověřili aktualizace související s OpenTelemetry.
V tuto chvíli se s výstupy OpenTelemetry podporují jenom triggery HTTP a triggery založené na sadě Azure SDK.