Configurare avvisi di integrità risorse di Azure tramite modelli di Gestione risorse
Questo articolo illustra come creare avvisi del log attività Integrità risorse a livello di codice 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:
- Installare il modulo Azure PowerShell.
- Creare o riutilizzare un gruppo di azioni configurato per inviare una notifica.
Istruzioni
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.Trovare e salvare l'ID completo di Azure Resource Manager per il gruppo di azioni.
(Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
Creare e salvare un modello di Resource Manager per gli avvisi di Integrità risorse come resourcehealthalert.json, vedere Opzioni del modello di Resource Manager per gli avvisi di Integrità risorse.
Creare una nuova distribuzione di Azure Resource Manager usando questo modello.
New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
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>
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 :
Se si prevede di automatizzare completamente questo processo, è sufficiente modificare il modello di Resource Manager per non richiedere i valori nel passaggio 5.
Opzioni di modelli di Resource Manager per avvisi di Integrità risorse
È possibile usare questo modello di base come punto iniziale per la creazione di avvisi di Integrità risorse di Azure. Questo modello funziona come scritto e si iscrive 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, un ampio avviso come questo è in genere sconsigliato. Nella sezione seguente si apprenderà come definire l'ambito di questo avviso per concentrarsi sugli eventi di cui ci si occupa.
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 in questo modello.
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.
Modificare il tipo di risorsa che invia un avviso
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: Available
, Unavailable
e Degraded
. Tuttavia, in situazioni in cui lo strumento di esecuzione e la risorsa di Azure non sono in grado di comunicare, viene segnalato uno Unknown
stato di integrità per la risorsa e viene considerato un evento di integrità "Attivo".
Tuttavia, quando una risorsa segnala Unknown
, è probabile che lo stato di integrità non sia cambiato dall'ultimo report accurato. Se si desidera eliminare gli avvisi per Unknown
gli eventi, è possibile specificare tale 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 ha Unknown
. Questa modifica può costituire un'aggiunta utile se gli avvisi sono inviati direttamente al telefono cellulare o tramite messaggio di posta elettronica.
È possibile che le currentHealthStatus
proprietà 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 stato modificato dopo l'ultimo report, ma solo che sono disponibili altre informazioni sull'evento ( ad esempio, causa). Pertanto, l'uso della clausola in questo esempio può comportare la mancata attivazione di alcuni avvisi, perché i properties.currentHealthStatus
valori e properties.previousHealthStatus
sono 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
}
]
}
È 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 in questo esempio può comportare l'attivazione di un avviso, perché il valore della properties.cause
proprietà verrà impostato su Null.
Modello di avviso di Integrità risorse di Azure completo
Ecco un modello di esempio configurato usando le regolazioni descritte nella sezione precedente per ottimizzare il rapporto tra segnale e rumore. Tenere presenti le avvertenze indicate in precedenza in cui i valori delle currentHealthStatus
proprietà , previousHealthStatus
e 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:
- Panoramica su Integrità risorse di Azure
- Tipi di risorse e controlli integrità disponibili in Integrità risorse di Azure
Creare avviso di integrità dei servizi di Azure: