استخدام ملحق Application Health مع مجموعات مقياس الجهاز الظاهري

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

توضح هذه المقالة كيف يمكنك استخدام نوعين من ملحق Application Health، أو Binary Health States أو Rich Health States، لمراقبة صحة التطبيقات التي تم نشرها على مجموعات مقياس الجهاز الظاهري.

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

تفترض هذه المقالة أنك على دراية بما يلي:

تنبيه

يتوقع ملحق صحة التطبيق تلقي استجابة فحص متناسقة في المنفذ tcp المكون أو مسار http/https الطلب من أجل تسمية الجهاز الظاهري بأنه سليم. إذا لم يتم تشغيل أي تطبيق على الجهاز الظاهري، أو كنت غير قادر على تكوين استجابة فحص، فسيظهر الجهاز الظاهري الخاص بك على أنه غير صحي (حالات الصحة الثنائية) أو غير معروف (حالات الصحة الغنية).

إشعار

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

متى تستخدم ملحق سلامة التطبيق

يتم نشر ملحق صحة التطبيق داخل مثيل مجموعة مقياس الجهاز الظاهري وتقارير عن صحة التطبيق من داخل مثيل مجموعة المقياس. يفحص الملحق نقطة نهاية تطبيق محلي وسيحدث الحالة الصحية استنادا إلى استجابات TCP/HTTP(S) المستلمة من التطبيق. يتم استخدام هذه الحالة الصحية من قبل Azure لبدء الإصلاحات على المثيلات غير الصحية وتحديد ما إذا كان المثيل مؤهلا لعمليات الترقية.

يقوم الملحق بالإبلاغ عن الصحة من داخل الجهاز الظاهري ويمكن استخدامه في الحالات التي لا يمكن فيها استخدام مسبار خارجي مثل تحقيقات صحة Azure Load Balancer.

الحالات الثنائية مقابل الحالات الصحية الغنية

تحتوي ملحقات صحة التطبيق على خيارين متاحين: حالات الصحة الثنائية وحالات الصحة الغنية. يسلط الجدول التالي الضوء على بعض الاختلافات الرئيسية بين الخيارين. راجع نهاية هذا القسم للحصول على توصيات عامة.

الميزات حالات السلامة الثنائية الدول الصحية الغنية
الحالات الصحية المتوفرة اثنتان من الحالات المتوفرة: صحية، غير صحية أربع حالات متاحة: صحية، غير صحية، تهيئة، غير معروف1
إرسال إشارات صحية يتم إرسال الإشارات الصحية من خلال رموز استجابة HTTP/HTTPS أو اتصالات TCP. يتم إرسال الإشارات الصحية على بروتوكول HTTP/HTTPS من خلال رمز استجابة الفحص والنص الأساسي للاستجابة. تظل الإشارات الصحية من خلال بروتوكول TCP دون تغيير من حالات الصحة الثنائية.
تحديد المثيلات غير الصحية ستقع المثيلات تلقائيا في حالة غير صحية إذا لم يتم تلقي إشارة صحية من التطبيق. يمكن أن يشير المثيل غير السليم إما إلى مشكلة في تكوين الملحق (على سبيل المثال، نقطة نهاية غير قابلة للوصول) أو مشكلة في التطبيق (على سبيل المثال، رمز الحالة غير 200). ستنتقل المثيلات إلى حالة غير صحية فقط إذا كان التطبيق يصدر استجابة فحص غير سليم. المستخدمون مسؤولون عن تنفيذ منطق مخصص لتحديد المثيلات ووضع علامة عليها باستخدام التطبيقات غير السليمة 2. تقع المثيلات ذات إعدادات ملحق غير صحيحة (على سبيل المثال، نقطة نهاية لا يمكن الوصول إليها) أو استجابات فحص السلامة غير الصالحة ضمن الحالةغير معروف 2.
تهيئة الحالة للمثيلات التي تم إنشاؤها حديثا لا تتوفر تهيئة الحالة. قد تستغرق المثيلات التي تم إنشاؤها حديثا بعض الوقت قبل الاستقرار في حالة ثابتة. تسمح حالة التهيئة للمثيلات التي تم إنشاؤها حديثا بالتسوية في حالة صحية ثابتة قبل جعل المثيل مؤهلا للترقيات المتداولة أو عمليات إصلاح المثيل.
بروتوكول HTTP/HTTPS مدعوم مدعوم
بروتوكول TCP مدعوم دعم محدود - حالة غير معروفة غير متوفرة على بروتوكول TCP. راجع جدول بروتوكول Rich Health States لسلوكيات الحالة الصحية على TCP.

1الحالة غير معروفة غير متوفرة على بروتوكول TCP. 2 ينطبق فقط على بروتوكول HTTP/HTTPS. سيتبع بروتوكول TCP نفس عملية تحديد المثيلات غير السليمة كما هو الحال في حالات الصحة الثنائية.

بشكل عام، يجب استخدام حالات الحماية الثنائية إذا:

  • لست مهتما بتكوين منطق مخصص لتحديد مثيل غير سليم ووضع علامة عليه
  • لا تحتاج إلى فترة سماح تهيئة للمثيلات التي تم إنشاؤها حديثا

يجب عليك استخدام Rich Health States إذا:

  • يمكنك إرسال إشارات صحية من خلال بروتوكول HTTP/HTTPS ويمكنك إرسال معلومات صحية من خلال نص استجابة الفحص
  • ترغب في استخدام منطق مخصص لتحديد المثيلات غير السليمة ووضع علامة لها
  • ترغب في تعيين فترة سماح تهيئة للمثيلات التي تم إنشاؤها حديثا، بحيث تستقر في حالة صحية ثابتة قبل جعل المثيل مؤهلا للترقية المتداولة أو إصلاحات المثيل

حالات السلامة الثنائية

يحتوي تقرير الحالة الصحية الثنائية على حالتين صحيتين، صحي وغير صحي. توفر الجداول التالية وصفا موجزا لكيفية تكوين الحالات الصحية.

بروتوكول HTTP/HTTPS

البروتوكول الحالة الصحية ‏‏الوصف
http/https سليم لإرسال إشارة صحية ، من المتوقع أن يقوم التطبيق بإرجاع رمز استجابة 200.
http/https غير سليم سيتم وضع علامة على المثيل على أنه غير صحي إذا لم يتم تلقي رمز استجابة 200 من التطبيق.

بروتوكول TCP

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

تتضمن بعض السيناريوهات التي قد تؤدي إلى حالة غير صحية ما يلي:

  • عندما تقوم نقطة نهاية التطبيق بإرجاع رمز حالة غير 200
  • عندما لا تكون هناك نقطة نهاية تطبيق مكونة داخل مثيلات الجهاز الظاهري لتوفير حالة صحة التطبيق
  • عند تكوين نقطة نهاية التطبيق بشكل غير صحيح
  • عندما لا يمكن الوصول إلى نقطة نهاية التطبيق

الدول الصحية الغنية

تحتوي تقارير Rich Health States على أربع حالات صحية، وهي التهيئة والصحة وغير السليمة وغير المعروفة. توفر الجداول التالية وصفا موجزا لكيفية تكوين كل حالة صحية.

بروتوكول HTTP/HTTPS

البروتوكول الحالة الصحية ‏‏الوصف
http/https سليم لإرسال إشارة صحية ، من المتوقع أن يقوم التطبيق بإرجاع استجابة فحص مع: رمز استجابة التحقيق: الحالة 2xx، نص استجابة التحقيق: {"ApplicationHealthState": "Healthy"}
http/https غير سليم لإرسال إشارة غير صحية ، من المتوقع أن يقوم التطبيق بإرجاع استجابة مسبار مع: رمز استجابة التحقيق: الحالة 2xx، نص استجابة التحقيق: {"ApplicationHealthState": "Unhealthy"}
http/https تتم الآن تهيئة يدخل المثيل تلقائيا حالة التهيئة في وقت بدء الملحق. لمزيد من المعلومات، راجع تهيئة الحالة.
http/https غير معروفة قد تحدث حالة غير معروفة في السيناريوهات التالية: عند إرجاع رمز حالة غير 2xx بواسطة التطبيق، أو عند انتهاء مهلة طلب الفحص، أو عندما تكون نقطة نهاية التطبيق غير قابلة للوصول أو تم تكوينها بشكل غير صحيح، أو عند توفير ApplicationHealthState قيمة مفقودة أو غير صالحة في نص الاستجابة، أو عند انتهاء فترة السماح. لمزيد من المعلومات، راجع حالة غير معروفة.

بروتوكول TCP

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

تهيئة الحالة

تنطبق هذه الحالة فقط على Rich Health States. تحدث حالة التهيئة مرة واحدة فقط في وقت بدء الملحق ويمكن تكوينها بواسطة إعدادات gracePeriod الملحق وnumberOfProbes.

عند بدء تشغيل الملحق، ستبقى صحة التطبيق في حالة التهيئة حتى يحدث أحد السيناريوهين:

  • يتم الإبلاغ عن نفس الحالة الصحية (صحية أو غير صحية) لعدد متتالي من المرات كما تم تكوينها من خلال numberOfProbes
  • gracePeriod تنتهي الصلاحية

إذا تم الإبلاغ عن نفس الحالة الصحية (صحية أو غير صحية) على التوالي، ستنتقل صحة التطبيق من حالة التهيئة وإلى الحالة الصحية المبلغ عنها (صحية أو غير صحية).

مثال

إذا كانت numberOfProbes = 3، فهذا يعني:

  • للانتقال من التهيئة إلى الحالة الصحية: يجب أن يتلقى ملحق صحة التطبيق ثلاث إشارات صحية متتالية عبر HTTP/HTTPS أو بروتوكول TCP
  • للانتقال من التهيئة إلى الحالة غير السليمة: يجب أن يتلقى ملحق صحة التطبيق ثلاث إشارات غير صحية متتالية عبر HTTP/HTTPS أو بروتوكول TCP

gracePeriod إذا انتهت صلاحية قبل الإبلاغ عن حالة صحية متتالية بواسطة التطبيق، فسيتم تحديد صحة المثيل على النحو التالي:

  • بروتوكول HTTP/HTTPS: ستنتقل صحة التطبيق من التهيئة إلى غير معروف
  • بروتوكول TCP: ستنتقل صحة التطبيق من التهيئة إلى غير سليم

حالة غير معروفة

تنطبق هذه الحالة فقط على Rich Health States. يتم الإبلاغ عن الحالة غير المعروفة فقط لفحوصات "http" أو "https" وتحدث في السيناريوهات التالية:

  • عند إرجاع رمز حالة غير 2xx بواسطة التطبيق
  • عند مهلة طلب الفحص
  • عندما تكون نقطة نهاية التطبيق غير قابلة للوصول أو تم تكوينها بشكل غير صحيح
  • عند توفير ApplicationHealthState قيمة مفقودة أو غير صالحة في نص الاستجابة
  • عند انتهاء فترة السماح

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

يوضح الجدول التالي تفسير الحالة الصحية للترقيات المتداولة وإصلاحات المثيل:

الحالة الصحية تفسير الترقية المتداولة مشغل إصلاحات المثيل
تتم الآن تهيئة انتظر حتى تكون الحالة سليمة أو غير سليمة أو غير معروفة لا
سليم سليم لا
غير سليم غير سليم ‏‏نعم‬
غير معروفة غير سليم ‏‏نعم‬

مخطط ملحق للحالات الصحية الثنائية

يُظهر JSON التالي مخطط قاعدة البيانات لملحق سلامة التطبيق. تتطلب الإضافة على الأقل إما طلب "tcp" أو "http" أو "https" مع منفذ مرتبط أو مسار طلب على التوالي.

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "1.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1
          }
        }
      }
    ]
  }
} 

قيم Property

الاسم القيمة / المثال نوع البيانات
apiVersion 2018-10-01 date
publisher Microsoft.ManagedServices سلسلة
النوع ApplicationHealthLinux (Linux)، وApplicationHealthWindows (Windows) سلسلة
typeHandlerVersion 1.0 سلسلة

إعدادات

الاسم القيمة / المثال نوع البيانات
البروتوكول http أو https أو tcp سلسلة
المنفذ اختياري عندما يكون البروتوكول http أو https، يكون إلزامياً عندما يكون البروتوكول tcp العدد الصحيح
requestPath إلزامي عندما يكون البروتوكول http أو https، غير مسموح به عندما يكون البروتوكول tcp سلسلة
الفاصل الزمنيInSeconds اختياري، الافتراضي هو 5 ثوان. هذا هو الفاصل الزمني بين كل فحص صحي. على سبيل المثال، إذا كانت intervalInSeconds == 5، فسيتم إرسال فحص إلى نقطة نهاية التطبيق المحلي مرة واحدة كل 5 ثوان. العدد الصحيح
numberOfProbes اختياري، الافتراضي هو 1. هذا هو عدد الفحوصات المتتالية المطلوبة لتغيير الحالة الصحية. على سبيل المثال، إذا كانت numberOfProbles == 3، فستحتاج إلى 3 إشارات "سليمة" متتالية لتغيير الحالة الصحية من "غير صحية" إلى حالة "صحية". ينطبق نفس المطلب على تغيير الحالة الصحية إلى حالة "غير صحية". العدد الصحيح

مخطط ملحق للحالات الصحية الغنية

يظهر JSON التالي مخطط ملحق Rich Health States. يتطلب الملحق على الأقل إما طلب "http" أو "https" مع منفذ مقترن أو مسار طلب على التوالي. يتم دعم تحقيقات TCP أيضا، ولكنها لن تكون قادرة على تعيين ApplicationHealthState من خلال نص استجابة التحقيق ولن يكون لها حق الوصول إلى حالة غير معروفة .

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "2.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1,
            "gracePeriod": 600
          }
        }
      }
    ]
  }
} 

قيم Property

الاسم القيمة / المثال نوع البيانات
apiVersion 2018-10-01 date
publisher Microsoft.ManagedServices سلسلة
النوع ApplicationHealthLinux (Linux)، وApplicationHealthWindows (Windows) سلسلة
typeHandlerVersion 2.0 سلسلة

إعدادات

الاسم القيمة / المثال نوع البيانات
البروتوكول http أو https أو tcp سلسلة
المنفذ اختياري عندما يكون البروتوكول http أو https، يكون إلزامياً عندما يكون البروتوكول tcp العدد الصحيح
requestPath إلزامي عندما يكون البروتوكول http أو https، غير مسموح به عندما يكون البروتوكول tcp سلسلة
الفاصل الزمنيInSeconds اختياري، الافتراضي هو 5 ثوان. هذا هو الفاصل الزمني بين كل فحص صحي. على سبيل المثال، إذا كانت intervalInSeconds == 5، فسيتم إرسال فحص إلى نقطة نهاية التطبيق المحلي مرة واحدة كل 5 ثوان. العدد الصحيح
numberOfProbes اختياري، الافتراضي هو 1. هذا هو عدد الفحوصات المتتالية المطلوبة لتغيير الحالة الصحية. على سبيل المثال، إذا كانت numberOfProbles == 3، فستحتاج إلى 3 إشارات "صحية" متتالية لتغيير الحالة الصحية من "غير صحي"/"غير معروف" إلى حالة "سليمة". ينطبق نفس المطلب على تغيير الحالة الصحية إلى حالة "غير صحية" أو "غير معروفة". العدد الصحيح
gracePeriod اختياري، افتراضي = intervalInSeconds * numberOfProbes؛ الحد الأقصى لفترة السماح هو 7200 ثانية العدد الصحيح

نشر ملحق سلامة التطبيق

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

حالات السلامة الثنائية

يضيف المثال التالي ملحق سلامة التطبيق (مع الاسم myHealthExtension) إلى ملف تعريف الملحق في نموذج مجموعة المقاييس لمجموعة مقاييس تستند إلى Windows.

يمكنك أيضا استخدام هذا المثال لتغيير ملحق موجود من Rich Health State إلى Binary Health عن طريق إجراء استدعاء PATCH بدلا من PUT.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>", 
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "1.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>"
    }
  }
}

استخدم PATCH لتعديل ملحق تم نشره بالفعل.

قم بترقية الأجهزة الظاهرية لتثبيت الملحق.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

الدول الصحية الغنية

يضيف المثال التالي ملحق Application Health - Rich States (بالاسم myHealthExtension) إلى في نموذج مجموعة التحجيم لمجموعة مقياس مستندة إلى extensionProfile Windows.

يمكنك أيضا استخدام هذا المثال لترقية ملحق موجود من Binary إلى Rich Health States عن طريق إجراء استدعاء PATCH بدلا من PUT.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>",
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "2.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>",
      "intervalInSeconds": <intervalInSeconds>,
      "numberOfProbes": <numberOfProbes>,
      "gracePeriod": <gracePeriod>
    }
  }
}

استخدم PATCH لتعديل ملحق تم نشره بالفعل.

قم بترقية الأجهزة الظاهرية لتثبيت الملحق.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

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

عرض VMHealth - مثيل واحد

Get-AzVmssVM 
  -InstanceView `
  -ResourceGroupName <rgName> `
  -VMScaleSetName <vmssName> `
  -InstanceId <instanceId> 

عرض VMHealth – مكالمة دفعية

يتوفر هذا فقط لمجموعات مقياس الجهاز الظاهري مع التنسيق الموحد.

GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`

الحالة الصحية لا تظهر

إذا لم تظهر Health State في مدخل Microsoft Azure أو عبر استدعاء GET، فتحقق للتأكد من ترقية الجهاز الظاهري إلى أحدث نموذج. إذا لم يكن الجهاز الظاهري على أحدث طراز، فبادر بترقية الجهاز الظاهري وستحدث الحالة الصحية.

سجل إخراج تنفيذ الملحق

يتم تسجيل إخراج تنفيذ الامتداد في الملفات الموجودة في الدلائل التالية:

C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension

تلتقط السجلات أيضاً حالة السلامة للتطبيق بشكلٍ دوري.

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

تعرف على كيفية نشر التطبيق الخاص بك على مجموعات مقياس الجهاز الظاهري.