Menggunakan OpenTelemetry dengan Azure Functions
Penting
Dukungan OpenTelemetry untuk Azure Functions saat ini dalam pratinjau, dan aplikasi Anda harus dihosting dalam paket Konsumsi Flex untuk menggunakan OpenTelemetry.
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 menggunakan Application Insights SDK. Namun, Anda dapat memilih untuk mengekspor data ini 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.
Tip
Karena artikel ini ditargetkan pada bahasa pengembangan pilihan Anda, ingatlah untuk memilih bahasa yang benar di bagian atas artikel.
Saat ini, tidak ada dukungan OpenTelemetry yang dioptimalkan klien untuk aplikasi Java.
OpenTelemetry saat ini tidak didukung untuk aplikasi dalam proses C#.
Anda dapat memperoleh manfaat ini dengan mengaktifkan OpenTelemetry di aplikasi fungsi Anda:
- Korelasi di seluruh jejak dan log yang dihasilkan baik di host maupun di kode aplikasi Anda.
- Pembuatan data telemetri yang konsisten dan berbasis standar yang dapat diekspor.
- Terintegrasi dengan penyedia lain yang dapat menggunakan data yang mematuhi OpenTeleletry.
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.
1. Aktifkan OpenTelemetry di host Functions
Saat Anda mengaktifkan output OpenTelemetry dalam file host.json aplikasi fungsi, host Anda mengekspor output OpenTelemetry terlepas dari 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",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
},
"telemetryMode": "openTelemetry"
}
2. Mengonfigurasi pengaturan aplikasi
Saat OpenTelemetry diaktifkan dalam file host.json, titik akhir tempat data dikirim ditentukan berdasarkan pengaturan aplikasi yang didukung OpenTelemetry yang tersedia di variabel lingkungan aplikasi Anda.
Buat pengaturan aplikasi tertentu di aplikasi fungsi Anda berdasarkan tujuan output OpenTelemetry. Saat pengaturan koneksi disediakan untuk pengekspor Application Insights dan protokol OpenTelemetry (OTLP), data OpenTelemetry dikirim ke kedua titik akhir.
APPLICATIONINSIGHTS_CONNECTION_STRING
: string koneksi untuk ruang kerja Application Insights. Ketika pengaturan ini ada, data OpenTelemetry dikirim ke ruang kerja tersebut. Pengaturan ini sama dengan yang digunakan untuk terhubung ke Application Insights tanpa OpenTelemetry diaktifkan. Jika aplikasi Anda belum memiliki pengaturan ini, Anda mungkin perlu Mengaktifkan integrasi Application Insights.
3. Aktifkan OpenTelemetry di aplikasi Anda
Dengan host Functions yang dikonfigurasi untuk menggunakan OpenTelemetry, Anda juga harus memperbarui kode aplikasi Anda untuk menghasilkan data OpenTelemetry. Mengaktifkan OpenTelemetry di host dan kode aplikasi Anda memungkinkan korelasi yang lebih baik antara jejak dan log yang dipancarkan baik oleh proses host Functions maupun dari proses pekerja bahasa Anda.
Cara Anda melengkapi aplikasi untuk menggunakan OpenTelemetry bergantung pada titik akhir OpenTelemetry target Anda:
Jalankan perintah ini untuk menginstal rakitan yang diperlukan di aplikasi Anda:
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
Dalam file proyek Program.cs Anda, tambahkan pernyataan ini
using
:using Azure.Monitor.OpenTelemetry.AspNetCore;
ConfigureServices
Di delegasi, tambahkan konfigurasi layanan ini:services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitor();
Untuk mengekspor ke titik akhir OpenTelemetry, panggil dan
UseAzureMonitor
UseOtlpExporter
.
Pengoptimalan pekerja Java belum tersedia untuk OpenTelemetry, jadi tidak ada yang perlu dikonfigurasi dalam kode Java Anda.
Instal paket npm ini di proyek Anda:
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
: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
Perbarui bidang dalam file package.json Anda untuk menyertakan file barusrc/index.js
ini, yang mungkin terlihat seperti ini:"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
: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
Perbarui bidang dalam file package.json Anda untuk menyertakan output file barusrc/index.ts
ini, 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 host Anda dikonfigurasi untuk output OpenTelemetry ke Application Insights, log yang dihasilkan oleh proses pekerja PowerShell masih diteruskan, tetapi pelacakan terdistribusi tidak didukung saat ini.
Instruksi ini hanya berlaku untuk pengekspor OTLP:
Tambahkan pengaturan aplikasi bernama
OTEL_FUNCTIONS_WORKER_ENABLED
dengan nilaiTrue
.Buat folder tingkat
Modules
aplikasi di akar aplikasi Anda dan jalankan perintah berikut:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
Ini menginstal modul yang diperlukan
AzureFunctions.PowerShell.OpenTelemetry.SDK
langsung di aplikasi Anda. Anda tidak dapat menggunakanrequirements.psd1
file 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
Tambahkan entri ini dalam file Anda
requirements.txt
:azure.monitor.opentelemetry
Tambahkan kode ini ke file titik masuk utama Anda
function_app.py
:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()
Pertimbangan untuk OpenTelemetry
Saat Anda mengekspor data menggunakan OpenTelemetry, ingatlah pertimbangan saat ini.
Ketika host dikonfigurasi untuk menggunakan OpenTelemetry, hanya log dan jejak yang diekspor. Metrik host saat ini tidak diekspor.
Saat ini Anda tidak dapat menjalankan proyek aplikasi secara lokal menggunakan Core Tools saat Anda mengaktifkan OpenTelemetry di host. Saat ini Anda perlu menyebarkan kode Anda ke Azure untuk memvalidasi pembaruan terkait OpenTelemetry Anda.
Saat ini, hanya pemicu HTTP dan pemicu berbasis Azure SDK yang didukung dengan output OpenTelemetry.