مشاركة عبر


استخدام 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 الهدف:

  1. قم بتشغيل هذه الأوامر لتثبيت التجميعات المطلوبة في تطبيقك:

    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، أضف هذه using العبارة:

    using Azure.Monitor.OpenTelemetry.AspNetCore; 
    
  3. في ConfigureServices المفوض، أضف تكوين الخدمة هذا:

    services.AddOpenTelemetry()
    .UseFunctionsWorkerDefaults()
    .UseAzureMonitor();
    

    للتصدير إلى كل من نقطتي نهاية OpenTelemetry، قم باستدعاء كل من UseAzureMonitor و UseOtlpExporter.

تحسينات عامل Java غير متوفرة بعد ل OpenTelemetry، لذلك لا يوجد شيء لتكوينه في تعليمة Java البرمجية الخاصة بك.

  1. تثبيت حزم npm هذه في مشروعك:

    npm install @opentelemetry/api 
    npm install @opentelemetry/auto-instrumentations-node 
    npm install @azure/monitor-opentelemetry-exporter 
    npm install @azure/functions-opentelemetry-instrumentation
    
  1. أنشئ ملف تعليمة برمجية في مشروعك، وانسخ التعليمات البرمجية التالية والصقها في هذا الملف الجديد، واحفظ الملف باسم 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()],
    });
    
  2. قم بتحديث الحقل في main ملف package.json لتضمين هذا الملف الجديد src/index.js ، والذي قد يبدو كما يلي:

    "main": "src/{index.js,functions/*.js}"
    
  1. أنشئ ملف تعليمة برمجية في مشروعك، وانسخ التعليمات البرمجية التالية والصقها في هذا الملف الجديد، واحفظ الملف باسم 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()],
    });
    
  2. قم بتحديث الحقل في main ملف package.json لتضمين إخراج هذا الملف الجديد src/index.ts ، والذي قد يبدو كما يلي:

    "main": "dist/src/{index.js,functions/*.js}"
    

هام

إخراج OpenTelemetry إلى Application Insights من عامل اللغة غير مدعوم حاليا لتطبيقات PowerShell. قد تحتاج بدلا من ذلك إلى استخدام نقطة نهاية مصدر OTLP. عند تكوين المضيف لإخراج OpenTelemetry إلى Application Insights، لا تزال السجلات التي تم إنشاؤها بواسطة عملية عامل PowerShell تتم إعادة توجيهها، ولكن لا يتم دعم التتبع الموزع في هذا الوقت.

تنطبق هذه التعليمات فقط على مصدر OTLP:

  1. أضف إعداد تطبيق باسم OTEL_FUNCTIONS_WORKER_ENABLED بقيمة True.

  2. إنشاء مجلد على مستوى Modules التطبيق في جذر التطبيق وتشغيل الأمر التالي:

    Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
    

    يؤدي ذلك إلى تثبيت الوحدة النمطية المطلوبة AzureFunctions.PowerShell.OpenTelemetry.SDK مباشرة في تطبيقك. لا يمكنك استخدام الملف لتثبيت هذه التبعية requirements.psd1 تلقائيا لأن التبعيات المدارة غير مدعومة حاليا في معاينة خطة Flex Consumption.

  3. أضف هذه التعليمة البرمجية إلى ملف profile.ps1 الخاص بك:

    Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop 
    Initialize-FunctionsOpenTelemetry 
    
  1. أضف هذا الإدخال في الملف:requirements.txt

    azure.monitor.opentelemetry
    
  2. أضف هذه التعليمة البرمجية إلى 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.

مراقبة خطة استهلاك الفليكس لوظائفAzure