Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan kepada Anda cara mengonfigurasi aplikasi fungsi untuk mengekspor data log dan pelacakan dalam format OpenTelemetry. Azure Functions menghasilkan data telemetri pada eksekusi fungsi Anda dari proses host Functions dan proses pekerja khusus bahasa tempat kode fungsi Anda berjalan. Secara default, data telemetri ini dikirim ke Application Insights dengan menggunakan Application Insights SDK. Namun, Anda dapat memilih untuk mengekspor data ini dengan menggunakan semantik OpenTelemetry. Meskipun Anda masih dapat menggunakan format OpenTelemetry untuk mengirim data Anda ke Application Insights, Anda sekarang juga dapat mengekspor data yang sama ke titik akhir yang mematuhi OpenTelemetry lainnya.
Anda dapat memperoleh manfaat ini dengan mengaktifkan OpenTelemetry di aplikasi fungsi Anda:
- Menghubungkan data di seluruh jejak dan log yang dihasilkan baik di host maupun dalam kode aplikasi Anda.
- Memungkinkan pembuatan data telemetri yang konsisten dan berbasis standar yang dapat diekspor.
- Terintegrasi dengan penyedia lain yang dapat menggunakan data yang mematuhi OpenTelemetry.
Ingatlah pertimbangan ini saat menggunakan artikel ini:
Coba tutorial OpenTelemetry, yang dirancang untuk membantu Anda memulai dengan cepat dengan OpenTelemetry dan Azure Functions. Artikel ini menggunakan Azure Developer CLI (
azd) untuk membuat dan menyebarkan aplikasi fungsi yang menggunakan integrasi OpenTelemetry untuk pelacakan terdistribusi.Karena artikel ini ditargetkan pada bahasa pengembangan pilihan Anda, ingatlah untuk memilih bahasa yang benar di bagian atas artikel.
- OpenTelemetry saat ini tidak didukung untuk aplikasi dalam proses C#.
- OpenTelemetry diaktifkan di tingkat aplikasi fungsi, baik dalam konfigurasi host (
host.json) maupun di proyek kode Anda. Functions juga memberikan pengalaman yang dioptimalkan klien untuk mengekspor data OpenTelemetry dari kode fungsi Anda yang berjalan dalam proses pekerja khusus bahasa.
Mengaktifkan OpenTelemetry di host Functions
Saat Anda mengaktifkan output OpenTelemetry dalam file host.json aplikasi fungsi Anda, host Anda mengekspor output OpenTelemetry tanpa memandang tumpukan bahasa yang digunakan oleh aplikasi Anda.
Untuk mengaktifkan output OpenTelemetry dari host Functions, perbarui file host.json di proyek kode Anda untuk menambahkan "telemetryMode": "OpenTelemetry" elemen ke koleksi akar. Dengan OpenTelemetry diaktifkan, file host.json Anda mungkin terlihat seperti ini:
{
"version": "2.0",
"telemetryMode": "OpenTelemetry",
...
}
Mengonfigurasi pengaturan aplikasi
Saat Anda mengaktifkan OpenTelemetry dalam host.json file, variabel lingkungan aplikasi menentukan titik akhir untuk mengirim data berdasarkan pengaturan aplikasi yang didukung OpenTelemetry yang tersedia.
Buat pengaturan aplikasi tertentu di aplikasi fungsi Anda berdasarkan tujuan output OpenTelemetry. Saat Anda menyediakan pengaturan koneksi untuk pengekspor Application Insights dan protokol OpenTelemetry (OTLP), data OpenTelemetry dikirim ke kedua titik akhir.
- Wawasan Aplikasi
- Pengekspor OTLP
APPLICATIONINSIGHTS_CONNECTION_STRING: string koneksi untuk ruang kerja Application Insights. Ketika pengaturan ini ada, data OpenTelemetry dikirim ke ruang kerja tersebut. Gunakan pengaturan yang sama untuk menyambungkan ke Application Insights tanpa OpenTelemetry diaktifkan. Jika aplikasi Anda belum memiliki pengaturan ini, Anda mungkin perlu Mengaktifkan integrasi Application Insights.
JAVA_APPLICATIONINSIGHTS_ENABLE_TELEMETRY: diatur ke true sehingga host Functions memungkinkan proses pekerja Java untuk mengalirkan log OpenTelemetry secara langsung, yang mencegah entri tingkat host duplikat.
PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY: diatur ke true sehingga host Functions memungkinkan proses pekerja Python untuk mengalirkan log OpenTelemetry secara langsung, yang mencegah entri tingkat host duplikat.
Mengaktifkan OpenTelemetry di aplikasi Anda
Setelah Anda mengonfigurasi host Functions untuk menggunakan OpenTelemetry, perbarui kode aplikasi Anda untuk menghasilkan data OpenTelemetry. Ketika Anda mengaktifkan OpenTelemetry di host dan kode aplikasi Anda, Anda mendapatkan korelasi yang lebih baik antara jejak dan log yang dipancarkan proses host Functions dan proses pekerja bahasa Anda.
Cara Anda mengintegrasikan aplikasi Anda untuk menggunakan OpenTelemetry tergantung pada endpoint OpenTelemetry yang menjadi target Anda.
Contoh dalam artikel ini mengasumsikan bahwa aplikasi Anda menggunakan IHostApplicationBuilder yang tersedia di versi 2.x dan versi yang lebih baru dari Microsoft.Azure.Functions.Worker. Untuk informasi selengkapnya, lihat Versi 2.x di panduan model pekerja terisolasi C#.
Jalankan perintah ini untuk menginstal rakitan yang diperlukan di aplikasi Anda:
- Wawasan Aplikasi
- Pengekspor OTLP
dotnet add package Microsoft.Azure.Functions.Worker.OpenTelemetry dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package Azure.Monitor.OpenTelemetry.ExporterDalam file proyek Program.cs Anda, tambahkan pernyataan ini
using:- Wawasan Aplikasi
- Pengekspor OTLP
using Azure.Monitor.OpenTelemetry.Exporter;Konfigurasikan OpenTelemetry berdasarkan apakah startup proyek Anda menggunakan
IHostBuilderatauIHostApplicationBuilder. Yang terakhir diperkenalkan di v2.x dari ekstensi model pekerja terisolasi .NET.Di program.cs, tambahkan baris kode ini setelah
ConfigureFunctionsWebApplication:builder.Services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitorExporter();Anda dapat mengekspor ke kedua titik akhir OpenTelemetry dari aplikasi yang sama.
Tambahkan pustaka yang diperlukan ke aplikasi Anda. Cara Anda menambahkan pustaka tergantung pada apakah Anda menyebarkan menggunakan Maven atau Kotlin dan jika Anda ingin juga mengirim data ke Application Insights.
<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>(Opsional) Tambahkan kode ini untuk membuat rentang kustom:
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(); }
Instal paket npm ini di proyek Anda:
- Wawasan Aplikasi
- Pengekspor OTLP
npm install @opentelemetry/api npm install @opentelemetry/auto-instrumentations-node npm install @azure/monitor-opentelemetry-exporter npm install @azure/functions-opentelemetry-instrumentation
Buat file kode di proyek Anda, salin dan tempel kode berikut dalam file baru ini, dan simpan file sebagai
src/index.js:- Wawasan Aplikasi
- Pengekspor OTLP
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()], });mainPerbarui bidang dalam file package.json Anda untuk menyertakan file barusrc/index.js. Contohnya:"main": "src/{index.js,functions/*.js}"
Buat file kode di proyek Anda, salin dan tempel kode berikut dalam file baru ini, dan simpan file sebagai
src/index.ts:- Wawasan Aplikasi
- Pengekspor OTLP
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()], });mainPerbarui bidang dalam file package.json Anda untuk menyertakan output file barusrc/index.tsini, yang mungkin terlihat seperti ini:"main": "dist/src/{index.js,functions/*.js}"
Penting
Output OpenTelemetry ke Application Insights dari pekerja bahasa saat ini tidak didukung untuk aplikasi PowerShell. Anda mungkin ingin menggunakan titik akhir pengekspor OTLP. Saat Anda mengonfigurasi host untuk output OpenTelemetry ke Application Insights, log yang dihasilkan oleh proses kerja PowerShell masih diteruskan, tetapi penelusuran terdistribusi tidak didukung saat ini.
Instruksi ini hanya berlaku untuk pengekspor OTLP:
Tambahkan pengaturan aplikasi bernama
OTEL_FUNCTIONS_WORKER_ENABLEDdengan nilaiTrue.Buat
Modulestingkat aplikasi di akar aplikasi Anda dan jalankan perintah berikut:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDKPerintah ini menginstal modul yang diperlukan
AzureFunctions.PowerShell.OpenTelemetry.SDKlangsung di aplikasi Anda. Anda tidak dapat menggunakanrequirements.psd1file untuk menginstal dependensi ini secara otomatis karena dependensi terkelola saat ini tidak didukung dalam pratinjau paket Konsumsi Flex.Tambahkan kode ini ke file profile.ps1 Anda:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Pastikan pustaka ini ada di file Anda
requirements.txt, baik dari membatalkan komentar atau menambahkan diri Anda:- Wawasan Aplikasi
- Pengekspor OTLP
azure-monitor-opentelemetryTambahkan kode ini ke file titik masuk utama Anda
function_app.py:- Wawasan Aplikasi
- Pengekspor OTLP
Jika Anda sudah menambahkan
PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY=truedi pengaturan aplikasi, Anda dapat melewati langkah ini. Untuk mengaktifkan koleksi Application Insights secara manual tanpa instrumentasi otomatis, tambahkan kode ini ke aplikasi Anda:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()Tinjau dokumentasi penggunaan Azure monitor Distro untuk opsi tentang cara mengonfigurasi SDK lebih lanjut.
Pertimbangan untuk OpenTelemetry
Saat Anda mengekspor data dengan menggunakan OpenTelemetry, ingatlah pertimbangan ini.
Portal Microsoft Azure mendukung
Recent function invocationjejak hanya jika telemetri dikirim ke Azure Monitor.Saat Anda mengonfigurasi host untuk menggunakan OpenTelemetry, portal Microsoft Azure tidak mendukung streaming log.
Jika Anda mengatur
telemetryModekeOpenTelemetry, konfigurasi di bagianlogging.applicationInsightshost.json tidak berlaku.
Rentang kustom secara otomatis menyertakan semua atribut sumber daya dan menggunakan eksportir yang dikonfigurasi di aplikasi Anda.
Saat aplikasi Anda berjalan di luar Azure, termasuk selama pengembangan lokal, detektor sumber daya mengatur
service.nameatribut kejava-function-appsecara default.Gunakan bendera Java Virtual Machine (JVM) ini untuk membungkam telemetri saat berjalan secara lokal selama pengujian unit:
-Dotel.traces.exporter=none-Dotel.metrics.exporter=none-Dotel.logs.exporter=none
- Anda tidak perlu mendaftarkan middleware secara manual; pekerja Java secara otomatis mendeteksi
OpenTelemetryInvocationMiddleware.
Troubleshooting
Saat Anda mengekspor data dengan menggunakan OpenTelemetry, ingatlah masalah dan solusi umum ini.
Pemfilteran log
Untuk mengonfigurasi pemfilteran log dengan benar di aplikasi fungsi, Anda perlu memahami perbedaan antara proses host dan proses pekerja.
Proses host adalah runtime Azure Functions yang mengelola pemicu, penskalaan, dan memancarkan telemetri tingkat sistem seperti log inisialisasi, jejak permintaan, dan informasi kesehatan runtime.
Proses pekerja (worker process) tergantung pada bahasa, menjalankan kode fungsi Anda, dan menghasilkan log aplikasi serta telemetri secara mandiri.
Penting
Filter yang ditentukan dalam host.json hanya berlaku untuk log yang dihasilkan oleh proses host. Anda harus menggunakan pengaturan OpenTelemetry berbasis bahasa pemrograman untuk memfilter log dari proses kerja.
Contoh: Memfilter log host untuk semua penyedia di host.json
Gunakan pendekatan ini untuk mengatur tingkat log global di semua penyedia yang dikelola oleh host:
{
"version": "2.0",
"telemetryMode": "OpenTelemetry",
"logging": {
"logLevel": {
"default": "Warning"
}
}
}
Contoh: Memfilter log hanya untuk penyedia pencatat OpenTelemetry
Gunakan pendekatan ini untuk menargetkan hanya penyedia pencatat OpenTelemetry sambil membiarkan penyedia lain (seperti konsol atau pengelogan file) tidak terpengaruh:
{
"version": "2.0",
"telemetryMode": "OpenTelemetry",
"logging": {
"OpenTelemetry": {
"logLevel": {
"default": "Warning"
}
}
}
}
Pengelogan konsol
Host Functions secara otomatis merekam semua yang ditulis ke stdout atau stderr dan meneruskannya ke alur telemetri. Jika Anda juga menggunakan ConsoleExporter atau menulis langsung ke konsol dalam kode Anda, log duplikat dapat terjadi di data telemetri Anda.
Nota
Untuk menghindari entri telemetri duplikat, jangan menambahkan ConsoleExporter atau menulis ke konsol pada kode produksi.
Microsoft Entra otentikasi
Saat Anda menggunakan autentikasi Microsoft Entra dengan OpenTelemetry, Anda harus mengonfigurasi autentikasi secara terpisah untuk proses host dan proses pekerja.
Untuk mengonfigurasi autentikasi untuk proses host, lihat Memerlukan autentikasi Microsoft Entra.
Untuk mengonfigurasi autentikasi untuk proses pekerja, lihat Mengaktifkan autentikasi Microsoft Entra.
Dukungan atribut sumber daya
Dukungan atribut sumber daya di Azure Monitor saat ini sedang dalam tahap uji coba. Untuk mengaktifkan fitur ini, atur OTEL_DOTNET_AZURE_MONITOR_ENABLE_RESOURCE_METRICS variabel lingkungan ke true. Pengaturan ini menyerap atribut sumber daya ke dalam tabel metrik kustom.
Telemetri permintaan duplikat
Proses host secara otomatis menghasilkan telemetri permintaan. Jika proses kerja juga menggunakan pustaka pelacakan permintaan (misalnya, AspNetCoreInstrumentation di .NET), permintaan yang sama dilaporkan dua kali.
Nota
Karena Distribusi Azure Monitor biasanya menyertakan AspNetCoreInstrumentation di .NET dan instrumentasi serupa dalam bahasa lain, hindari menggunakan distribusi Azure Monitor dalam proses kerja untuk mencegah telemetri duplikat.
Cakupan pencatatan log tidak termasuk
Secara default, proses pekerja tidak menyertakan cakupan dalam lognya. Untuk mengaktifkan skop, Anda harus mengonfigurasi pengaturan ini secara eksplisit pada pekerja. Contoh berikut menunjukkan cara mengaktifkan cakupan di .NET Isolated:
builder.Logging.AddOpenTelemetry(b => b.IncludeScopes = true);
Data telemetri permintaan hilang
Pemicu seperti HTTP, Service Bus, dan Event Hubs bergantung pada penyebaran konteks untuk pelacakan terdistribusi. Dengan pengambilan sampel berbasis induk sebagai perilaku default, telemetri permintaan tidak dihasilkan saat permintaan atau pesan masuk tidak diambil sampelnya.
Duplikat OperationId
Di Azure Functions, OperationId yang digunakan untuk menghubungkan telemetri berasal langsung dari nilai traceparent dalam permintaan atau pesan masuk. Jika beberapa panggilan menggunakan kembali nilai yang sama pada traceparent, semuanya mendapatkan OperationId yang sama.
Mengonfigurasi OpenTelemetry dengan variabel lingkungan
Anda dapat mengonfigurasi perilaku OpenTelemetry dengan menggunakan variabel lingkungan standarnya. Variabel ini menyediakan cara yang konsisten untuk mengontrol fungsi di berbagai bahasa dan runtime. Anda dapat menyesuaikan strategi pengambilan sampel, pengaturan pengekspor, dan atribut sumber daya. Untuk informasi selengkapnya tentang variabel lingkungan yang didukung, lihat dokumentasi OpenTelemetry.
Menggunakan diagnostik untuk memecahkan masalah pemantauan
Diagnostik Azure Functions di portal Microsoft Azure adalah sumber daya yang berguna untuk mendeteksi dan mendiagnosis potensi masalah terkait pemantauan.
Untuk mengakses diagnostik di aplikasi Anda:
Di portal Microsoft Azure, buka sumber daya aplikasi fungsi Anda.
Di panel kiri, pilih Diagnosa dan selesaikan masalah dan cari alur kerja Aplikasi Fungsi yang hilang telemetri Application Insights atau OpenTelemetry.
Pilih alur kerja ini, pilih metode penyerapan Anda, dan pilih Berikutnya.
Tinjau panduan dan rekomendasi apa pun yang disediakan oleh pemecah masalah.
Langkah selanjutnya
Pelajari selengkapnya tentang OpenTelemetry dan pemantauan Azure Functions: