Azure İşlevleri ile OpenTelemetry kullanma
Önemli
Azure İşlevleri için OpenTelemetry desteği şu anda önizleme aşamasındadır ve OpenTelemetry'yi kullanmak için uygulamanızın bir Flex Tüketim planında barındırılması gerekir.
Bu makalede, işlev uygulamanızı günlük ve izleme verilerini OpenTelemetry biçiminde dışarı aktaracak şekilde yapılandırma işlemi gösterilmektedir. Azure İşlevleri hem İşlevler konak işleminden hem de işlev kodunuzun çalıştırıldığı dile özgü çalışan işleminden işlev yürütmelerinizle ilgili telemetri verileri oluşturur. Varsayılan olarak, bu telemetri verileri Application Analizler SDK'sı kullanılarak Application Analizler'a gönderilir. Ancak, OpenTelemetry semantiği kullanarak bu verileri dışarı aktarmayı seçebilirsiniz. Verilerinizi Application Analizler'e göndermek için openTelemetry biçimini kullanmaya devam edebilirsiniz ancak artık aynı verileri diğer OpenTelemetry uyumlu uç noktalara da aktarabilirsiniz.
İpucu
Bu makale seçtiğiniz geliştirme dilini hedeflediğinden, makalenin en üstünde doğru dili seçmeyi unutmayın.
Şu anda Java uygulamaları için istemci için iyileştirilmiş OpenTelemetry desteği yoktur.
OpenTelemetry şu anda C# işlem içi uygulamaları için desteklenmiyor.
İşlev uygulamanızda OpenTelemetry'yi etkinleştirerek bu avantajları elde edebilirsiniz:
- Hem konakta hem de uygulama kodunuzda oluşturulan izlemeler ve günlükler arasında bağıntı.
- Dışarı aktarılabilir telemetri verilerinin tutarlı, standartlara dayalı oluşturulması.
- OpenTeletry uyumlu verileri kullanabilen diğer sağlayıcılarla tümleşir.
OpenTelemetry, hem konak yapılandırmasında (host.json
) hem de kod projenizde işlev uygulaması düzeyinde etkinleştirilir. İşlevler ayrıca dile özgü bir çalışan işleminde çalışan işlev kodunuzdan OpenTelemetry verilerini dışarı aktarmak için istemci için iyileştirilmiş bir deneyim sağlar.
1. İşlevler ana bilgisayarında OpenTelemetry'yi etkinleştirin
İşlev uygulamasının host.json dosyasında OpenTelemetry çıkışını etkinleştirdiğinizde, uygulamanız tarafından kullanılan dil yığınından bağımsız olarak ana bilgisayarınız OpenTelemetry çıkışını dışarı aktarır.
İşlevler konağından OpenTelemetry çıkışını etkinleştirmek için kod projenizdeki host.json dosyasını güncelleştirerek kök koleksiyona bir "telemetryMode": "openTelemetry"
öğe ekleyin. OpenTelemetry etkinleştirildiğinde, host.json dosyanız aşağıdaki gibi görünebilir:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
},
"telemetryMode": "openTelemetry"
}
2. Uygulama ayarlarını yapılandırma
host.json dosyasında OpenTelemetry etkinleştirildiğinde, verilerin gönderildiği uç noktalar, uygulamanızın ortam değişkenlerinde hangi OpenTelemetry tarafından desteklenen uygulama ayarlarının kullanılabildiği temelinde belirlenir.
İşlev uygulamanızda OpenTelemetry çıkış hedefine göre belirli uygulama ayarları oluşturun. Hem Uygulama Analizler hem de OpenTelemetry protokolü (OTLP) verme işlemi için bağlantı ayarları sağlandığında, OpenTelemetry verileri her iki uç noktaya da gönderilir.
APPLICATIONINSIGHTS_CONNECTION_STRING
: Bir Uygulama Analizler çalışma alanının bağlantı dizesi. Bu ayar mevcut olduğunda, OpenTelemetry verileri bu çalışma alanına gönderilir. Bu ayar, OpenTelemetry etkinleştirilmeden Application Analizler'a bağlanmak için kullanılan ayardır. Uygulamanızda bu ayar yoksa, Uygulama Analizler tümleştirmesini etkinleştirmeniz gerekebilir.
3. Uygulamanızda OpenTelemetry'yi etkinleştirin
İşlevler ana bilgisayarı OpenTelemetry kullanacak şekilde yapılandırıldığında, uygulama kodunuzu OpenTelemetry verilerinin çıktısını almak için de güncelleştirmeniz gerekir. Hem konakta hem de uygulama kodunuzda OpenTelemetry'nin etkinleştirilmesi, hem İşlevler konak işlemi tarafından hem de dil çalışanı işleminizden yayılan izlemeler ve günlükler arasında daha iyi bağıntı sağlar.
Uygulamanızı OpenTelemetry'yi kullanmak için izleme şekliniz, hedef OpenTelemetry uç noktanıza bağlıdır:
Uygulamanıza gerekli derlemeleri yüklemek için şu komutları çalıştırın:
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
Program.cs proje dosyanıza şu
using
deyimi ekleyin:using Azure.Monitor.OpenTelemetry.AspNetCore;
Temsilciye
ConfigureServices
şu hizmet yapılandırmasını ekleyin:services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitor();
Her iki OpenTelemetry uç noktasına da aktarmak için hem hem
UseOtlpExporter
deUseAzureMonitor
öğesini çağırın.
OpenTelemetry için Java çalışan iyileştirmeleri henüz kullanılamadığından Java kodunuzda yapılandıracak bir şey yoktur.
Projenize şu npm paketlerini yükleyin:
npm install @opentelemetry/api npm install @opentelemetry/auto-instrumentations-node npm install @azure/monitor-opentelemetry-exporter npm install @azure/functions-opentelemetry-instrumentation
Projenizde bir kod dosyası oluşturun, aşağıdaki kodu kopyalayıp bu yeni dosyaya yapıştırın ve dosyayı olarak
src/index.js
kaydedin: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
package.json dosyanızdaki alanı şu şekilde görünebilecek yenisrc/index.js
dosyayı içerecek şekilde güncelleştirin:"main": "src/{index.js,functions/*.js}"
Projenizde bir kod dosyası oluşturun, aşağıdaki kodu kopyalayıp bu yeni dosyaya yapıştırın ve dosyayı olarak
src/index.ts
kaydedin: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
package.json dosyanızdaki alanı, bu yenisrc/index.ts
dosyanın çıktısını içerecek şekilde güncelleştirin; bu aşağıdaki gibi görünebilir:"main": "dist/src/{index.js,functions/*.js}"
Önemli
Dil çalışanından Uygulama Analizler için OpenTelemetry çıkışı şu anda PowerShell uygulamaları için desteklenmemaktadır. Bunun yerine bir OTLP verme uç noktası kullanmak isteyebilirsiniz. Ana bilgisayarınız Uygulama Analizler'a OpenTelemetry çıkışı için yapılandırıldığında, PowerShell çalışan işlemi tarafından oluşturulan günlükler yine de iletilir, ancak dağıtılmış izleme şu anda desteklenmez.
Bu yönergeler yalnızca OTLP ihracatçısı için geçerlidir:
değerine
True
sahip adlıOTEL_FUNCTIONS_WORKER_ENABLED
bir uygulama ayarı ekleyin.Uygulamanızın kökünde uygulama düzeyinde
Modules
bir klasör oluşturun ve aşağıdaki komutu çalıştırın:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
Bu, gerekli
AzureFunctions.PowerShell.OpenTelemetry.SDK
modülü doğrudan uygulamanıza yükler. Yönetilen bağımlılıklar şu anda Esnek Tüketim planı önizlemesinde desteklenmediğinden, dosyayı bu bağımlılığı otomatik olarak yüklemek için kullanamazsınızrequirements.psd1
.Bu kodu profile.ps1 dosyanıza ekleyin:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Bu girdiyi dosyanıza
requirements.txt
ekleyin:azure.monitor.opentelemetry
Bu kodu ana giriş noktası dosyanıza
function_app.py
ekleyin:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()
OpenTelemetry ile ilgili dikkat edilmesi gerekenler
OpenTelemetry kullanarak verilerinizi dışarı aktardığınızda, bu geçerli konuları göz önünde bulundurun.
Konak OpenTelemetry kullanacak şekilde yapılandırıldığında, yalnızca günlükler ve izlemeler dışarı aktarılır. Konak ölçümleri şu anda dışarı aktarılamıyor.
Konakta OpenTelemetry etkinleştirildiğinde, şu anda Çekirdek Araçları'nı kullanarak uygulama projenizi yerel olarak çalıştıramazsınız. OpenTelemetry ile ilgili güncelleştirmelerinizi doğrulamak için şu anda kodunuzu Azure'a dağıtmanız gerekir.
Şu anda OpenTelemetry çıkışlarında yalnızca HTTP tetikleyicisi ve Azure SDK tabanlı tetikleyiciler desteklenir.