共用方式為


使用 Resource Manager 範本設定資源健康狀態警示

本文說明如何使用 Azure Resource Manager 範本和 Azure PowerShell 建立 資源健康狀態 活動記錄警示。

Azure 資源健康狀態會隨時通知您 Azure 資源目前和過去的健康狀態。 Azure 資源健康狀態警示會在這些資源的健康狀態變更時,以近乎即時的方式通知您。 以程式設計方式建立資源健康狀態警示,讓使用者能夠建立並自訂大量警示。

注意

建議您使用 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 範本並儲存 資源健康狀態 警示的範本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 中提示值。 main

用於資源健康狀態警示的 Resource Manager 範本選項

<您可以使用此基底範本作為建立 資源健康狀態 警示的起點。 此範本的運作方式是撰寫的,並會註冊您,以接收訂用帳戶中所有資源中所有新啟動之資源健康情況事件的警示。

注意

我們也會在本文底部提供一個更複雜的警示範本,相較於此範本,該範本應該會提高資源健康狀態警示的訊號雜訊比率。

{
  "$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 區段應該看起來如下:

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

此外,如果是資源層級範圍,則 scope 區段應該看起來如下:

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

例如:"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

注意

您可以移至 Azure 入口網站,並在檢視 Azure 資源以取得此字串時查看 URL。

調整警示的資源類型

位於訂用帳戶或資源群組層級的警示可能具有不同種類的資源。 如果您想要將警示限制為只來自特定子集的資源類型,您可以在範本的 condition 區段中定義該情況,如下:

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

我們在這裡使用 anyOf 包裝函式,讓資源健康情況警示能夠符合我們所指定的任何一個條件,從而允許用於目標為特定資源類型的警示。

調整要警示您的資源健康狀態事件

當資源經歷健康情況事件時,它們會經過一系列代表健康情況事件狀態的階段:ActiveIn ProgressUpdatedResolved

您可能只想在資源變為狀況不良時收到通知,在此情況下,您希望將警示設定為只有在 statusActive 時才進行通知。 但是,如果您也想要在其他階段收到通知,您可以新增如下的詳細資料:

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

如果您想要收到健康情況事件所有四個階段的通知,您可以一起移除此條件,而且警示會通知您,而不論 屬性為何 status

注意

每個 "anyOf" 區段應該只包含一個欄位類型值。

調整資源健康狀態警示以避免「未知」事件

Azure 資源健康狀態 可以使用測試執行器來持續監視資源的最新健康情況。 相關報告的健康狀態是:「可用」、「無法使用」和「已降級」。 不過,在執行器和 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 屬性可能是 Null。 例如,當發生 Updated 事件時,資源的健康情況狀態可能自上次報告之後尚未變更。 只有其他事件資訊可用(例如原因)。 因此,使用上述子句可能會導致某些警示未觸發,因為 properties.currentHealthStatus 和 properties.previousHealthStatus 值將設定為 null。

調整警示以避免使用者起始的事件

資源健康狀態事件可以透過平台初始化和使用者初始化的事件來觸發。 只有健康情況事件是由 Azure 平台所導致時才傳送通知,這或許是可行的。

您可以輕鬆地將警示設定為只篩選這些種類的事件:

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

請注意,在某些事件中,原因字段可能是 Null。 也就是說,會進行健康情況轉換(例如,可供無法使用),並立即記錄事件,以防止通知延遲。 因此,使用上述 子句可能會導致警示未觸發,因為 properties.cause 屬性值設定為 null。

完整資源健康狀態警示範本

當您使用上一節所述的不同調整時,以下是設定為最大化訊號與雜訊比率的範例範本。 請記住上述注意事項,其中的 currentHealthStatus、previousHealthStatus 和 cause 屬性值在某些事件中可能是 null。

{
    "$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')]"
                        }
                    ]
                }
            }
        }
    ]
}

不過,您最好知道哪些組態對您有效,因此請使用本檔中教導您的工具來進行自己的自定義。

下一步

深入了解資源健康狀態:

建立服務健康狀態警示: