Delen via


Resourcestatuswaarschuwingen configureren met Resource Manager-sjablonen

In dit artikel wordt beschreven hoe u waarschuwingen voor resourcestatusactiviteitenlogboeken programmatisch kunt maken met behulp van Azure Resource Manager-sjablonen en Azure PowerShell.

Azure Resource Health houdt u op de hoogte van de huidige en historische status van uw Azure-resources. Met Azure Resource Health-waarschuwingen ontvangt u vrijwel in realtime een melding als de status van deze resources wordt gewijzigd. Met het programmatisch maken van Resource Health-waarschuwingen kunnen gebruikers waarschuwingen bulksgewijs maken en aanpassen.

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Vereisten

Als u de instructies op deze pagina wilt volgen, moet u een aantal zaken vooraf instellen:

  1. Installeer de Azure PowerShell-module.
  2. Maak of hergebruik een actiegroep die is geconfigureerd om u op de hoogte te stellen.

Instructies

  1. Gebruik PowerShell om u met uw account aan te melden bij Azure en selecteer het abonnement waarmee u wilt communiceren.

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Notitie

    U kunt deze gebruiken Get-AzSubscription om de abonnementen weer te geven waar u toegang toe hebt.

  2. Zoek en sla de volledige Azure Resource Manager-id voor uw actiegroep op.

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Als resourcehealthalert.json een Resource Manager-sjabloon voor Resource Health-waarschuwingen maken en opslaan, raadpleegt u Resource Manager-sjabloonopties voor Resource Health-waarschuwingen.

  4. Maak een nieuwe Azure Resource Manager-implementatie met behulp van deze sjabloon.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. U wordt gevraagd om de resource-id van de waarschuwingsnaam en actiegroep te typen die u eerder hebt gekopieerd:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Als alles goed werkt, krijgt u een bevestiging in 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 :
    

Als u van plan bent dit proces volledig te automatiseren, moet u de Resource Manager-sjabloon bewerken om niet om de waarden in stap 5 te vragen.

Resource Manager-sjabloonopties voor Resource Health-waarschuwingen

U kunt deze basissjabloon gebruiken als uitgangspunt voor het maken van Resource Health-waarschuwingen. Deze sjabloon werkt zoals geschreven en registreert u om waarschuwingen te ontvangen voor alle nieuw geactiveerde resourcestatusgebeurtenissen voor alle resources in een abonnement.

Notitie

Onderaan dit artikel hebben we ook een complexere waarschuwingssjabloon opgenomen die de signaal-ruisverhouding voor Resource Health-waarschuwingen moet verhogen in vergelijking met deze sjabloon.

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

Een brede waarschuwing zoals deze wordt doorgaans echter niet aanbevolen. In de volgende sectie leert u hoe u deze waarschuwing omlaag kunt instellen om u te richten op de gebeurtenissen die we belangrijk maken.

Het waarschuwingsbereik aanpassen

Resource Health-waarschuwingen kunnen worden geconfigureerd voor het bewaken van gebeurtenissen op drie verschillende bereiken:

  • Abonnementsniveau
  • Niveau van resourcegroep
  • Resourceniveau

De waarschuwingssjabloon is geconfigureerd op abonnementsniveau, maar als u uw waarschuwing wilt configureren om u alleen op de hoogte te stellen van bepaalde resources of resources binnen een bepaalde resourcegroep, moet u de scopes sectie in deze sjabloon wijzigen.

Voor een bereik op resourcegroepsniveau moet de sectie bereiken er als volgt uitzien:

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

En voor een bereik op resourceniveau moet de bereiksectie er als volgt uitzien:

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

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

Notitie

U kunt naar Azure Portal gaan en de URL bekijken wanneer u uw Azure-resource bekijkt om deze tekenreeks op te halen.

De resourcetypen aanpassen die u waarschuwen

Waarschuwingen op abonnements- of resourcegroepniveau kunnen verschillende soorten resources hebben. Als u waarschuwingen wilt beperken tot alleen afkomstig zijn van een bepaalde subset van resourcetypen, kunt u dit definiëren in de condition sectie van de sjabloon:

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

Hier gebruiken we de anyOf wrapper om de resourcestatuswaarschuwing te laten overeenkomen met een van de voorwaarden die we opgeven, zodat waarschuwingen worden toegestaan die zijn gericht op specifieke resourcetypen.

De Resource Health-gebeurtenissen aanpassen die u waarschuwen

Wanneer resources een statusevenement ondergaan, kunnen ze een reeks fasen doorlopen die de status van de status van de status van de gebeurtenis vertegenwoordigen: Active, In Progress, Updateden Resolved.

Mogelijk wilt u alleen een melding ontvangen wanneer een resource beschadigd raakt. In dat geval wilt u de waarschuwing zo configureren dat deze alleen wordt gewaarschuwd wanneer de status resource zich bevindt Active. Als u echter ook op de hoogte wilt worden gesteld van de andere fasen, kunt u deze gegevens als volgt toevoegen:

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

Als u een melding wilt ontvangen voor alle vier de fasen van statusevenementen, kunt u deze voorwaarde allemaal samen verwijderen en ontvangt u een melding, ongeacht de status eigenschap.

Notitie

Elke sectie 'anyOf' moet slechts één veldtypewaarden bevatten.

De Resource Health-waarschuwingen aanpassen om onbekende gebeurtenissen te voorkomen

Azure Resource Health kan de nieuwste status van uw resources rapporteren door ze voortdurend te bewaken met behulp van testlopers. De relevante gerapporteerde statussen zijn: Available, Unavailableen Degraded. In situaties waarin de runner en de Azure-resource niet kunnen communiceren, wordt er echter een Unknown status gerapporteerd voor de resource en die wordt beschouwd als een status gebeurtenis 'Actief'.

Wanneer een resource echter rapporteert Unknown, is de status ervan waarschijnlijk niet gewijzigd sinds het laatste nauwkeurige rapport. Als u waarschuwingen voor Unknown gebeurtenissen wilt elimineren, kunt u die logica opgeven in de sjabloon:

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

In dit voorbeeld melden we alleen gebeurtenissen waar de huidige en vorige status niet over beschikt Unknown. Deze wijziging kan handig zijn als uw waarschuwingen rechtstreeks naar uw mobiele telefoon of e-mail worden verzonden.

Het is mogelijk dat de currentHealthStatus eigenschappen previousHealthStatus null zijn in sommige gebeurtenissen. Wanneer er bijvoorbeeld een bijgewerkte gebeurtenis optreedt, is de status van de resource waarschijnlijk niet gewijzigd sinds het laatste rapport, alleen dat er meer gebeurtenisgegevens beschikbaar zijn (bijvoorbeeld oorzaak). Daarom kan het gebruik van de component in dit voorbeeld ertoe leiden dat sommige waarschuwingen niet worden geactiveerd, omdat de properties.currentHealthStatus waarden properties.previousHealthStatus zijn ingesteld op null.

De waarschuwing aanpassen om door de gebruiker geïnitieerde gebeurtenissen te voorkomen

Resource Health-gebeurtenissen kunnen worden geactiveerd door door het platform geïnitieerde en door de gebruiker geïnitieerde gebeurtenissen. Het kan zinvol zijn om alleen een melding te verzenden wanneer de status gebeurtenis wordt veroorzaakt door het Azure-platform.

U kunt uw waarschuwing eenvoudig configureren om te filteren op dit soort gebeurtenissen:

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

Het is mogelijk dat het oorzaakveld null is in sommige gebeurtenissen. Een statusovergang vindt plaats (bijvoorbeeld beschikbaar voor niet beschikbaar) en de gebeurtenis wordt onmiddellijk geregistreerd om vertragingen van meldingen te voorkomen. Daarom kan het gebruik van de component in dit voorbeeld ertoe leiden dat er geen waarschuwing wordt geactiveerd, omdat de properties.cause eigenschapswaarde wordt ingesteld op null.

Resource Health-waarschuwingssjabloon voltooien

Hier volgt een voorbeeldsjabloon die is geconfigureerd met behulp van de aanpassingen die in de vorige sectie zijn beschreven om de verhouding tussen signaal en ruis te maximaliseren. Houd er rekening mee dat de bovenstaande opmerkingen waar de currentHealthStatus, previousHealthStatusen oorzaak van eigenschapswaarden in sommige gebeurtenissen null kunnen zijn.

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

U weet echter het beste welke configuraties voor u effectief zijn, dus gebruik de hulpprogramma's die u in deze documentatie hebt geleerd om uw eigen aanpassingen te maken.

Volgende stappen

Meer informatie over Resource Health:

ServiceStatuswaarschuwingen maken: