استخدام OpenTelemetry مع Azure Functions
هام
دعم OpenTelemetry ل Azure Functions قيد المعاينة حاليا.
توضح هذه المقالة كيفية تكوين تطبيق الوظائف لتصدير بيانات السجل والتتبع بتنسيق OpenTelemetry. تنشئ Azure Functions بيانات تتبع الاستخدام على عمليات تنفيذ الوظائف من كل من عملية مضيف الوظائف وعملية العامل الخاصة باللغة التي يتم فيها تشغيل التعليمات البرمجية للدالة. بشكل افتراضي، يتم إرسال بيانات تتبع الاستخدام هذه إلى Application Insights باستخدام Application Insights SDK. ومع ذلك، يمكنك اختيار تصدير هذه البيانات باستخدام دلالات القياس المفتوح. بينما لا يزال بإمكانك استخدام تنسيق OpenTelemetry لإرسال بياناتك إلى Application Insights، يمكنك الآن أيضا تصدير نفس البيانات إلى أي نقطة نهاية أخرى متوافقة مع OpenTelemetry.
تلميح
نظرا لأن هذه المقالة تستهدف لغة التطوير التي تختارها، تذكر اختيار اللغة الصحيحة في أعلى المقالة.
حاليا، لا يوجد دعم OpenTelemetry محسن للعميل لتطبيقات Java.
OpenTelemetry غير مدعوم حاليا لتطبيقات C# قيد المعالجة.
يمكنك الحصول على هذه الفوائد عن طريق تمكين OpenTelemetry في تطبيق الوظائف:
- الارتباط عبر التتبعات والسجلات التي يتم إنشاؤها في كل من المضيف وفي التعليمات البرمجية للتطبيق الخاص بك.
- إنشاء بيانات تتبع الاستخدام القابلة للتصدير بشكل متسق ومستند إلى المعايير.
- يتكامل مع موفرين آخرين يمكنهم استهلاك بيانات متوافقة مع OpenTelemetry.
يتم تمكين OpenTelemetry على مستوى تطبيق الوظائف، سواء في تكوين المضيف (host.json
) أو في مشروع التعليمات البرمجية. توفر الوظائف أيضا تجربة محسنة للعميل لتصدير بيانات OpenTelemetry من التعليمات البرمجية للدالة التي تعمل في عملية عامل خاصة باللغة.
1. تمكين OpenTelemetry في مضيف الوظائف
عند تمكين إخراج OpenTelemetry في ملف host.json لتطبيق الوظائف، يقوم المضيف بتصدير إخراج OpenTelemetry بغض النظر عن مكدس اللغة المستخدم من قبل تطبيقك.
لتمكين إخراج OpenTelemetry من مضيف الوظائف، قم بتحديث ملف host.json في مشروع التعليمات البرمجية لإضافة عنصر "telemetryMode": "openTelemetry"
إلى مجموعة الجذر. مع تمكين OpenTelemetry، قد يبدو ملف host.json كما يلي:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
},
"telemetryMode": "openTelemetry"
}
2. تكوين إعدادات التطبيق
عند تمكين OpenTelemetry في ملف host.json، يتم تحديد نقاط النهاية التي يتم إرسال البيانات إليها استنادا إلى إعدادات التطبيق المدعومة من OpenTelemetry المتوفرة في متغيرات بيئة التطبيق.
إنشاء إعدادات تطبيق محددة في تطبيق الوظائف استنادا إلى وجهة إخراج OpenTelemetry. عند توفير إعدادات الاتصال لكل من Application Insights ومصدر بروتوكول القياس المفتوح (OTLP)، يتم إرسال بيانات OpenTelemetry إلى نقطتي النهاية.
APPLICATIONINSIGHTS_CONNECTION_STRING
: سلسلة الاتصال لمساحة عمل Application Insights. عند وجود هذا الإعداد، يتم إرسال بيانات OpenTelemetry إلى مساحة العمل هذه. هذا الإعداد هو نفس الإعداد المستخدم للاتصال ب Application Insights دون تمكين OpenTelemetry. إذا لم يكن التطبيق الخاص بك يحتوي على هذا الإعداد بالفعل، فقد تحتاج إلى تمكين تكامل Application Insights.
3. تمكين OpenTelemetry في تطبيقك
مع تكوين مضيف الوظائف لاستخدام OpenTelemetry، يجب عليك أيضا تحديث التعليمات البرمجية للتطبيق لإخراج بيانات OpenTelemetry. يتيح تمكين OpenTelemetry في كل من المضيف ورمز التطبيق الخاص بك ارتباطا أفضل بين التتبعات والسجلات المنبعثة من عملية مضيف الوظائف ومن عملية عامل اللغة.
تعتمد الطريقة التي تستخدم بها تطبيقك لاستخدام OpenTelemetry على نقطة نهاية OpenTelemetry الهدف:
قم بتشغيل هذه الأوامر لتثبيت التجميعات المطلوبة في تطبيقك:
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، أضف هذه
using
العبارة:using Azure.Monitor.OpenTelemetry.AspNetCore;
في
ConfigureServices
المفوض، أضف تكوين الخدمة هذا:services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitor();
للتصدير إلى كل من نقطتي نهاية OpenTelemetry، قم باستدعاء كل من
UseAzureMonitor
وUseOtlpExporter
.
تحسينات عامل Java غير متوفرة بعد ل OpenTelemetry، لذلك لا يوجد شيء لتكوينه في تعليمة Java البرمجية الخاصة بك.
تثبيت حزم npm هذه في مشروعك:
npm install @opentelemetry/api npm install @opentelemetry/auto-instrumentations-node npm install @azure/monitor-opentelemetry-exporter npm install @azure/functions-opentelemetry-instrumentation
أنشئ ملف تعليمة برمجية في مشروعك، وانسخ التعليمات البرمجية التالية والصقها في هذا الملف الجديد، واحفظ الملف باسم
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
ملف package.json لتضمين هذا الملف الجديدsrc/index.js
، والذي قد يبدو كما يلي:"main": "src/{index.js,functions/*.js}"
أنشئ ملف تعليمة برمجية في مشروعك، وانسخ التعليمات البرمجية التالية والصقها في هذا الملف الجديد، واحفظ الملف باسم
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
ملف package.json لتضمين إخراج هذا الملف الجديدsrc/index.ts
، والذي قد يبدو كما يلي:"main": "dist/src/{index.js,functions/*.js}"
هام
إخراج OpenTelemetry إلى Application Insights من عامل اللغة غير مدعوم حاليا لتطبيقات PowerShell. قد تحتاج بدلا من ذلك إلى استخدام نقطة نهاية مصدر OTLP. عند تكوين المضيف لإخراج OpenTelemetry إلى Application Insights، لا تزال السجلات التي تم إنشاؤها بواسطة عملية عامل PowerShell تتم إعادة توجيهها، ولكن لا يتم دعم التتبع الموزع في هذا الوقت.
تنطبق هذه التعليمات فقط على مصدر OTLP:
أضف إعداد تطبيق باسم
OTEL_FUNCTIONS_WORKER_ENABLED
بقيمةTrue
.إنشاء مجلد على مستوى
Modules
التطبيق في جذر التطبيق وتشغيل الأمر التالي:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
يؤدي ذلك إلى تثبيت الوحدة النمطية المطلوبة
AzureFunctions.PowerShell.OpenTelemetry.SDK
مباشرة في تطبيقك. لا يمكنك استخدام الملف لتثبيت هذه التبعيةrequirements.psd1
تلقائيا لأن التبعيات المدارة غير مدعومة حاليا في معاينة خطة Flex Consumption.أضف هذه التعليمة البرمجية إلى ملف profile.ps1 الخاص بك:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
أضف هذا الإدخال في الملف:
requirements.txt
azure.monitor.opentelemetry
أضف هذه التعليمة البرمجية إلى
function_app.py
ملف نقطة الإدخال الرئيسي:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()
اعتبارات القياس المفتوح
عند تصدير بياناتك باستخدام OpenTelemetry، ضع هذه الاعتبارات الحالية في الاعتبار.
عند تكوين المضيف لاستخدام OpenTelemetry، يتم تصدير السجلات والتتبعات فقط. لا يتم تصدير مقاييس المضيف حاليا.
لا يمكنك حاليا تشغيل مشروع التطبيق محليا باستخدام Core Tools عندما يكون لديك OpenTelemetry ممكن في المضيف. تحتاج حاليا إلى نشر التعليمات البرمجية الخاصة بك إلى Azure للتحقق من صحة التحديثات المتعلقة ب OpenTelemetry.
في هذا الوقت، يتم دعم مشغل HTTP والمشغلات المستندة إلى Azure SDK فقط مع مخرجات OpenTelemetry.