Aracılığıyla paylaş


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:

  1. 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  
    
  2. Program.cs proje dosyanıza şu using deyimi ekleyin:

    using Azure.Monitor.OpenTelemetry.AspNetCore; 
    
  3. 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 UseOtlpExporterde UseAzureMonitor öğ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.

  1. 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
    
  1. Projenizde bir kod dosyası oluşturun, aşağıdaki kodu kopyalayıp bu yeni dosyaya yapıştırın ve dosyayı olarak src/index.jskaydedin:

    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()],
    });
    
  2. main package.json dosyanızdaki alanı şu şekilde görünebilecek yeni src/index.js dosyayı içerecek şekilde güncelleştirin:

    "main": "src/{index.js,functions/*.js}"
    
  1. Projenizde bir kod dosyası oluşturun, aşağıdaki kodu kopyalayıp bu yeni dosyaya yapıştırın ve dosyayı olarak src/index.tskaydedin:

    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()],
    });
    
  2. main package.json dosyanızdaki alanı, bu yeni src/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:

  1. değerine Truesahip adlı OTEL_FUNCTIONS_WORKER_ENABLED bir uygulama ayarı ekleyin.

  2. 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.

  3. Bu kodu profile.ps1 dosyanıza ekleyin:

    Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop 
    Initialize-FunctionsOpenTelemetry 
    
  1. Bu girdiyi dosyanıza requirements.txt ekleyin:

    azure.monitor.opentelemetry
    
  2. 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.

Azure İşlevleri Flex Tüketim planını izleme