Konfigurera resurshälsoaviseringar med Resource Manager-mallar

Den här artikeln visar hur du skapar aktivitetsloggaviseringar Resource Health programmatiskt med hjälp av Azure Resource Manager och Azure PowerShell.

Azure Resource Health håller dig informerad om den aktuella och historiska hälsostatusen för dina Azure-resurser. Azure Resource Health-avisering kan meddela dig i nästan realtid när dessa resurser har en ändring i sin hälsostatus. Genom Resource Health skapa aviseringar programmatiskt kan användarna skapa och anpassa aviseringar i grupp.

Anteckning

I den här artikeln används Azure Az PowerShell-modulen, som är den rekommenderade PowerShell-modulen för att interagera med Azure. För att komma igång med Az PowerShell kan du läsa artikeln om att installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Förutsättningar

Om du vill följa anvisningarna på den här sidan måste du konfigurera några saker i förväg:

  1. Du måste installera Azure PowerShell modulen
  2. Du måste skapa eller återanvända en åtgärdsgrupp som konfigurerats för att meddela dig

Instruktioner

  1. Använd PowerShell, logga in på Azure med ditt konto och välj den prenumeration som du vill interagera med

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Du kan använda Get-AzSubscription för att visa en lista över de prenumerationer som du har åtkomst till.

  2. Hitta och spara det fullständiga Azure Resource Manager-ID:t för din åtgärdsgrupp

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Skapa och spara en Resource Manager mall för Resource Health aviseringar som resourcehealthalert.json (se informationen nedan)

  4. Skapa en ny Azure Resource Manager med den här mallen

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Du uppmanas att ange det aviseringsnamn och resurs-ID för åtgärdsgrupp som du kopierade tidigare:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Om allt fungerade får du en bekräftelse i 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 :
    

Observera att om du planerar att automatisera den här processen helt behöver du bara redigera Resource Manager mallen för att inte fråga efter värdena i steg 5.

Resource Manager mallalternativ för Resource Health aviseringar

Du kan använda den här basmallen som utgångspunkt för att skapa Resource Health aviseringar. Den här mallen fungerar som den ska och registrerar dig för att få aviseringar för alla nyligen aktiverade resurshälsohändelser för alla resurser i en prenumeration.

Längst ned i den här artikeln har vi också inkluderat en mer komplex aviseringsmall som bör öka förhållandet mellan signal och brus för Resource Health aviseringar jämfört med den här mallen.

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

En bred avisering som den här rekommenderas dock normalt inte. Lär dig hur vi kan begränsa den här aviseringen för att fokusera på de händelser som vi bryr oss om nedan.

Justera aviseringsomfånget

Resource Health aviseringar kan konfigureras för att övervaka händelser i tre olika omfång:

  • Prenumerationsnivå
  • Resursgruppsnivå
  • Resursnivå

Aviseringsmallen har konfigurerats på prenumerationsnivå, men om du vill konfigurera aviseringen så att den endast meddelar dig om vissa resurser eller resurser inom en viss resursgrupp behöver du bara ändra avsnittet i mallen scopes ovan.

För ett omfång på resursgruppsnivå bör omfångsavsnittet se ut så här:

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

För ett omfång på resursnivå bör omfångsavsnittet se ut så här:

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

Exempelvis: "/subscriptions/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

Du kan gå till Azure Portal och titta på URL:en när du visar din Azure-resurs för att hämta den här strängen.

Justera de resurstyper som avisering du får

Aviseringar på prenumerations- eller resursgruppsnivå kan ha olika typer av resurser. Om du vill begränsa aviseringar så att de endast kommer från en viss delmängd av resurstyperna kan du definiera det i avsnittet condition i mallen så här:

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

Här använder vi omslutningen för att tillåta att resource health-aviseringen matchar något av de villkor som vi anger, vilket möjliggör aviseringar som riktar anyOf sig mot specifika resurstyper.

Justera de Resource Health som varnar dig

När resurser genomgår en hälsohändelse kan de gå igenom en serie steg som representerar hälsotillståndet för hälsohändelsen: Active , In Progress , och Updated Resolved .

Du kanske bara vill få ett meddelande när en resurs blir skadad. I så fall vill du konfigurera aviseringen så att den endast meddelar när status är Active . Men om du även vill få ett meddelande om de andra stegen kan du lägga till den här informationen så här:

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

Om du vill bli meddelad för alla fyra hälsohändelserna kan du ta bort det här villkoret tillsammans, så meddelar aviseringen dig oavsett status egenskapen.

Anteckning

Varje "anyOf"-avsnitt bör bara innehålla ett fälttypsvärden.

Justera Resource Health för att undvika "okända" händelser

Azure Resource Health kan rapportera till dig den senaste hälsan för dina resurser genom att kontinuerligt övervaka dem med hjälp av testkörare. Relevanta rapporterade hälsostatusar är: "Tillgänglig", "Ej tillgänglig" och "Degraderad". Men i situationer där det inte går att kommunicera med start programmet och Azure-resursen rapporteras hälsostatusen "Okänd" för resursen och den anses vara en "aktiv" hälsohändelse.

Men när en resurs rapporterar "Okänd" är det troligt att dess hälsostatus inte har ändrats sedan den senaste korrekta rapporten. Om du vill eliminera aviseringar för okända händelser kan du ange den logiken i mallen:

"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
                }
            ]
        },
    ]
},

I det här exemplet meddelar vi bara om händelser där den aktuella och tidigare hälsostatusen inte har "Okänd". Den här ändringen kan vara ett användbart tillägg om dina aviseringar skickas direkt till din mobiltelefon eller e-post.

Observera att det är möjligt att egenskaperna currentHealthStatus och previousHealthStatus är null i vissa händelser. När en uppdaterad händelse inträffar är det till exempel troligt att hälsostatusen för resursen inte har ändrats sedan den senaste rapporten, bara att ytterligare händelseinformation är tillgänglig (t.ex. orsak). Därför kan användning av -satsen ovan resultera i att vissa aviseringar inte utlöses, eftersom värdena properties.currentHealthStatus och properties.previousHealthStatus anges till null.

Justera aviseringen för att undvika användarinitierade händelser

Resource Health-händelser kan utlösas av plattformsinitierade och användarinitierade händelser. Det kan vara klokt att bara skicka ett meddelande när hälsohändelsen orsakas av Azure-plattformen.

Det är enkelt att konfigurera aviseringen så att den endast filtrerar för den här typen av händelser:

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

Observera att det är möjligt att orsaksfältet är null i vissa händelser. Det innebär att en hälsoövergång sker (t.ex. tillgänglig för ej tillgänglig) och händelsen loggas omedelbart för att förhindra meddelandefördröjningar. Därför kan användning av -satsen ovan resultera i att en avisering inte utlöses, eftersom egenskapsvärdet properties.cause anges till null.

Slutför Resource Health aviseringsmallen

Med hjälp av de olika justeringar som beskrivs i föregående avsnitt finns här en exempelmall som har konfigurerats för att maximera förhållandet mellan signal och brus. Tänk på de varningar som anges ovan där currentHealthStatus, previousHealthStatus och orsakar egenskapsvärden kan vara null i vissa händelser.

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

Men du vet bäst vilka konfigurationer som är effektiva för dig, så använd de verktyg som du har lärt dig i den här dokumentationen för att göra dina egna anpassningar.

Nästa steg

Läs mer om Resource Health:

Skapa Service Health aviseringar: