Dela via


Konfigurera resurshälsoaviseringar med Resource Manager-mallar

Den här artikeln visar hur du skapar resource health-aktivitetsloggaviseringar programmatiskt med hjälp av Azure Resource Manager-mallar 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 att skapa Resource Health-aviseringar programmässigt kan användarna skapa och anpassa aviseringar i grupp.

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. 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. Installera Azure PowerShell-modulen.
  2. Skapa eller återanvänd en åtgärdsgrupp som har konfigurerats för att meddela dig.

Instruktioner

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

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Kommentar

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

  2. Leta upp och spara hela 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 när resourcehealthalert.json, se Resource Manager-mallalternativ för Resource Health-aviseringar.

  4. Skapa en ny Azure Resource Manager-distribution med hjälp av den här mallen.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Du uppmanas att ange det resurs-ID för aviseringsnamn och å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 fungerar 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 :
    

Om du planerar att automatisera den här processen helt enkelt behöver du 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 skriven och registrerar dig för att få aviseringar för alla nyligen aktiverade resurshälsohändelser för alla resurser i en prenumeration.

Kommentar

Längst ned i den här artikeln har vi även inkluderat en mer komplex aviseringsmall som bör öka signal-till-brus-förhållandet 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 vanligtvis inte. I följande avsnitt får du lära dig hur du omfångsbegränsar den här aviseringen för att fokusera på de händelser vi bryr oss om.

Justera aviseringsomfånget

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

  • Prenumerationsnivå
  • Resursgruppsnivå
  • Resursnivå

Aviseringsmallen är konfigurerad på prenumerationsnivå, men om du vill konfigurera aviseringen så att den bara meddelar dig om vissa resurser eller resurser i en viss resursgrupp behöver du helt enkelt ändra avsnittet i den scopes här mallen.

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

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

Och för ett resursnivåomfång bör omfångsavsnittet se ut så här:

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

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

Kommentar

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 aviserar dig

Aviseringar på prenumerations- eller resursgruppsnivå kan ha olika typer av resurser. Om du vill begränsa aviseringar till att endast komma från en viss delmängd av resurstyper kan du definiera det i avsnittet i condition 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 anyOf för att tillåta att resurshälsoaviseringen matchar något av de villkor som vi anger, vilket möjliggör aviseringar som riktar sig mot specifika resurstyper.

Justera resource health-händelser som varnar dig

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

Du kanske bara vill bli meddelad när en resurs blir felaktig, i vilket fall du vill konfigurera aviseringen så att den bara meddelar när status är Active. Men om du också vill bli meddelad 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 faserna av hälsohändelser kan du ta bort det här villkoret tillsammans, och aviseringen status meddelar dig oavsett egenskapen.

Kommentar

Varje "anyOf"-avsnitt ska bara innehålla ett fälttypsvärden.

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

Azure Resource Health kan rapportera de senaste hälsotillstånden för dina resurser genom att ständigt övervaka dem med hjälp av testlöpare. De relevanta rapporterade hälsostatusarna är: Available, Unavailableoch Degraded. Men i situationer där löparen och Azure-resursen inte kan kommunicera rapporteras en Unknown hälsostatus för resursen och det anses vara en "Aktiv" hälsohändelse.

Men när en resurs rapporterar Unknownär det troligt att dess hälsostatus inte har ändrats sedan den senaste korrekta rapporten. Om du vill eliminera aviseringar om Unknown 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 Unknown. Den här ändringen kan vara ett användbart tillägg om dina aviseringar skickas direkt till din mobiltelefon eller e-post.

Det är möjligt currentHealthStatus att egenskaperna och previousHealthStatus är null i vissa händelser. När en uppdaterad händelse till exempel inträffar är det troligt att resursens hälsostatus inte har ändrats sedan den senaste rapporten, bara att mer händelseinformation är tillgänglig (till exempel orsak). Därför kan användning av -satsen i det här exemplet leda till att vissa aviseringar inte utlöses, eftersom properties.currentHealthStatus värdena och properties.previousHealthStatus är inställda på 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 bra 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 efter den här typen av händelser:

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

Det är möjligt att orsaksfältet är null i vissa händelser. Det vill säga en hälsoövergång sker (till exempel tillgänglig för otillgänglig) och händelsen loggas omedelbart för att förhindra fördröjningar av meddelanden. Om du använder -satsen i det här exemplet kan det därför leda till att en avisering inte utlöses eftersom properties.cause egenskapsvärdet anges till null.

Slutför resource health-aviseringsmall

Här är en exempelmall som konfigureras med hjälp av de justeringar som beskrivs i föregående avsnitt för att maximera förhållandet mellan signal och brus. Tänk på de varningar som anges ovan där egenskapsvärdena currentHealthStatus, previousHealthStatusoch cause 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 lärs ut till dig i den här dokumentationen för att göra din egen anpassning.

Nästa steg

Läs mer om Resource Health:

Skapa Service Health-aviseringar: