Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 Insights SDK'sı kullanılarak Application Insights'a gönderilir. Ancak, OpenTelemetry semantiği kullanarak bu verileri dışarı aktarmayı seçebilirsiniz. Verilerinizi Application Insights'a göndermek için openTelemetry biçimini kullanmaya devam edebilirsiniz ancak artık aynı verileri diğer OpenTelemetry uyumlu uç noktalara da aktarabilirsiniz.
İş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 veri bağıntısı oluşturur.
- Dışarı aktarılabilir telemetri verilerinin tutarlı, standartlara dayalı bir şekilde oluşturulmasını sağlar.
- OpenTelemetry uyumlu verileri kullanabilen diğer sağlayıcılarla tümleşir.
Bu makaleyi kullanırken şu noktaları göz önünde bulundurun:
OpenTelemetry ve Azure İşlevleri'ni hızlı bir şekilde kullanmaya başlamanıza yardımcı olmak için tasarlanan OpenTelemetry öğreticisini deneyin. Bu makalede, dağıtılmış izleme için OpenTelemetry tümleştirmesi kullanan bir işlev uygulaması oluşturmak ve dağıtmak için Azure Geliştirici CLI'sı (
azd) kullanılmaktadır.Bu makale seçtiğiniz geliştirme dilini hedeflediğinden, makalenin en üstünde doğru dili seçmeyi unutmayın.
- OpenTelemetry şu anda C# işlem içi uygulamaları için desteklenmiyor.
- 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.
İşlevler ana bilgisayarında OpenTelemetry'yi etkinleştirme
İş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",
"telemetryMode": "OpenTelemetry",
...
}
Uygulama ayarlarını yapılandır
Dosyada OpenTelemetry'yi host.json etkinleştirdiğinizde, uygulamanın ortam değişkenleri, OpenTelemetry tarafından desteklenen uygulama ayarlarının kullanılabilir olduğu verileri göndermek için uç noktaları belirler.
İşlev uygulamanızda OpenTelemetry çıkış hedefine göre belirli uygulama ayarları oluşturun. Hem Application Insights hem de OpenTelemetry protokolü (OTLP) verme işlemi için bağlantı ayarları sağladığınızda, OpenTelemetry verileri her iki uç noktaya da gönderilir.
APPLICATIONINSIGHTS_CONNECTION_STRING: Application Insights çalışma alanının bağlantı dizesi. Bu ayar mevcut olduğunda, OpenTelemetry verileri bu çalışma alanına gönderilir. OpenTelemetry etkinleştirilmeden Application Insights'a bağlanmak için aynı ayarı kullanın. Uygulamanızda bu ayar yoksa Application Insights tümleştirmesini etkinleştirmeniz gerekebilir.
JAVA_APPLICATIONINSIGHTS_ENABLE_TELEMETRY: İşlevler ana bilgisayarının, Java çalışan işleminin OpenTelemetry günlüklerini doğrudan akışına izin vermesi için olarak ayarlanır true ve bu da yinelenen konak düzeyinde girişleri engeller.
PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY: İşlevler ana bilgisayarının, Python çalışan işleminin OpenTelemetry günlüklerini doğrudan akışla aktarmasına izin vermesi için olarak ayarlanır true ve bu da yinelenen konak düzeyinde girişleri önler.
Uygulamanızda OpenTelemetry'yi etkinleştirme
İşlevler ana bilgisayarını OpenTelemetry kullanacak şekilde yapılandırdıktan sonra uygulama kodunuzu OpenTelemetry verilerinin çıktısını almak üzere güncelleştirin. Hem ana bilgisayarda hem de uygulama kodunuzda OpenTelemetry'yi etkinleştirdiğinizde, İşlevler ana bilgisayar süreci ile dil çalışma birimi süreci tarafından yayılmış olan izlemeler ve günlükler arasında daha iyi bir bağıntı elde edersiniz.
Uygulamanızın OpenTelemetry kullanımı için nasıl enstrüman edileceği, hedef OpenTelemetry uç noktanıza bağlıdır.
Uygulamanızın, Microsoft.Azure.Functions.Worker'ın 2.x ve sonraki sürümlerinde bulunan IHostApplicationBuilder kullandığı varsayılmaktadır. Daha fazla bilgi için C# yalıtılmış çalışan modeli kılavuzundaki Sürüm 2.x'e bakın.
Uygulamanıza gerekli derlemeleri yüklemek için şu komutları çalıştırın:
dotnet add package Microsoft.Azure.Functions.Worker.OpenTelemetry dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package Azure.Monitor.OpenTelemetry.ExporterProgram.cs proje dosyanıza şu
usingdeyimi ekleyin:using Azure.Monitor.OpenTelemetry.Exporter;Projenizin başlatılmasında
IHostBuilderveyaIHostApplicationBuilderkullanılıp kullanılmadığına bağlı olarak OpenTelemetry'yi yapılandırın. İkincisi, .NET yalıtılmış çalışan modeli uzantısının v2.x'inde tanıtıldı.program.cs'da, şu kod satırının arkasına
ConfigureFunctionsWebApplicationekleyin:builder.Services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitorExporter();Aynı uygulamadan her iki OpenTelemetry uç noktasına da dışarı aktarabilirsiniz.
Gerekli kitaplıkları uygulamanıza ekleyin. Kitaplık ekleme yönteminiz, Maven veya Kotlin kullanarak dağıtım yapıp yapmadığınıza ve Application Insights'a da veri göndermek isteyip istemediğinize bağlıdır.
<dependency> <groupId>com.microsoft.azure.functions</groupId> <artifactId>azure-functions-java-opentelemetry</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-monitor-opentelemetry-autoconfigure</artifactId> <version>1.2.0</version> </dependency>(İsteğe bağlı) Özel yayılma alanları oluşturmak için bu kodu ekleyin:
import com.microsoft.azure.functions.opentelemetry.FunctionsOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Scope; Span span = FunctionsOpenTelemetry.startSpan( "com.contoso.PaymentFunction", // tracer name "validateCharge", // span name null, // parent = current context SpanKind.INTERNAL); try (Scope ignored = span.makeCurrent()) { // business logic here } finally { span.end(); }
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.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()], });mainpackage.json dosyanızdaki alanı yenisrc/index.jsdosyayı içerecek şekilde güncelleştirin. Örneğin:"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.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()], });mainpackage.json dosyanızdaki alanı, bu yenisrc/index.tsdosyanı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 Application Insights'a openTelemetry çıkışı şu anda PowerShell uygulamaları için desteklenmemaktadır. Bunun yerine bir OTLP verme uç noktası kullanmak isteyebilirsiniz. Barındırma sunucunuzu OpenTelemetry için Application Insights'a yapılandırdığınızda, PowerShell çalışan işlemi tarafından üretilen günlükler hala iletilir, ancak şu anda dağıtılmış izleme özelliği desteklenmemektedir.
Bu yönergeler yalnızca OTLP ihracatçısı için geçerlidir:
değerine
OTEL_FUNCTIONS_WORKER_ENABLEDsahip adlıTruebir uygulama ayarı ekleyin.Uygulamanızın kökünde uygulama düzeyinde
Modulesbir klasör oluşturun ve aşağıdaki komutu çalıştırın:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDKBu komut, gerekli
AzureFunctions.PowerShell.OpenTelemetry.SDKmodülü doğrudan uygulamanıza yükler. Yönetilen bağımlılıklar şu anda Esnek Tüketim planırequirements.psd1desteklenmediğinden, dosyayı bu bağımlılığı otomatik olarak yüklemek için kullanamazsınız.Bu kodu profile.ps1 dosyanıza ekleyin:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Ayrıştırma veya kendinizi ekleme gibi durumlarda bu kitaplıkların dosyanızda
requirements.txtolduğundan emin olun:azure-monitor-opentelemetryBu kodu ana giriş noktası dosyanıza
function_app.pyekleyin:Uygulama ayarlarınıza zaten eklediyseniz
PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY=truebu adımı atlayabilirsiniz. Application Insights koleksiyonunu otomatik izleme olmadan el ile etkinleştirmek için bu kodu uygulamanıza ekleyin:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()SDK'nın nasıl daha fazla yapılandırılması hakkında seçenekler için Azure İzleyici Dağıtım kullanımı belgelerini gözden geçirin.
OpenTelemetry ile ilgili dikkat edilmesi gerekenler
OpenTelemetry kullanarak verilerinizi dışarı aktardığınızda, bu konuları göz önünde bulundurun.
Azure portalı yalnızca telemetri Azure Monitor'a gönderildiğinde izleri destekler
Recent function invocation.Konağı OpenTelemetry kullanacak şekilde yapılandırırken, Azure portalı log akışını desteklemez.
telemetryModeolarak ayarlarsanız, host.json bölümündekilogging.applicationInsightsyapılandırması uygulanmaz.
Özel yayılma alanları otomatik olarak tüm kaynak özniteliklerini içerir ve uygulamanızda yapılandırılan dışarı aktarmaları kullanır.
Uygulamanız yerel geliştirme sırasında da dahil olmak üzere Azure dışında çalıştığında, kaynak algılayıcısı özniteliği varsayılan olarak olarak
service.nameolarak ayarlarjava-function-app.Birim testleri sırasında yerel olarak çalışırken telemetriyi sessize almak için şu Java Sanal Makinesi (JVM) bayraklarını kullanın:
-Dotel.traces.exporter=none-Dotel.metrics.exporter=none-Dotel.logs.exporter=none
- Ara yazılımı el ile kaydetmenize gerek yok; Java işleyici
OpenTelemetryInvocationMiddlewareotomatik olarak keşfeder.
Sorun giderme
OpenTelemetry kullanarak verilerinizi dışarı aktardığınızda, bu yaygın sorunları ve çözümleri göz önünde bulundurun.
Günlük filtreleme
İşlev uygulamanızda günlük filtrelemeyi doğru yapılandırmak için ana bilgisayar süreci ile çalışan süreci arasındaki farkı anlamanız gerekir.
Konak işlemi, tetikleyicileri ve ölçeklendirmeyi yöneten, başlatma günlükleri, istek izlemeleri ve çalışma zamanı sistem durumu bilgileri gibi sistem düzeyinde telemetriyi yayan Azure İşlevleri çalışma zamanı ortamıdır.
Çalışan işlemi dile özgüdür, işlev kodunuzu yürütür ve uygulama günlüklerini ve telemetri verilerini bağımsız olarak üretir.
Önemli
host.json'de tanımlanan filtreler yalnızca konak işlemi tarafından oluşturulan günlüklere uygulanır. Çalışan işleminden günlükleri filtrelemek için dile özgü OpenTelemetry ayarlarını kullanmanız gerekir.
Örnek: host.json'daki tüm sağlayıcılar için konak günlüklerini filtreleme
Ana bilgisayar tarafından yönetilen tüm sağlayıcılarda küresel günlük seviyesini ayarlamak için bu yaklaşımı kullanın.
{
"version": "2.0",
"telemetryMode": "OpenTelemetry",
"logging": {
"logLevel": {
"default": "Warning"
}
}
}
Örnek: Günlükleri yalnızca OpenTelemetry günlükçü sağlayıcısı için filtreleyin
Diğer sağlayıcıları (konsol veya dosya günlüğü gibi) etkilenmeden bırakırken yalnızca OpenTelemetry günlükçü sağlayıcısını hedeflemek için bu yaklaşımı kullanın:
{
"version": "2.0",
"telemetryMode": "OpenTelemetry",
"logging": {
"OpenTelemetry": {
"logLevel": {
"default": "Warning"
}
}
}
}
Konsol loglama
İşlevler konağı, stdout veya stderr'a yazılan her şeyi otomatik olarak yakalar ve telemetri işlem hattına iletir. ConsoleExporter da kullanıyorsanız veya kodunuzdaki konsola doğrudan yazıyorsanız telemetri verilerinizde yinelenen günlükler oluşabilir.
Uyarı
Yinelenen telemetri girdilerini önlemek için ConsoleExporter eklemeyin veya üretim kodunda konsola yazmayın.
Microsoft Entra kimlik doğrulama
OpenTelemetry ile Microsoft Entra kimlik doğrulamasını kullandığınızda, kimlik doğrulamasını hem konak işlemi hem de çalışan işlemi için ayrı olarak yapılandırmanız gerekir.
Konak işlemi için kimlik doğrulamasını yapılandırma hakkında daha fazla bilgi için, Microsoft Entra kimlik doğrulaması gerektirme sayfasına bakın.
Çalışan işlemi için kimlik doğrulamasını yapılandırmak için bkz. Microsoft Entra kimlik doğrulamasını etkinleştirme.
Kaynak öznitelikleri desteği
Azure İzleyici'deki kaynak öznitelikleri desteği şu anda önizleme aşamasındadır. Bu özelliği etkinleştirmek için ortam değişkenini OTEL_DOTNET_AZURE_MONITOR_ENABLE_RESOURCE_METRICS olarak trueayarlayın. Bu ayar kaynak özniteliklerini özel ölçümler tablosuna alır.
Yinelenen istek telemetrisi
Ana bilgisayar işlemi, istek telemetrisini otomatik olarak oluşturur. Çalışan süreç ayrıca istek izleme kütüphaneleriyle izleniyorsa (örneğin, .NET'te AspNetCoreInstrumentation), aynı istek iki kez raporlanır.
Uyarı
Azure İzleyici Dağıtımı genellikle .NET'te AspNetCoreInstrumentation ve diğer dillerde benzer izlemeler içerdiğinden, yinelenen telemetriyi önlemek için çalışan işleminde Azure İzleyici dağıtımı kullanmaktan kaçının.
Loglama kapsamları dahil değil
Varsayılan olarak, çalışan işlemi günlüklerine kapsam içermez. Kapsamları etkinleştirmek için bu ayarı çalışanda açıkça yapılandırmanız gerekir. Aşağıdaki örnekte, .NET Yalıtılmış'da kapsamların nasıl etkinleştirileceği gösterilmektedir:
builder.Logging.AddOpenTelemetry(b => b.IncludeScopes = true);
Eksik istek telemetrisi
HTTP, Service Bus ve Event Hubs gibi tetikleyiciler, dağıtılmış izlemeyi mümkün kılmak için bağlam yayılımına bağlıdır. Varsayılan davranış olarak üst tabanlı örnekleme kullanıldığında, gelen istek veya ileti örneklenmemişse istek telemetrisi oluşturulmaz.
Yinelenen OperationId
Azure İşlevleri'nde, telemetriyi ilişkilendirmek için kullanılan OperationId, doğrudan gelen istek veya iletideki traceparent değerinden gelir. Birden çok çağrı aynı traceparent değeri yeniden kullandığında, hepsi aynı OperationIdolur.
OpenTelemetry'yi ortam değişkenleriyle yapılandırma
OpenTelemetry davranışını, standart ortam değişkenlerini kullanarak yapılandırabilirsiniz. Bu değişkenler, farklı diller ve çalışma zamanlarında davranışı denetlemek için tutarlı bir yol sağlar. Örnekleme stratejilerini, dışarı aktarma ayarlarını ve kaynak özniteliklerini ayarlayabilirsiniz. Desteklenen ortam değişkenleri hakkında daha fazla bilgi için OpenTelemetry belgelerine bakın.
İzleme sorunlarını gidermek için tanılamayı kullanma
Azure portalındaki Azure İşlevleri tanılaması, izlemeyle ilgili olası sorunları algılamak ve tanılamak için kullanışlı bir kaynaktır.
Uygulamanızda tanılamaya erişmek için:
Azure portalında işlev uygulaması kaynağınıza gidin.
Sol bölmede Sorunları tanıla ve çöz seçeneğini seçin ve İşlev Uygulaması telemetrisinin eksik olduğu Application Insights veya OpenTelemetry iş akışını arayın.
Bu iş akışını seçin, alma yönteminizi seçin ve İleri'yi seçin.
Sorun giderici tarafından sağlanan yönergeleri ve önerileri gözden geçirin.
Sonraki Adımlar
OpenTelemetry ve Azure İşlevlerini izleme hakkında daha fazla bilgi edinin: