قنوات بيانات تتبع الاستخدام في Application Insights

قنوات بيانات تتبع الاستخدام هي جزء لا يتجزأ من Application Insights SDKs. وهي تدير التخزين المؤقت ونقل بيانات تتبع الاستخدام إلى خدمة Application Insights. تحتوي إصدارات .NET و.NET Core من SDKs على قناتين مدمجتين لبيانات تتبع الاستخدام:InMemoryChannel وServerTelemetryChannel. تصف هذه المقالة كل قناة وتوضح كيفية تخصيص سلوك القناة.

إشعار

تعتمد الوثائق التالية على واجهة برمجة تطبيقات Application Insights الكلاسيكية. الخطة طويلة الأجل ل Application Insights هي جمع البيانات باستخدام OpenTelemetry. لمزيد من المعلومات، راجع تمكين Azure Monitor OpenTelemetry لتطبيقات .NET Node.js وPython وJava.

ما المقصود بقنوات بيانات تتبع الاستخدام؟

تُعتبر قنوات بيانات تتبع الاستخدام مسؤولة عن تخزين عناصر بيانات تتبع الاستخدام مؤقتًا في خدمة Application Insights، حيث يتم تخزينها للاستعلام والتحليل. قناة بيانات تتبع الاستخدام عبارة عن أي فئة تقوم بتطبيق Microsoft.ApplicationInsights.ITelemetryChannel الواجهة.

Send(ITelemetry item)تسمى طريقة قناة بيانات تتبع الاستخدام بعد استدعاء كافة مهيئات بيانات تتبع الاستخدام ومعالجات بيانات تتبع الاستخدام. لذلك، لن تصل أي عناصر يتم إسقاطها بواسطة معالج بيانات تتبع الاستخدام إلى القناة. Send() لا يرسل الأسلوب عادة العناصر إلى النهاية الخلفية على الفور. عادة ما يخزنها مؤقتا في الذاكرة ويرسلها على دفعات لنقل فعال.

يحتوي Live Metrics Stream أيضًا على قناة مخصصة تقوم ببث البث المباشر لبيانات تتبع الاستخدام. هذه القناة مستقلة عن قناة بيانات تتبع الاستخدام العادية، ولا تنطبق هذه الوثيقة عليها.

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

تُرسل حزم Application Insights .NET و.NET Core SDKs مع قناتين مدمجتين:

  • InMemoryChannel: قناة خفيفة الوزن تقوم بتخزين العناصر مؤقتًا في الذاكرة حتى يتم إرسالها. تُخزن العناصر مؤقتًا في الذاكرة وتُمسح مرة واحدة كل 30 ثانية، أو كلما تم تخزين 500 عنصر. توفر هذه القناة ضمانات موثوقية ضئيلة لأنها لا تعيد محاولة إرسال بيانات تتبع الاستخدام بعد حدوث فشل. لا تحتفظ هذه القناة أيضا بالعناصر على القرص. لذلك يتم فقدان أي عناصر غير مصدقة بشكل دائم عند إيقاف تشغيل التطبيق، سواء كان رشيقا أم لا. تنفذ هذه القناة أسلوبFlush() الذي يمكن استخدامه لفرض تدفق أي عناصر بيانات تتبع الاستخدام في الذاكرة بشكل متزامن. هذه القناة مناسبة تمامًا للتطبيقات قصيرة التشغيل حيث يكون التدفق المتزامن مثاليًا.

    هذه القناة جزء من حزمة Microsoft.ApplicationInsights NuGet الكبيرة وهي القناة الافتراضية التي يستخدم SDK عند تكوين أي شيء آخر.

  • ServerTelemetryChannel: قناة أكثر تقدمًا لديها نهج إعادة المحاولة والقدرة على تخزين البيانات على قرص محلي. تُعيد هذه القناة محاولة إرسال بيانات تتبع الاستخدام في حالة حدوث أخطاء مؤقتة. تستخدم هذه القناة أيضًا موقع تخزين القرص المحلي للاحتفاظ بالعناصر الموجودة على القرص أثناء انقطاع الشبكة أو وحدات التخزين العالية لبيانات تتبع الاستخدام. وبسبب آليات إعادة المحاولة هذه وتخزين القرص المحلي، تعتبر هذه القناة أكثر موثوقية. نوصي به لجميع سيناريوهات الإنتاج. هذه القناة هي القناة الافتراضية للتطبيقات الأساسية ASP.NETو ASP.NET التي تم تكوينها طبقًا للوثائق الرسمية. تم تحسين هذه القناة لسيناريوهات الخادم مع العمليات طويلة الأمد. Flush()تكون الطريقة التي تنفذها هذه القناة غير متزامنة.

    تُرسل هذه القناة كحزمة Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel NuGet ويتم الحصول عليها تلقائياً عند استخدام حزمة Microsoft.ApplicationInsights.Web أو Microsoft.ApplicationInsights.AspNetCore NuGet.

كوّن قناة بيانات تتبع الاستخدام

يمكنك تكوين قناة بيانات تتبع الاستخدام عن طريق تعيينها إلى تكوين بيانات تتبع الاستخدام النشط. بالنسبة للتطبيقات ASP.NET، يتضمن التكوين تعيين مثيل قناة بيانات تتبع الاستخدام إلى TelemetryConfiguration.Active أو عن طريق تعديل ApplicationInsights.config. بالنسبة للتطبيقات الأساسية ASP.NET، يتضمن التكوين إضافة القناة إلى حاوية إدخال التبعية.

تعرض الأقسام التالية أمثلة لتكوين StorageFolder الإعداد للقناة في أنواع تطبيقات مختلفة. StorageFolder إنه إعداد واحد فقط من الإعدادات القابلة للتكوين. للحصول على القائمة الكاملة لإعدادات التكوين، راجع قسم الإعدادات القابلة للتكوين في القنوات لاحقا في هذه المقالة.

يتم التكوين باستخدام ApplicationInsights.config للتطبيقات ASP.NET

يعرض المقطع التالي من ApplicationInsights.configالقناةServerTelemetryChannel التي تم تكوينها مع مجموعةStorageFolder في موقع مخصص:

    <TelemetrySinks>
        <Add Name="default">
            <TelemetryProcessors>
                <!-- Telemetry processors omitted for brevity  -->
            </TelemetryProcessors>
            <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
                <StorageFolder>d:\temp\applicationinsights</StorageFolder>
            </TelemetryChannel>
        </Add>
    </TelemetrySinks>

التّكوين في التعليمة البرمجية لتطبيقات ASP.NET

التعليمات البرمجية التالية بإعداد مثيل ServerTelemetryChannel مع StorageFolder تعيين إلى موقع مخصص. أضف هذه التعليمة البرمجية في بداية التطبيق، عادة في Application_Start() الأسلوب في Global.aspx.cs.

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
protected void Application_Start()
{
    var serverTelemetryChannel = new ServerTelemetryChannel();
    serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
    serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
    TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
}

التكوين في التعليمات البرمجية لتطبيقات ASP.NET الأساسية

ومن ثَم غيّر الأسلوبConfigureServices للفئةStartup.cs كما يلي:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;

public void ConfigureServices(IServiceCollection services)
{
    // This sets up ServerTelemetryChannel with StorageFolder set to a custom location.
    services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel() {StorageFolder = @"d:\temp\applicationinsights" });

    services.AddApplicationInsightsTelemetry();
}

هام

تكوين القناة باستخدام TelemetryConfiguration.Active غير مدعوم لتطبيقات ASP.NET Core.

التكوين في التعليمات البرمجية لتطبيقات وحدة التحكم الأساسية لـ.NET/.NET الأساسية

بالنسبة لتطبيقات وحدة التحكم، يتم تحديد نفس التعليمات البرمجية لكل من .NET و.NET Core:

var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;

التفاصيل التشغيلية لقناة بيانات تتبع الاستخدام الخاصة بالخادم

ServerTelemetryChannel تخزين العناصر التي تصل في المخزن المؤقت في الذاكرة. يتم تسلسل العناصر وضغطها وتخزينها في Transmission مثيل مرة كل 30 ثانية، أو عند تخزين 500 عنصر مؤقتًا. يحتوي مثيل واحد Transmission على ما يصل إلى 500 عنصر ويمثل مجموعة من بيانات تتبع الاستخدام التي يتم إرسالها عبر استدعاء HTTPS واحد إلى خدمة Application Insights.

بشكل افتراضي، يُمكن إرسال 10 مثيلات كحد أقصى Transmission بالتوازي. إذا كان القياس عن بُعد يصل بمعدلات أسرع أو إذا كانت الشبكة أو Application Insights لواجهة الخلفية Transmission بطيئة، يتم تخزين المثيلات في الذاكرة. تبلغ السعة الافتراضية لهذا المخزن المؤقت في الذاكرة Transmission 5 ميغابايت. عند تجاوز سعة الذاكرة، Transmission تُخزن المثيلات على القرص المحلي بحد أقصى 50 ميغابايت.

Transmission تُخزن مثيلات على القرص المحلي أيضًا عندما تكون هناك مشاكل في الشبكة. لا تنجو إلا تلك العناصر المخزنة على قرص محلي من تعطل التطبيق. تُرسل كلما بدأ التطبيق مرة أخرى. إذا استمرت مشكلات الشبكة، ServerTelemetryChannel فسيستخدم منطق التراجع الأسي الذي يتراوح من 10 ثوان إلى ساعة واحدة قبل إعادة المحاولة لإرسال بيانات تتبع الاستخدام.

إعدادات قابلة للتكوين في القنوات

للحصول على القائمة الكاملة للإعدادات القابلة للتكوين لكل قناة، انظر:

فيما يلي الإعدادات الأكثر استخدامًا ServerTelemetryChannel لـ:

  • MaxTransmissionBufferCapacity: يكون الحد الأقصى لكمية الذاكرة التي تستخدمها القناة لنقل المخزن المؤقت في الذاكرة بالبايت. عند الوصول إلى هذه السعة، تُخزن عناصر جديدة مباشرة إلى القرص المحلي. تبلغ القيمة الافتراضية 5 ميغابايت. يؤدي تعيين قيمة أعلى إلى استخدام قرص أقل، ولكن تذكر أنه سيتم فقدان العناصر الموجودة في الذاكرة إذا تعطل التطبيق.
  • MaxTransmissionSenderCapacity: الحد الأقصى لعدد Transmission المثيلات التي سيتم إرسالها إلى Application Insights في نفس الوقت. القيمة الافتراضية هي 10. يمكن تكوين هذا الإعداد إلى عدد أعلى، وهو ما نوصي به عند إنشاء حجم كبير من بيانات تتبع الاستخدام. عادةً ما يحدث ارتفاع مستوى الصوت أثناء اختبار التحميل أو عند إيقاف تشغيل أخذ العينات.
  • StorageFolder: المجلد الذي تستخدمه القناة لتخزين العناصر على القرص حسب الحاجة. في Windows، يتم استخدام ٪LOCALAPPDATA٪ أو ٪TEMP٪ إذا لم يُحدد مسار آخر بشكل صريح. في بيئات أخرى غير Windows، يجب تحديد موقع صالح أو لن يتم تخزين بيانات تتبع الاستخدام إلى القرص المحلي.

ما هي القناة التي يَجب أن أستخدمها؟

نوصي لمعظم ServerTelemetryChannel سيناريوهات الإنتاج التي تتضمن تطبيقات طويلة الأمد. Flush() الأسلوب الذي يتم تنفيذه بواسطة ServerTelemetryChannel غير متزامن. كما أنه لا يضمن إرسال جميع العناصر المعلقة من الذاكرة أو القرص.

إذا كنت تستخدم هذه القناة في سيناريوهات حيث يكون التطبيق على وشك إيقاف التشغيل، فقم بإدخال بعض التأخير بعد استدعاء Flush(). لا يمكن التنبؤ بالكمية الدقيقة للتأخير الذي قد تحتاج إليه. يعتمد ذلك على عوامل مثل عدد العناصر أو Transmission المثيلات الموجودة في الذاكرة، وعدد العناصر الموجودة على القرص، وعدد العناصر التي تُرسل إلى واجهة الخلفية، وما إذا كانت القناة في منتصف سيناريوهات التراجع الأسي أم لا.

إذا كنت بحاجة إلى إجراء تدفق متزامن، فاستخدم InMemoryChannel.

الأسئلة الشائعة

يقدم هذا القسم إجابات للأسئلة الشائعة.

هل تضمن قناة Application Insights تسليم بيانات تتبع الاستخدام؟ إذا لم يكن الأمر كذلك، فما هي السيناريوهات التي يمكن أن تُفقد فيها بيانات تتبع الاستخدام؟

الجواب بإيجاز هو أن أيًا من القنوات المدمجة لا تقدم ضمانًا من نوع المعاملة لتسليم بيانات تتبع الاستخدام إلى واجهة الخلفية. يُعتبر ServerTelemetryChannel أكثر تقدمًا مقارنةً بـ InMemoryChannel التسليم الموثوق به، ولكنها أيضًا تبذل قصارى جهدها فقط لإرسال بيانات تتبع الاستخدام. لا يزال من الممكن فقدان بيانات تتبع الاستخدام في عدة حالات، بما في ذلك هذه السيناريوهات الشائعة:

  • تُفقد العناصر في الذاكرة عند تعطل التطبيق.
  • تُفقد بيانات تتبع الاستخدام خلال مشاكل الشبكة التي تدوم لفترات طويلة. تُخزن بيانات تتبع الاستخدام في القرص المحلي أثناء انقطاع الشبكة أو عند حدوث مشاكل في واجهة خلفية Application Insights. ومع ذلك، يتم تجاهل العناصر التي مر عليها أكثر من 48 ساعة.
  • مواقع القرص الافتراضية لتخزين بيانات تتبع الاستخدام في Windows هي ٪LOCALAPPDATA٪ أو ٪TEMP٪. عادةً ما تكون هذه المواقع محلية للجهاز. إذا انتقل التطبيق فعليًا من موقع إلى آخر، فسيتم فقد أي بيانات تتبع استخدام مخزنة في الموقع الأصلي.
  • في تطبيقات ويب Azure على Windows، يَكون الموقع الافتراضي لتخزين القرص هو D:\local\LocalAppData. هذا الموقع غير ثابت. يتم مسحه في عمليات إعادة تشغيل التطبيق، والتوسيع، وغيرها من العمليات من هذا القبيل، ما يؤدي إلى فقدان أي بيانات تتبع الاستخدام مخزنة هناك. يمكنك تجاوز القيمة الافتراضية وتحديد التخزين إلى موقع ثابت مثل D:\home. ومع ذلك، تُقدم هذه المواقع الدائمة عن طريق التخزين عن بُعد، وبالتالي يمكن أن تكون بطيئة.

على الرغم من أنه أقل احتمالا، فمن الممكن أيضا أن تتسبب القناة في تكرار عناصر بيانات تتبع الاستخدام. يحدث هذا السلوك عند ServerTelemetryChannel إعادة المحاولة بسبب فشل الشبكة أو انتهاء المهلة، عند تسليم بيانات تتبع الاستخدام إلى النهاية الخلفية، ولكن تم فقدان الاستجابة بسبب مشكلات في الشبكة أو كان هناك مهلة.

هل تعمل قناة بيانات تتبع الاستخدام الخاصة بالخادم على أنظمة أخرى غير Windows؟

على الرغم من أن اسم الحزمة ومساحة الاسم الخاصة به يتضمن "WindowsServer"، تُعتمد هذه القناة على أنظمة أخرى غير Windows، مع الاستثناء التالي. على أنظمة أخرى غير Windows، لا تُنشئ القناة مجلد تخزين محلي بشكل افتراضي. يجب عليك إنشاء مجلد تخزين محلي وتكوين القناة لاستخدامه. بَعد تكوين التخزين المحلي، تعمل القناة بنفس الطريقة على كافة الأنظمة.

إشعار

مع الإصدار 2.15.0-beta3 والإصدارات الأحدث، يتم الآن إنشاء التخزين المحلي تلقائيا ل Linux وMac وWindows. بالنسبة للأنظمة غير Windows، ستقوم SDK تلقائيا بإنشاء مجلد تخزين محلي استنادا إلى المنطق التالي:

  • ${TMPDIR}: إذا ${TMPDIR} تم تعيين متغير البيئة، يتم استخدام هذا الموقع.
  • /var/tmp: إذا لم يكن الموقع السابق موجودا، فإننا نحاول /var/tmp.
  • /tmp: إذا لم يكن الموقعان السابقان موجودين، فإننا نحاول tmp.
  • إذا لم يكن أي من هذه المواقع موجودا، فلن يتم إنشاء التخزين المحلي ولا يزال التكوين اليدوي مطلوبا. للحصول على تفاصيل التنفيذ الكاملة، راجع مستودع GitHub هذا.

هل يقوم SDK بإنشاء تخزين محلي مؤقت؟ هل البيانات مُشفرة في المخزن؟

يقوم SDK بتخزين عناصر بيانات تتبع الاستخدام في موقع التخزين المحلي أثناء مشاكل الشبكة أو أثناء التحكم بالنطاق الترددي. هذه البيانات غير مشفرة محليًا.

بالنسبة لأنظمة Windows، يقوم SDK تلقائيا بإنشاء مجلد محلي مؤقت في الدليل ٪TEMP٪ أو ٪LOCALAPPDATA٪ ويقيد الوصول إلى المسؤولين والمستخدم الحالي فقط.

بالنسبة للأنظمة الأخرى غير Windows، لا يتم إنشاء أي تخزين محلي تلقائيا بواسطة SDK، لذلك لا يتم تخزين أي بيانات محليا بشكل افتراضي.

إشعار

مع الإصدار 2.15.0-beta3 والإصدارات الأحدث، يتم الآن إنشاء التخزين المحلي تلقائيا ل Linux وMac وWindows.

يمكنك إنشاء دليل تخزين بنفسك وتَكوين القناة لاستخدامه. في هذه الحالة، أنتَ مسؤول عن ضمان تأمين الدليل. تعرّف على المزيد حول الاحتفاظ بالبيانات والخصوصية.

عدة تطوير البرامج SDK مفتوحة المصدر

على غرار كل SDK لـ Application Insights، توجد قنوات مفتوحة المصدر. اقرأ واساهم في التعليمات البرمجية أو الإبلاغ عن المشاكل في مستودع GitHub الرسمي.

الخطوات التالية