تكوين تنبيهات لصحة الموارد باستخدام قوالب إدارة الموارد

ستوضح لك هذه المقالة كيفية إنشاء تنبيهات سجل نشاط صحة الموارد برمجيا باستخدام قوالب Azure Resource Manager وAzure PowerShell.

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

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. راجع تثبيت Azure PowerShell للبدء. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

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

لاتباع الإرشادات الواردة في هذه الصفحة، ستحتاج إلى إعداد بعض الأشياء مسبقا:

  1. تحتاج إلى تثبيت الوحدة النمطية Azure PowerShell
  2. تحتاج إلى إنشاء مجموعة إجراءات تم تكوينها أو إعادة استخدامها لإعلامك

الإرشادات

  1. باستخدام PowerShell، سجل الدخول إلى Azure باستخدام حسابك، وحدد الاشتراك الذي تريد التفاعل معه

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    يمكنك استخدام Get-AzSubscription لسرد الاشتراكات التي لديك حق الوصول إليها.

  2. ابحث عن معرف Azure Resource Manager الكامل لمجموعة الإجراءات واحفظه

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. إنشاء قالب Resource Manager وحفظه لتنبيهات Resource Health ك resourcehealthalert.json (راجع التفاصيل أدناه)

  4. إنشاء نشر Azure Resource Manager جديد باستخدام هذا القالب

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. ستتم مطالبتك بكتابة معرف مورد مجموعة الإجراءات واسم التنبيه الذي نسخته سابقا:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. إذا نجح كل شيء، فستحصل على تأكيد في PowerShell

    DeploymentName          : ExampleDeployment
    ResourceGroupName       : <resourceGroup>
    ProvisioningState       : Succeeded
    Timestamp               : 11/8/2017 2:32:00 AM
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                            Name                     Type       Value
                            ===============          =========  ==========
                            activityLogAlertName     String     <Alert Name>
                            activityLogAlertEnabled  Bool       True
                            actionGroupResourceId    String     /...
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

لاحظ أنه إذا كنت تخطط لأتمتة هذه العملية بالكامل، فستحتاج ببساطة إلى تحرير قالب Resource Manager لعدم المطالبة بالقيم في الخطوة 5.

خيارات قالب Resource Manager لتنبيهات Resource Health

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

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

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "activityLogAlertName": {
      "type": "string",
      "metadata": {
        "description": "Unique name (within the Resource Group) for the Activity log alert."
      }
    },
    "actionGroupResourceId": {
      "type": "string",
      "metadata": {
        "description": "Resource Id for the Action group."
      }
    }
  },
  "resources": [   
    {
      "type": "Microsoft.Insights/activityLogAlerts",
      "apiVersion": "2017-04-01",
      "name": "[parameters('activityLogAlertName')]",      
      "location": "Global",
      "properties": {
        "enabled": true,
        "scopes": [
            "[subscription().id]"
        ],        
        "condition": {
          "allOf": [
            {
              "field": "category",
              "equals": "ResourceHealth"
            },
            {
              "field": "status",
              "equals": "Active"
            }
          ]
        },
        "actions": {
          "actionGroups":
          [
            {
              "actionGroupId": "[parameters('actionGroupResourceId')]"
            }
          ]
        }
      }
    }
  ]
}

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

ضبط نطاق التنبيه

يمكن تكوين تنبيهات صحة الموارد لمراقبة الأحداث في ثلاثة نطاقات مختلفة:

  • مستوى الاشتراك
  • مستوى مجموعة الموارد
  • مستوى المورد

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

بالنسبة لنطاق مستوى مجموعة الموارد، يجب أن يبدو قسم النطاقات كما يلي:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>"
],

وبالنسبة لنطاق مستوى المورد، يجب أن يبدو قسم النطاق كما يلي:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/<resource>"
],

على سبيل المثال: "/subscriptions/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

يمكنك الانتقال إلى مدخل Microsoft Azure والنظر إلى عنوان URL عند عرض مورد Azure للحصول على هذه السلسلة.

ضبط أنواع الموارد التي تنبهك

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

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.COMPUTE/VIRTUALMACHINES",
                    "containsAny": null
                },
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.STORAGE/STORAGEACCOUNTS",
                    "containsAny": null
                },
                ...
            ]
        }
    ]
},

هنا نستخدم anyOf برنامج التضمين للسماح للتنبيه الصحي للمورد بمطابقة أي من الشروط التي نحددها، ما يسمح بالتنبيهات التي تستهدف أنواع موارد معينة.

ضبط أحداث Resource Health التي تنبهك

عندما تخضع الموارد لحدث صحي، يمكن أن تمر بسلسلة من المراحل التي تمثل حالة الحدث الصحي: Activeو In ProgressUpdatedو وResolved.

قد تحتاج فقط إلى أن يتم إعلامك عندما يصبح المورد غير صحي، وفي هذه الحالة تريد تكوين التنبيه الخاص بك لإعلام فقط عندما status يكون Active. ومع ذلك، إذا كنت تريد أيضا أن يتم إعلامك على المراحل الأخرى، يمكنك إضافة هذه التفاصيل على النحو التالي:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "status",
                    "equals": "Active"
                },
                {
                    "field": "status",
                    "equals": "In Progress"
                },
                {
                    "field": "status",
                    "equals": "Resolved"
                },
                {
                    "field": "status",
                    "equals": "Updated"
                }
            ]
        }
    ]
}

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

إشعار

يجب أن يحتوي كل قسم "anyOf" على قيم نوع حقل واحد فقط.

ضبط تنبيهات Resource Health لتجنب الأحداث "غير المعروفة"

يمكن أن تقوم Azure Resource Health بإبلاغك بأحدث حالة صحية لمواردك من خلال مراقبتها باستمرار باستخدام مشغلات الاختبار. الحالات الصحية المبلغ عنها ذات الصلة هي: "متوفر" و"غير متوفر" و"متدهور". ومع ذلك، في الحالات التي يتعذر فيها على المشغل ومورد Azure الاتصال، يتم الإبلاغ عن حالة صحية "غير معروفة" للمورد، ويعتبر ذلك حدثا صحيا "نشطا".

ومع ذلك، عندما يبلغ أحد الموارد عن "غير معروف"، فمن المحتمل أن حالته الصحية لم تتغير منذ آخر تقرير دقيق. إذا كنت ترغب في إزالة التنبيهات على الأحداث "غير المعروفة"، يمكنك تحديد هذا المنطق في القالب:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
        {
            "anyOf": [
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
    ]
},

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

لاحظ أنه من الممكن أن تكون خصائص CurrentHealthStatus و previousHealthStatus فارغة في بعض الأحداث. على سبيل المثال، عند حدوث حدث محدث، من المحتمل أن الحالة الصحية للمورد لم تتغير منذ التقرير الأخير، تتوفر معلومات الحدث الإضافية فقط (على سبيل المثال السبب). لذلك، قد يؤدي استخدام العبارة أعلاه إلى عدم تشغيل بعض التنبيهات، لأنه سيتم تعيين قيم properties.currentHealthStatus و properties.previousHealthStatus إلى null.

ضبط التنبيه لتجنب الأحداث التي بدأها المستخدم

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

من السهل تكوين التنبيه الخاص بك لتصفية هذه الأنواع فقط من الأحداث:

"condition": {
    "allOf": [
        ...,
        {
            "field": "properties.cause",
            "equals": "PlatformInitiated",
            "containsAny": null
        }
    ]
}

لاحظ أنه من الممكن أن يكون حقل السبب فارغا في بعض الأحداث. أي أن الانتقال الصحي يحدث (على سبيل المثال متاح غير متوفر) ويتم تسجيل الحدث على الفور لمنع تأخيرات الإعلام. لذلك، قد يؤدي استخدام العبارة أعلاه إلى عدم تشغيل تنبيه، لأنه سيتم تعيين قيمة الخاصية properties.cause إلى null.

إكمال قالب تنبيه صحة الموارد

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

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "activityLogAlertName": {
            "type": "string",
            "metadata": {
                "description": "Unique name (within the Resource Group) for the Activity log alert."
            }
        },
        "actionGroupResourceId": {
            "type": "string",
            "metadata": {
                "description": "Resource Id for the Action group."
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Insights/activityLogAlerts",
            "apiVersion": "2017-04-01",
            "name": "[parameters('activityLogAlertName')]",
            "location": "Global",
            "properties": {
                "enabled": true,
                "scopes": [
                    "[subscription().id]"
                ],
                "condition": {
                    "allOf": [
                        {
                            "field": "category",
                            "equals": "ResourceHealth",
                            "containsAny": null
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.cause",
                                    "equals": "PlatformInitiated",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "status",
                                    "equals": "Active",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Resolved",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "In Progress",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Updated",
                                    "containsAny": null
                                }
                            ]
                        }
                    ]
                },
                "actions": {
                    "actionGroups": [
                        {
                            "actionGroupId": "[parameters('actionGroupResourceId')]"
                        }
                    ]
                }
            }
        }
    ]
}

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

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

تعرف على المزيد حول صحة الموارد:

إنشاء تنبيهات حالة الخدمة: