تجميع عدّادات الأداء لخدمة Azure Cloud (كلاسيك)

هام

تم الآن إهمال Cloud Services (كلاسيكي) للعملاء الجدد وسيتم استبعادها في 31 أغسطس 2024 لجميع العملاء. ينبغي أن تستخدم عمليات النشر الجديدة نموذج النشر الجديد القائم على Azure Resource Manager ‏‏Azure Cloud Services (الدعم الموسع) .

توفر عدّادات الأداء طريقة لتتبع مدى جودة أداء التطبيق والمضيف. يوفر Windows Server العديد من عدّادات الأداء المختلفة المتعلقة بالأجهزة والتطبيقات ونظام التشغيل والمزيد. من خلال تجميع عدّادات الأداء وإرسالها إلى Azure، يمكنك تحليل هذه المعلومات للمساعدة في اتخاذ قرارات أفضل.

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

يتكون عدّاد الأداء من جزأين، اسم مجموعة (يُعرف أيضاً باسم فئة) وعدّاد واحد أو أكثر. يمكنك استخدام PowerShell للحصول على قائمة بعدّادات الأداء المتوفرة:

Get-Counter -ListSet * | Select-Object CounterSetName, Paths | Sort-Object CounterSetName

CounterSetName                                  Paths
--------------                                  -----
.NET CLR Data                                   {\.NET CLR Data(*)\SqlClient...
.NET CLR Exceptions                             {\.NET CLR Exceptions(*)\# o...
.NET CLR Interop                                {\.NET CLR Interop(*)\# of C...
.NET CLR Jit                                    {\.NET CLR Jit(*)\# of Metho...
.NET Data Provider for Oracle                   {\.NET Data Provider for Ora...
.NET Data Provider for SqlServer                {\.NET Data Provider for Sql...
.NET Memory Cache 4.0                           {\.NET Memory Cache 4.0(*)\C...
AppV Client Streamed Data Percentage            {\AppV Client Streamed Data ...
ASP.NET                                         {\ASP.NET\Application Restar...
ASP.NET Apps v4.0.30319                         {\ASP.NET Apps v4.0.30319(*)...
ASP.NET State Service                           {\ASP.NET State Service\Stat...
ASP.NET v2.0.50727                              {\ASP.NET v2.0.50727\Applica...
ASP.NET v4.0.30319                              {\ASP.NET v4.0.30319\Applica...
Authorization Manager Applications              {\Authorization Manager Appl...

#... results cut to save space ...

تمثل الخاصية CounterSetName مجموعة (أو فئة)، وهي مؤشر جيد لما ترتبط به عدّادات الأداء. تمثل الخاصية Paths مجموعة من العدّادات لمجموعة. يمكنك أيضاً الحصول على الخاصية Description للمعرفة المزيد من المعلومات عن مجموعة العدّادات.

للحصول على جميع عدّادات المجموعة، استخدم القيمة CounterSetName ووسّع المجموعة Paths. يعد كل عنصر مسار عدّاد يمكنك الاستعلام عنه. على سبيل المثال، للحصول على العدّادات المتوفرة ذات الصلة بالمجموعة Processor، وسّع المجموعة Paths:

Get-Counter -ListSet * | Where-Object CounterSetName -eq "Processor" | Select -ExpandProperty Paths

\Processor(*)\% Processor Time
\Processor(*)\% User Time
\Processor(*)\% Privileged Time
\Processor(*)\Interrupts/sec
\Processor(*)\% DPC Time
\Processor(*)\% Interrupt Time
\Processor(*)\DPCs Queued/sec
\Processor(*)\DPC Rate
\Processor(*)\% Idle Time
\Processor(*)\% C1 Time
\Processor(*)\% C2 Time
\Processor(*)\% C3 Time
\Processor(*)\C1 Transitions/sec
\Processor(*)\C2 Transitions/sec
\Processor(*)\C3 Transitions/sec

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

تجميع عدّاد أداء

يمكن إضافة عدّاد أداء إلى خدمة السحابة إما لتشخيصات Azure أو Application Insights.

Application Insights

يتيح لك Azure Application Insights لخدمات Cloud بتحديد عدّادات الأداء التي تريد تجميعها. بعد إضافة Application Insights إلى مشروعك، يتم إضافة ملف تكوين يسمى ApplicationInsights.config إلى مشروع Visual Studio التابع لك. يحدد ملف التكوين هذا نوع المعلومات التي يجمعها Application Insights ويرسلها إلى Azure.

فتح الملف ApplicationInsights.config والعثور على العنصر ApplicationInsights>TelemetryModules. يحدد كل <Add> عنصر تابع نوعاً من بيانات تتبع الاستخدام لتجميعه، جنباً إلى جنب مع تكوينه. نوع وحدة قياس الأداء لعدّاد الأداء هو Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector. في حال تحديد هذا العنصر مسبقاً، لا تضفه مرة أخرى. يتم تحديد كل عدّاد أداء يتم تجميعه ضمن عقدة تسمى <Counters>. فيما يلي مثال يجمع عدّادات أداء محرك الأقراص:

<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">

  <TelemetryModules>

    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
      <Counters>
        <Add PerformanceCounter="\LogicalDisk(C:)\Disk Write Bytes/sec" ReportAs="Disk write (C:)" />
        <Add PerformanceCounter="\LogicalDisk(C:)\Disk Read Bytes/sec" ReportAs="Disk read (C:)" />
      </Counters>
    </Add>

  </TelemetryModules>

<!-- ... cut to save space ... -->

يتم تمثيل كل عداد أداء كعنصر <Add> ضمن <Counters>. تحدد السمة PerformanceCounter عداد الأداء المطلوب تجميعه. السمة ReportAs هي العنوان الذي يتم عرضه في مدخل Microsoft Azure لعدّاد الأداء. يتم وضع أي عداد أداء تقوم بتجميعه في فئة تسمى مخصص في المدخل. بخلاف تشخيصات Azure، لا يمكنك ضبط الفاصل الزمني الذي يتم تجميع عدّادات الأداء هذه فيه وإرسالها إلى Azure. باستخدام Application Insights، يتم تجميع عدادات الأداء وإرسالها كل دقيقة.

يجمّع Application Insights عدّادات الأداء التالية تلقائياً:

  • مدة \Process(??APP_WIN32_PROC??)% Processor
  • /الذاكرة/ وحدات البايت المتوفرة
  • .NET CLR Exceptions(??APP_CLR_PROC??)# عدد الاستثناءات الناتجة في الثانية
  • \Process(??APP_WIN32_PROC??)\Private Bytes
  • \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
  • مدة \Processor(_Total)% Processor Time

لمزيد من المعلومات، راجع عدادات أداء النظام في Application Insights وApplication Insights لخدمات Azure Cloud.

تشخيصات Azure

هام

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

يتيح لك ملحق تشخيصات Azure لخدمات Cloud بتحديد عدّادات الأداء التي تريد تجميعها. لإعداد تشخيصات Azure، راجع نظرة عامة على مراقبة خدمة Cloud.

يتم تحديد عدّادات الأداء التي تريد تجميعها في الملف diagnostics.wadcfgx. افتح هذا الملف (المحدد لكل دور) في Visual Studio وابحث عن العنصر DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. أضف عنصر PerformanceCounterConfiguration جديد كتابع. هذا العنصر له سمتان: counterSpecifier وsampleRate. تحدد السمة counterSpecifier مجموعة عدّاد أداء النظام (الموضحة في القسم السابق) المراد تجميعها. تشير القيمة sampleRate إلى عدد مرات استقصاء هذه القيمة. بشكل عام، يتم نقل جميع عدّادات الأداء إلى Azure وفقاً لقيمة سمة PerformanceCountersالعنصرscheduledTransferPeriod الأصلي.

لمزيد من المعلومات عن PerformanceCounters عنصر المخطط، راجع مخطط تشخيصات Azure.

تستخدم الفترة المحددة بواسطة السمة sampleRate نوع بيانات مدة XML للإشارة إلى عدد مرات استقصاء عدّاد الأداء. في المثال أدناه، يتم ضبط المعدل إلى PT3M، وهو ما يعني [P]eriod[T]ime[3][M]inutes: كل ثلاث دقائق.

لمزيد من المعلومات عن كيفية تحديد sampleRate وscheduledTransferPeriod، راجع قسم نوع بيانات المدة في البرنامج التعليمي أنواع التاريخ والوقت بلغة XML في شبكة الإنترنت العالمية.

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration  xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig>
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096">

        <!-- ... cut to save space ... -->

        <PerformanceCounters scheduledTransferPeriod="PT1M">
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />

          <!-- This is a new perf counter which will track the C: disk read activity in bytes per second, every minute -->
          <PerformanceCounterConfiguration counterSpecifier="\LogicalDisk(C:)\Disk Read Bytes/sec" sampleRate="PT1M" />

        </PerformanceCounters>
      </DiagnosticMonitorConfiguration>
    </WadCfg>
    
    <!-- ... cut to save space ... -->

  </PublicConfig>
</DiagnosticsConfiguration>

إنشاء عدّاد perf جديد

يمكن إنشاء عدّاد أداء جديد واستخدامه بواسطة التعليمات البرمجية. يجب أن تكون التعليمة البرمجية التابعة لك التي تنشئ عدّاد أداء جديد تعمل بشكل غير مقيد، وإلا فإنها ستفشل. يمكن أن تنشئ التعليمة البرمجية OnStart لبدء تشغيل الخدمة السحابية عداد الأداء، ما يتطلب منك تشغيل الدور في سياق غير مقيد. أو يمكنك إنشاء مهمة بدء تشغيل تعمل بشكل غير مقيد وتنشئ عدّاد الأداء. لمزيد من المعلومات، راجع كيفية تكوين مهام بدء التشغيل لخدمة سحابة وتشغيلها.

لتكوين دورك للعمل بشكل غير مقيد، أضف العنصر <Runtime> إلى الملف .csdef.

<ServiceDefinition name="CloudServiceLoadTesting" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WorkerRole name="WorkerRoleWithSBQueue1" vmsize="Large">

    <!-- ... cut to save space ... -->

    <Runtime executionContext="elevated">
      
    </Runtime>

    <!-- ... cut to save space ... -->

  </WorkerRole>
</ServiceDefinition>

يمكنك إنشاء عدّاد أداء جديد وتسجيله ببضعة أسطر من التعليمات البرمجية. استخدم التحميل الزائد لأسلوب System.Diagnostics.PerformanceCounterCategory.Create التي تنشئ كلاً من الفئة والعدّاد. تتحقق التعليمة البرمجية التالية أولاً مما إذا كانت الفئة موجودة، وإذا كانت مفقودة، فإنها تنشئ كلاً من الفئة والعدّاد.

using System.Diagnostics;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WorkerRoleWithSBQueue1
{
    public class WorkerRole : RoleEntryPoint
    {
        // Perf counter variable representing times service was used.
        private PerformanceCounter counterServiceUsed;

        public override bool OnStart()
        {
            // ... Other startup code here ...

            // Define the category and counter names.
            string perfCounterCatName = "MyService";
            string perfCounterName = "Times Used";

            // Create the counter if needed. Our counter category only has a single counter.
            // Both the category and counter are created in the same method call.
            if (!PerformanceCounterCategory.Exists(perfCounterCatName))
            {
                PerformanceCounterCategory.Create(perfCounterCatName, "Collects information about the cloud service.", 
                                                  PerformanceCounterCategoryType.SingleInstance, 
                                                  perfCounterName, "How many times the cloud service was used.");
            }

            // Get reference to our counter
            counterServiceUsed = new PerformanceCounter(perfCounterCatName, perfCounterName);
            counterServiceUsed.ReadOnly = false;
            
            return base.OnStart();
        }

        // ... cut class code to save space
    }
}

عندما تريد استخدام العدّاد، استدعِ الأسلوب Increment أو IncrementBy.

// Increase the counter by 1
counterServiceUsed.Increment();

الآن بعد أن يستخدم تطبيقك العدّاد المخصص التابع لك، تحتاج إلى تكوين تشخيصات Azure أو Application Insights لتعقب العدّاد.

Application Insights

كما ذكر سابقاً، يتم تحديد عدّادات أداء Application Insights في الملف ApplicationInsights.config. افتح الملف ApplicationInsights.config واعثر على العنصر ApplicationInsights>TelemetryModules>وعنصر>العدّادات. أنشئ عنصر تابع <Add> واضبط السمة PerformanceCounter إلى الفئة واسم عدّاد الأداء الذي أنشأته في التعليمات البرمجية. اضبط السمة ReportAs على اسم مألوف تريد رؤيته في المدخل.

<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">

  <TelemetryModules>

    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
      <Counters>
        <!-- ... cut other perf counters to save space ... -->

        <!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
        <Add PerformanceCounter="\MyService\Times Used" ReportAs="Service used counter" />
      </Counters>
    </Add>

  </TelemetryModules>

<!-- ... cut to save space ... -->

تشخيصات Azure

كما ذكر سابقاً، يتم تحديد عدّادات الأداء التي تريد تجميعها في الملف diagnostics.wadcfgx. افتح هذا الملف (المحدد لكل دور) في Visual Studio وابحث عن العنصر DiagnosticsConfiguration>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. أضف عنصر PerformanceCounterConfiguration جديد كتابع. اضبط السمة counterSpecifier على فئة واسم عدّاد الأداء الذي أنشأته في التعليمة البرمجية.

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration  xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig>
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096">

        <!-- ... cut to save space ... -->

        <PerformanceCounters scheduledTransferPeriod="PT1M">
          <!-- ... cut other perf counters to save space ... -->
          
          <!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
          <PerformanceCounterConfiguration counterSpecifier="\MyService\Times Used" sampleRate="PT1M" />

        </PerformanceCounters>
      </DiagnosticMonitorConfiguration>
    </WadCfg>
    
    <!-- ... cut to save space ... -->

  </PublicConfig>
</DiagnosticsConfiguration>

مزيد من المعلومات