Resourcestatuswaarschuwingen configureren met Resource Manager-sjablonen

In dit artikel wordt beschreven hoe u programmatisch waarschuwingen voor resourcestatusactiviteitenlogboeken maakt 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. U moet de Azure PowerShell-module installeren
  2. U moet een actiegroep maken of opnieuw gebruiken die is geconfigureerd om u op de hoogte te stellen

Instructies

  1. Meld u met Behulp van PowerShell aan bij Azure met uw account en selecteer het abonnement waarmee u wilt communiceren

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

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

  2. De volledige Azure Resource Manager-id voor uw actiegroep zoeken en opslaan

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Een Resource Manager-sjabloon voor Resource Health-waarschuwingen maken en opslaan als resourcehealthalert.json (zie de details hieronder)

  4. Een nieuwe Azure Resource Manager-implementatie maken 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 :
    

Houd er rekening mee dat als u van plan bent dit proces volledig te automatiseren, u gewoon de Resource Manager-sjabloon moet 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.

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. Meer informatie over hoe we deze waarschuwing omlaag kunnen instellen om ons te richten op de gebeurtenissen die hieronder van belang zijn.

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 de bovenstaande 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/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

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 u de nieuwste status van uw resources rapporteren door ze voortdurend te bewaken met behulp van testlopers. De relevante gerapporteerde statussen zijn: 'Beschikbaar', 'Niet beschikbaar' en 'Gedegradeerd'. In situaties waarin de runner en de Azure-resource niet kunnen communiceren, wordt de status 'Onbekend' echter gerapporteerd voor de resource en die wordt beschouwd als een status gebeurtenis 'Actief'.

Wanneer een resource echter 'Onbekend' rapporteert, is de status ervan waarschijnlijk niet gewijzigd sinds het laatste nauwkeurige rapport. Als u waarschuwingen voor onbekende gebeurtenissen wilt verwijderen, 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 wordt alleen een melding weergegeven over gebeurtenissen waarbij de huidige en vorige status niet 'Onbekend' heeft. Deze wijziging kan handig zijn als uw waarschuwingen rechtstreeks naar uw mobiele telefoon of e-mail worden verzonden.

Houd er rekening mee dat het mogelijk is dat de eigenschappen currentHealthStatus en 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 aanvullende gebeurtenisgegevens beschikbaar zijn (bijvoorbeeld oorzaak). Daarom kan het gebruik van de bovenstaande component ertoe leiden dat sommige waarschuwingen niet worden geactiveerd, omdat de waarden properties.currentHealthStatus en properties.previousHealthStatus worden 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
        }
    ]
}

Houd er rekening mee dat het oorzaakveld in sommige gebeurtenissen null kan zijn. 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 bovenstaande component ertoe leiden dat een waarschuwing niet wordt geactiveerd, omdat de eigenschapswaarde properties.cause wordt ingesteld op null.

Resource Health-waarschuwingssjabloon voltooien

Met behulp van de verschillende aanpassingen die in de vorige sectie worden beschreven, is hier een voorbeeldsjabloon die is geconfigureerd om de verhouding tussen signaal en ruis te maximaliseren. Houd er rekening mee dat de bovenstaande opmerkingen waar de currentHealthStatus, previousHealthStatus en 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: