تمكين Azure Monitor OpenTelemetry Exporter لتطبيقات .NET و Node.js و Python (معاينة)

توضح هذه المقالة كيفية تمكين وتكوين عرض معاينة Azure Monitor المستند إلى OpenTelemetry. بعد الانتهاء من الإرشادات الواردة في هذه المقالة، ستتمكن من إرسال آثار OpenTelemetry إلى تطبيق Azure Monitor Insights. لمعرفة المزيد حول OpenTelemetry، راجع نظرة عامة على OpenTelemetry أو الأسئلة المتداولة حول OpenTelemetry.

هام

Azure Monitor OpenTelemetry Exporter لتطبيقات .NET و Node.js و Python قيد المعاينة حاليا. للحصول على الشروط القانونية التي تنطبق على ميزات Azure الموجودة في الإصدار التجريبي، أو المعاينة، أو التي لم يتم إصدارها بعد في التوفر العام، راجع شروط الاستخدام التكميلية لمعاينات Microsoft Azure.

قيود إصدار المعاينة

فكر بعناية فيما إذا كانت هذه المعاينة مناسبة لك. وهو يتيح التتبع الموزع فقطويستثني:

إذا كنت بحاجة إلى تجربة كاملة الميزات، فاستخدم Insights التطبيقات الموجودة ASP.NET أو ASP.NET Core SDK حتى ينضج العرض المستند إلى OpenTelemetry.

الشروع في العمل

اتبع الخطوات الواردة في هذا القسم لتصحيح طلبك باستخدام OpenTelemetry.

المتطلبات الأساسية

  • تطبيق باستخدام إصدار مدعوم رسميا من .NET Core أو .NET Framework لا يقل عن .NET Framework 4.6.1

قم بتثبيت مكتبات العميل

تثبيت أحدث حزمة Azure.Monitor.OpenTelemetry.المصدر NuGet:

dotnet add package --prerelease Azure.Monitor.OpenTelemetry.Exporter 

إذا تلقيت خطأ مثل "لا توجد إصدارات متوفرة للحزمة Azure.Monitor.OpenTelemetry.Exporter" ، فمن المحتمل أن يكون ذلك بسبب أن إعداد مصادر حزمة NuGet مفقود. حاول تحديد المصدر باستخدام الخيار -s :

# Install the latest package with the NuGet package source specified.
dotnet add package --prerelease Azure.Monitor.OpenTelemetry.Exporter -s https://api.nuget.org/v3/index.json

مكّن Azure Monitor Application Insights

يوفر هذا القسم إرشادات توضح كيفية تمكين OpenTelemetry.

أضف تعليمة برمجية لتقرير عن حالة النظام OpenTelemetry

توضح التعليمة البرمجية التالية كيفية تمكين OpenTelemetry في تطبيق وحدة تحكم C # عن طريق إعداد OpenTelemetry TracerProvider. يجب أن يكون هذا الرمز في بدء تشغيل التطبيق. بالنسبة ASP.NET Core ، يتم ذلك عادة في ConfigureServices طريقة فئة التطبيقStartup. بالنسبة ASP.NET التطبيقات ، يتم ذلك عادة في Global.asax.cs.

using System.Diagnostics;
using Azure.Monitor.OpenTelemetry.Exporter;
using OpenTelemetry;
using OpenTelemetry.Trace;

public class Program
{
    private static readonly ActivitySource MyActivitySource = new ActivitySource(
        "OTel.AzureMonitor.Demo");

    public static void Main()
    {
        using var tracerProvider = Sdk.CreateTracerProviderBuilder()
            .AddSource("OTel.AzureMonitor.Demo")
            .AddAzureMonitorTraceExporter(o =>
            {
                o.ConnectionString = "<Your Connection String>";
            })
            .Build();

        using (var activity = MyActivitySource.StartActivity("TestActivity"))
        {
            activity?.SetTag("CustomTag1", "Value1");
            activity?.SetTag("CustomTag2", "Value2");
        }

        System.Console.WriteLine("Press Enter key to exit.");
        System.Console.ReadLine();
    }
}

ملاحظة

Activity تمثل الفئات والفئات ActivitySource من System.Diagnostics مساحة الاسم مفاهيم Span OpenTelemetry و Tracer، على التوالي. يمكنك إنشاء ActivitySource مباشرة باستخدام منشئه بدلا من استخدام TracerProvider. يجب أن تكون كل ActivitySource فئة متصلة بشكل TracerProvider صريح باستخدام AddSource(). وذلك لأن أجزاء من واجهة برمجة تطبيقات تتبع OpenTelemetry يتم دمجها مباشرة في وقت تشغيل .NET. لمعرفة المزيد، راجع مقدمة حول واجهة برمجة تطبيقات OpenTelemetry .NET Ttrace.

تلميح

أضف مكتبات الأجهزة إلى التجميع التلقائي للقياس عن بعد عبر الأطر والمكتبات الشائعة.

تعيين سلسلة اتصال Insights التطبيق

استبدل العنصر النائب <Your Connection String> في التعليمة البرمجية السابقة بسلسلة الاتصال من التطبيق Insights المورد.

Screenshot of the Application Insights connection string.

تأكيد أن البيانات تتدفق

قم بتشغيل التطبيق الخاص بك وافتح علامة التبويب "مورد Insights التطبيق" في مدخل Azure. قد يستغرق ظهور البيانات في البوابة الإلكترونية بضع دقائق.

ملاحظة

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

Screenshot of the Application Insights Overview tab with server requests and server response time highlighted.

هام

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

كجزء من استخدام أجهزة تطبيق رؤى، نقوم بجمع وإرسال بيانات التشخيص إلى Microsoft. تساعدنا هذه البيانات على تشغيل وتحسين تطبيق رؤى. لديك خيار تعطيل جمع البيانات غير الأساسية. لمعرفة المزيد، راجع Statsbeat في تطبيق Azure Insights.

تعيين اسم دور السحابة ومثيل دور السحابة

يمكنك تعيين اسم دور السحابة ومثيل دور السحابة عبر سمات الموارد . تقوم هذه الخطوة بتحديث اسم دور السحابة ومثيل دور السحابة من قيمهما الافتراضية إلى شيء منطقي لفريقك. ستظهر على خريطة التطبيق كاسم أسفل عقدة. يستخدم service.namespace اسم دور السحابة وسماته service.name ، على الرغم من أنه يعود إلى service.name ما إذا service.namespace لم يتم تعيينه. يستخدم مثيل دور مجموعة النظراء service.instance.id قيمة السمة.

// Setting role name and role instance
var resourceAttributes = new Dictionary<string, object> {
    { "service.name", "my-service" },
    { "service.namespace", "my-namespace" },
    { "service.instance.id", "my-instance" }};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
// Done setting role name and role instance

// Set ResourceBuilder on the provider.
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
        .SetResourceBuilder(resourceBuilder)
        .AddSource("OTel.AzureMonitor.Demo")
        .AddAzureMonitorTraceExporter(o =>
        {
            o.ConnectionString = "<Your Connection String>";
        })
        .Build();

للحصول على معلومات حول السمات القياسية للموارد، راجع الاتفاقيات الدلالية للموارد.

أخذ نماذج

يتم دعم أخذ العينات في OpenTelemetry، ولكنه غير مدعوم في مصدر OpenTelemetry لمراقبة Azure في الوقت الحالي.

تحذير

يؤدي تمكين أخذ العينات في OpenTelemetry إلى جعل المقاييس القياسية والمستندة إلى السجل غير دقيقة للغاية ، مما يؤثر سلبا على جميع تجارب Insights التطبيق. أيضا ، يؤدي تمكين أخذ العينات إلى جانب التطبيق الحالي Insights SDKs إلى آثار مكسورة.

مكتبات الأجهزة

يتم التحقق من صحة المكتبات التالية للعمل مع إصدار المعاينة.

تحذير

تعتمد مكتبات الأجهزة على مواصفات القياس المفتوح التجريبية. يتمثل التزام Microsoft بدعم المعاينة في التأكد من أن المكتبات التالية تصدر بيانات إلى تطبيق Azure Monitor Insights، ولكن من الممكن أن يؤدي كسر التغييرات أو التعيين التجريبي إلى حظر بعض عناصر البيانات.

HTTP

قاعدة البيانات

ملاحظة

يتضمن عرض المعاينة فقط الأجهزة التي تتعامل مع طلبات HTTP وقاعدة البيانات. لمعرفة المزيد، راجع الاتفاقيات الدلالية للقياس عن بعد المفتوح.

تعديل القياس عن بُعد

يشرح هذا القسم كيفية تعديل القياس عن بعد.

إضافة سمات النطاق

لإضافة سمات النطاق، استخدم إحدى الطريقتين التاليتين:

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

تلميح

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

إضافة خاصية مخصصة

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

  1. توفر العديد من مكتبات الأجهزة خيارا تثري. للحصول على إرشادات، راجع الملفات التمهيدية لمكتبات الأجهزة الفردية:

  2. استخدام معالج مخصص:

تلميح

أضف المعالج الموضح هنا قبل مصدر شاشة Azure.

using var tracerProvider = Sdk.CreateTracerProviderBuilder()
        .AddSource("OTel.AzureMonitor.Demo")
        .AddProcessor(new ActivityEnrichingProcessor())
        .AddAzureMonitorTraceExporter(o =>
        {
                o.ConnectionString = "<Your Connection String>"
        })
        .Build();

أضف ActivityEnrichingProcessor.cs إلى مشروعك باستخدام التعليمة البرمجية التالية:

using System.Diagnostics;
using OpenTelemetry;
using OpenTelemetry.Trace;

public class ActivityEnrichingProcessor : BaseProcessor<Activity>
{
    public override void OnEnd(Activity activity)
    {
        // The updated activity will be available to all processors which are called after this processor.
        activity.DisplayName = "Updated-" + activity.DisplayName;
        activity.SetTag("CustomDimension1", "Value1");
        activity.SetTag("CustomDimension2", "Value2");
    }
}

تعيين عنوان IP للمستخدم

يمكنك ملء حقل client_IP للطلبات عن طريق تعيين السمة http.client_ip على النطاق. يستخدم التطبيق Insights عنوان IP لإنشاء سمات موقع المستخدم ثم يتجاهله بشكل افتراضي.

استخدم مثال إضافة خاصية مخصصة، ولكن استبدل الأسطر التالية من التعليمات البرمجية في ActivityEnrichingProcessor.cs:

// only applicable in case of activity.Kind == Server
activity.SetTag("http.client_ip", "<IP Address>");

تصفية التتبع

يمكنك استخدام الطرق التالية لتصفية القياس عن بعد قبل أن يغادر التطبيق الخاص بك.

  1. توفر العديد من مكتبات الأجهزة خيارا تثري. للحصول على إرشادات، راجع الملفات التمهيدية لمكتبات الأجهزة الفردية:

  2. استخدام معالج مخصص:

    using var tracerProvider = Sdk.CreateTracerProviderBuilder()
            .AddSource("OTel.AzureMonitor.Demo")
            .AddProcessor(new ActivityFilteringProcessor())
            .AddAzureMonitorTraceExporter(o =>
            {
                    o.ConnectionString = "<Your Connection String>"
            })
            .Build();
    

    أضف ActivityFilteringProcessor.cs إلى مشروعك باستخدام التعليمة البرمجية التالية:

    using System.Diagnostics;
    using OpenTelemetry;
    using OpenTelemetry.Trace;
    
    public class ActivityFilteringProcessor : BaseProcessor<Activity>
    {
        public override void OnStart(Activity activity)
        {
            // prevents all exporters from exporting internal activities
            if (activity.Kind == ActivityKind.Internal)
            {
                activity.IsAllDataRequested = false;
            }
        }
    }
    
  3. إذا لم تتم إضافة مصدر معين بشكل صريح باستخدام AddSource("ActivitySourceName")، فلن يتم تصدير أي من الأنشطة التي تم إنشاؤها باستخدام هذا المصدر.

تمكين مصدر OTLP

قد ترغب في تمكين مصدر بروتوكول OpenTelemetry (OTLP) إلى جانب مصدر شاشة Azure من إرسال القياس عن بعد إلى موقعين.

ملاحظة

يتم عرض مصدر OTLP للراحة فقط. نحن لا ندعم رسميا مصدر OTLP أو أي مكونات أو تجارب طرف ثالث في اتجاه مجرى النهر. نقترح عليك فتح مشكلة مع OpenTelemetry-Collector لمشكلات OpenTelemetry خارج حدود دعم Azure.

  1. قم بتثبيت حزمة OpenTelemetry.Exporter.OpenTelemetryProtocol مع Azure.Monitor.OpenTelemetry.Exporter في مشروعك.

  2. أضف مقتطف التعليمات البرمجية التالي. يفترض هذا المثال أن لديك جامع OpenTelemetry مع تشغيل جهاز استقبال OTLP. للحصول على التفاصيل، راجع المثال على GitHub.

    // Sends data to Application Insights as well as OTLP
    using var tracerProvider = Sdk.CreateTracerProviderBuilder()
            .AddSource("OTel.AzureMonitor.Demo")
            .AddAzureMonitorTraceExporter(o =>
            {
                o.ConnectionString = "<Your Connection String>"
            })
            .AddOtlpExporter()
            .Build();
    

استكشاف الأخطاء وإصلاحها

يوفر هذا القسم تعليمات حول استكشاف الأخطاء وإصلاحها.

تمكين التسجيل التشخيصي

يستخدم مصدر مراقبة Azure EventSource لتسجيل الدخول الداخلي الخاص به. تتوفر سجلات المصدر لأي EventListener عن طريق الاشتراك في المصدر المسمى OpenTelemetry-AzureMonitor-Exporter. للحصول على خطوات استكشاف الأخطاء وإصلاحها، راجع استكشاف أخطاء OpenTelemetry وإصلاحها.

المشكلات المعروفة

تتضمن المشكلات المعروفة لمصدري القياس المفتوح لمراقبة Azure ما يلي:

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

الدعم

للحصول على الدعم:

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

بالنسبة إلى مشكلات القياس عن بُعد المفتوح، اتصل بمجتمع القياس عن بُعد المفتوح مباشرة.

ردود فعل القياس عن بُعد المفتوح

لتقديم ملاحظات:

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