الترحيل من Node.js Application Insights SDK 2.X إلى Azure Monitor OpenTelemetry

يوفر هذا الدليل خيارين للترقية من Azure Monitor Application Insights Node.js SDK 2.X إلى OpenTelemetry.

  • قم بتثبيت Node.js Azure Monitor OpenTelemetry Distro.
    • إزالة التبعيات على واجهة برمجة تطبيقات Application Insights الكلاسيكية.
    • تعرف على واجهات برمجة تطبيقات ومصطلحات OpenTelemetry.
    • ضع نفسك لاستخدام كل ما يقدمه OpenTelemetry الآن وفي المستقبل.
  • الترقية إلى Node.js SDK 3.X.
    • تأجيل تغييرات التعليمات البرمجية مع الحفاظ على التوافق مع الأحداث والمقاييس المخصصة الموجودة.
    • الوصول إلى مكتبات أدوات OpenTelemetry الغنية.
    • الحفاظ على الأهلية لأحدث إصلاحات الأخطاء والأمان.
  1. اكتساب المعرفة المسبقة بواجهة برمجة تطبيقات OpenTelemetry JavaScript (API) وأداة تطوير البرامج (SDK).

  2. قم بإلغاء تثبيت التبعية applicationinsights من مشروعك.

    npm uninstall applicationinsights
    
  3. قم بإزالة تنفيذ SDK 2.X من التعليمات البرمجية الخاصة بك.

    إزالة جميع أدوات Application Insights من التعليمات البرمجية الخاصة بك. احذف أي أقسام حيث تتم تهيئة عميل Application Insights أو تعديله أو استدعاؤه.

  4. تمكين Application Insights باستخدام Azure Monitor OpenTelemetry Distro.

    هام

    قبل استيراد أي شيء آخر، useAzureMonitor يجب استدعاؤه. قد يكون هناك فقدان بيانات تتبع الاستخدام إذا تم استيراد مكتبات أخرى أولا. اتبع البدء في الإلحاق ب Azure Monitor OpenTelemetry Distro.

تغييرات وقيود Azure Monitor OpenTelemetry Distro

  • لا تتوفر واجهات برمجة التطبيقات من Application Insights SDK 2.X في Azure Monitor OpenTelemetry Distro. يمكنك الوصول إلى واجهات برمجة التطبيقات هذه من خلال مسار ترقية غير منكسر في Application Insights SDK 3.X.
  • تصفية التبعيات والسجلات والاستثناءات حسب اسم العملية غير مدعومة بعد.

التغييرات والقيود

تنطبق التغييرات والقيود التالية على مساري الترقية.

دعم إصدار Node.js

للحصول على إصدار من Node.js ليتم دعمه من قبل ApplicationInsights 3.X SDK، يجب أن يكون له دعم متداخل من كل من Azure SDK وOpenTelemetry. تحقق من أوقات تشغيل OpenTelemetry المدعومة للحصول على آخر التحديثات. لا يزال بإمكان المستخدمين على الإصدارات القديمة مثل العقدة 8، التي كانت مدعومة سابقا من قبل ApplicationInsights SDK، استخدام حلول OpenTelemetry ولكن يمكن أن يواجهوا سلوكا غير متوقع أو مفاجئ. يعتمد ApplicationInsights SDK أيضا على Azure SDK ل JS الذي لا يضمن الدعم لأي إصدارات Node.js وصلت إلى نهاية العمر الافتراضي. راجع نهج دعم Azure SDK for JS. للحصول على إصدار من Node.js ليتم دعمه من قبل ApplicationInsights 3.X SDK، يجب أن يكون له دعم متداخل من كل من Azure SDK وOpenTelemetry.

خيارات الإعداد

يوفر الإصدار 2.X من Application Insights SDK خيارات التكوين غير المتوفرة في Azure Monitor OpenTelemetry Distro أو في ترقية الإصدار الرئيسي إلى Application Insights SDK 3.X. للعثور على هذه التغييرات، إلى جانب الخيارات التي لا نزال ندعمها، راجع وثائق تكوين SDK.

مقاييس ممتدة

يتم دعم المقاييس الموسعة في Application Insights SDK 2.X؛ ومع ذلك، ينتهي دعم هذه المقاييس في كل من الإصدار 3.X من ApplicationInsights SDK وAzure Monitor OpenTelemetry Distro.

معالجات بيانات تتبع الاستخدام

بينما لا يدعم Azure Monitor OpenTelemetry Distro وApplication Insights SDK 3.X معالجات القياس عن بعد، فإنها تسمح لك بتمرير معالجات الامتداد وسجل السجل. لمزيد من المعلومات حول كيفية القيام بهذا، راجع مشروع Azure Monitor OpenTelemetry Distro.

يوضح هذا المثال ما يعادل إنشاء معالج بيانات تتبع الاستخدام وتطبيقه الذي يرفق خاصية مخصصة في Application Insights SDK 2.X.

const applicationInsights = require("applicationinsights");
applicationInsights.setup("YOUR_CONNECTION_STRING");
applicationInsights.defaultClient.addTelemetryProcessor(addCustomProperty);
applicationInsights.start();

function addCustomProperty(envelope: EnvelopeTelemetry) {
    const data = envelope.data.baseData;
    if (data?.properties) {
        data.properties.customProperty = "Custom Property Value";
    }
    return true;
}

يوضح هذا المثال كيفية تعديل تطبيق Azure Monitor OpenTelemetry Distro لتمرير SpanProcessor إلى تكوين توزيعة.

import { Context, Span} from "@opentelemetry/api";
import { ReadableSpan, SpanProcessor } from "@opentelemetry/sdk-trace-base";
const { useAzureMonitor } = require("@azure/monitor-opentelemetry");

class SpanEnrichingProcessor implements SpanProcessor {
    forceFlush(): Promise<void> {
        return Promise.resolve();
    }
    onStart(span: Span, parentContext: Context): void {
        return;
    }
    onEnd(span: ReadableSpan): void {
        span.attributes["custom-attribute"] = "custom-value";
    }
    shutdown(): Promise<void> {
        return Promise.resolve();
    }
}

const options = {
    azureMonitorExporterOptions: {
        connectionString: "YOUR_CONNECTION_STRING"
    },
    spanProcessors: [new SpanEnrichingProcessor()],
};
useAzureMonitor(options);