Condividi tramite


Configurare avvisi di integrità risorse di Azure tramite modelli di Gestione risorse

Questo articolo illustra come creare Integrità risorse avvisi del log attività usando i modelli di Azure Resource Manager e Azure PowerShell.

Integrità risorse di Azure comunica lo stato di integrità attuale e cronologico delle risorse di Azure. Integrità risorse di Azure invia una notifica quasi in tempo reale quando tali risorse subiscono una modifica al loro stato di integrità. Creare avvisi di Integrità risorse di Azure a livello di codice consente agli utenti di creare e personalizzare gli avvisi in blocco.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Prerequisiti

Per seguire le istruzioni in questa pagina, è necessario configurare alcune operazioni in anticipo:

  1. È necessario installare il modulo Azure PowerShell.
  2. È necessario creare o riutilizzare un gruppo di azioni configurato per inviare una notifica.

Istruzioni

  1. Usare PowerShell per accedere ad Azure usando l'account e selezionare la sottoscrizione con cui si vuole interagire.

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Nota

    È possibile usare Get-AzSubscription per elencare le sottoscrizioni che è possibile utilizzare.

  2. Trovare e salvare l'ID completo di Azure Resource Manager per il gruppo di azioni.

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Creare e salvare un modello di Resource Manager per gli avvisi di Integrità risorse come resourcehealthalert.json (vedere i dettagli)

  4. Creare una nuova distribuzione di Azure Resource Manager usando questo modello.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Viene richiesto di digitare l'ID risorsa nome avviso e gruppo di azioni copiato in precedenza:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Se tutto funziona correttamente, viene visualizzata una conferma 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 :
    

[!NOTE]
Se si prevede di automatizzare completamente questo processo, è sufficiente modificare il modello di Resource Manager per non richiedere i valori nel passaggio 5. main

Opzioni di modelli di Resource Manager per avvisi di Integrità risorse

<È possibile usare questo modello di base come punto di partenza per la creazione di avvisi Integrità risorse. Questo modello funziona come scritto e si iscriverà per ricevere avvisi per tutti gli eventi di integrità delle risorse appena attivati in tutte le risorse in una sottoscrizione.

Nota

Nella parte inferiore di questo articolo è stato inoltre incluso un modello di avviso più complesso che, rispetto a questo, dovrebbe aumentare il rapporto segnale/rumore per gli avvisi di Integrità risorse di Azure.

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

Tuttavia, non è consigliabile un avviso generale come questo. Informazioni su come definire l'ambito di questo avviso per concentrarsi sugli eventi di cui ci si preoccupa.

Modificare l'ambito degli avvisi

Gli avvisi di Integrità risorse di Azure possono essere configurati per monitorare gli eventi in tre ambiti diversi:

  • Livello di sottoscrizione
  • Il livello Gruppo di risorse
  • A livello di risorsa

Il modello di avviso è configurato a livello di sottoscrizione, ma se si vuole configurare l'avviso per notificare solo alcune risorse o risorse all'interno di un determinato gruppo di risorse, è sufficiente modificare la scopes sezione nel modello illustrato in precedenza.

Per un ambito a livello gruppo di risorse, la sezione ambiti dovrebbe essere simile a:

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

E per un ambito a livello di risorse, la sezione ambiti dovrebbe essere simile a:

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

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

Nota

È possibile passare al portale di Azure e osservare l'URL quando si visualizza la risorsa di Azure per ottenere questa stringa.

Modifica dei tipi di risorse che avvisano l'utente

Gli avvisi a livello di gruppo di risorse o sottoscrizione possono avere diversi tipi di risorse. Se si desidera limitare gli avvisi solo a quelli provenienti da un determinato subset di tipi di risorse, è possibile definire questa opzione nella sezione condition del modello come segue:

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

Qui viene usata la wrapper anyOf per consentire l'avviso di integrità risorse in modo che corrisponda a una delle condizioni specificate, consentendo di inviare avvisi destinati a tipi di risorse specifiche.

Modifica gli eventi di Integrità risorse di Azure che inviano un avviso

Se le risorse sono sottoposte a un evento di integrità, possono passare attraverso una serie di fasi che rappresentano lo stato dell'evento di integrità: Active, In Progress, Updated, e Resolved.

È possibile ricevere una notifica quando una risorsa diventa non integra, in questo caso si configura l'avviso per inviare notifiche solo quando status è Active. Tuttavia se si vuole essere avvisati anche su tutte le altre fasi, è possibile aggiungere dettagli come illustrato di seguito:

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

Se si desidera ricevere una notifica per tutte e quattro le fasi degli eventi di integrità, è possibile rimuovere questa condizione insieme e l'avviso invia una notifica indipendentemente dalla status proprietà .

Nota

Ogni sezione "anyOf" deve contenere i valori di un solo tipo di campo.

Modificare gli avvisi di Integrità risorse di Azure per evitare gli eventi "Sconosciuti"

Azure Integrità risorse può segnalare l'integrità più recente delle risorse monitorandole costantemente usando i test runner. Gli stati di integrità segnalati pertinenti sono: "Disponibile", "Non disponibile" e "Danneggiato". Tuttavia, nelle situazioni in cui la risorsa di Azure e lo strumento di esecuzione non consentono la comunicazione, viene segnalato per la risorsa uno stato di integrità "Sconosciuto", considerato come evento di integrità "Attivo".

Tuttavia, quando una risorsa segnala "Sconosciuto", è probabile che lo stato di integrità non sia cambiato dopo l'ultimo report accurato. Se si desidera eliminare gli avvisi sugli eventi "Sconosciuti", è possibile specificare questa logica nel modello:

"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 questo esempio viene visualizzata una notifica solo sugli eventi in cui lo stato di integrità corrente e precedente non è "Sconosciuto". Questa modifica può essere utile se gli avvisi vengono inviati direttamente al telefono cellulare o all'indirizzo di posta elettronica.

Si noti che è possibile che le proprietà currentHealthStatus e previousHealthStatus siano null in alcuni eventi. Ad esempio, quando si verifica un evento Updated è probabile che lo stato di integrità della risorsa non sia cambiato dall'ultimo report. Sono disponibili solo altre informazioni sull'evento, ad esempio la causa. Pertanto, l'uso della clausola precedente può comportare la mancata attivazione di alcuni avvisi, perché i valori properties.currentHealthStatus e properties.previousHealthStatus verranno impostati su null.

Modifica dell'avviso per evitare eventi avviati dall'utente

Gli eventi di Integrità risorse di Azure possono essere attivati da eventi avviati dalla piattaforma o dall'utente. Potrebbe essere senato inviare solo una notifica quando l'evento di integrità è provocato dalla piattaforma di Azure.

Configurare l'avviso per filtrare solo questi tipi di eventi è semplice:

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

Si noti che è possibile che il campo della causa sia Null in alcuni eventi. Ovvero, viene eseguita una transizione di integrità (ad esempio, disponibile per non disponibile) e l'evento viene registrato immediatamente per evitare ritardi di notifica. Pertanto, l'uso della clausola precedente può comportare l'attivazione di un avviso, perché il valore della proprietà properties.cause è impostato su Null.

Modello di avviso di Integrità risorse di Azure completo

Quando si usano le diverse regolazioni descritte nella sezione precedente, ecco un modello di esempio configurato per ottimizzare il rapporto segnale/rumore. Tenere presente l'avvertenza di cui sopra, ovvero che i valori delle proprietà currentHealthStatus, previousHealthStatus e cause possono essere null in alcuni eventi.

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

Tuttavia, si conosce meglio quali configurazioni sono efficaci per l'utente, quindi usare gli strumenti insegnati all'utente in questa documentazione per apportare una personalizzazione personalizzata.

Passaggi successivi

Altre informazioni su Integrità risorse:

Creare avviso di integrità dei servizi di Azure: