Konfigurace upozornění na stav prostředků s využitím šablon Resource Manageru

V tomto článku se dozvíte, jak programově vytvořit upozornění protokolu aktivit služby Resource Health pomocí šablon Azure Resource Manageru a Azure PowerShellu.

Azure Resource Health vás informuje o aktuálním a historickém stavu vašich prostředků Azure. Upozornění služby Azure Resource Health vás můžou téměř v reálném čase informovat o změnách stavu těchto prostředků. Vytváření upozornění služby Resource Health prostřednictvím kódu programu umožňuje uživatelům hromadně vytvářet a přizpůsobovat výstrahy.

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Předpoklady

Pokud chcete postupovat podle pokynů na této stránce, musíte předem nastavit několik věcí:

  1. Musíte nainstalovat modul Azure PowerShellu .
  2. Potřebujete vytvořit nebo znovu použít skupinu akcí nakonfigurovanou tak, aby vás informovala.

Pokyny

  1. Pomocí PowerShellu se přihlaste k Azure pomocí svého účtu a vyberte předplatné, se kterým chcete pracovat.

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Seznam předplatných, ke kterým máte přístup, můžete použít Get-AzSubscription .

  2. Vyhledání a uložení úplného ID Azure Resource Manageru pro vaši skupinu akcí

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Vytvoření a uložení šablony Resource Manageru pro upozornění služby Resource Health jako resourcehealthalert.json (viz podrobnosti níže)

  4. Vytvoření nového nasazení Azure Resource Manageru pomocí této šablony

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Zobrazí se výzva k zadání názvu upozornění a ID prostředku skupiny akcí, které jste si zkopírovali dříve:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Pokud všechno fungovalo úspěšně, v PowerShellu se zobrazí potvrzení.

    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 :
    

Všimněte si, že pokud plánujete plně automatizovat tento proces, stačí upravit šablonu Resource Manageru, aby se nezobídka zobrazovala výzva k zadání hodnot v kroku 5.

Možnosti šablon Resource Manageru pro upozornění služby Resource Health

Tuto základní šablonu můžete použít jako výchozí bod pro vytváření upozornění služby Resource Health. Tato šablona bude fungovat jako napsaná a zaregistruje vás, abyste dostávali výstrahy pro všechny nově aktivované události stavu prostředků ve všech prostředcích v předplatném.

V dolní části tohoto článku jsme také zahrnuli složitější šablonu upozornění, která by měla v porovnání s touto šablonou zvýšit poměr signálu k šumu pro výstrahy služby Resource Health.

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

Obecně se ale nedoporučuje obecné upozornění, jako je tato. Zjistěte, jak můžeme omezit rozsah tohoto upozornění, abychom se mohli zaměřit na události, o které se zajímáme níže.

Úprava rozsahu upozornění

Výstrahy služby Resource Health je možné nakonfigurovat tak, aby monitorovaly události ve třech různých oborech:

  • Úroveň předplatného
  • Úroveň skupiny prostředků
  • Úroveň zdroje

Šablona upozornění se konfiguruje na úrovni předplatného, ale pokud chcete výstrahu nakonfigurovat tak, aby vás upozorňovala jenom na určité prostředky nebo prostředky v rámci určité skupiny prostředků, stačí upravit scopes oddíl v předchozí šabloně.

V případě oboru na úrovni skupiny prostředků by oddíl rozsahy měl vypadat takto:

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

V případě rozsahu na úrovni prostředků by měl oddíl rozsahu vypadat takto:

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

Například: "/subscriptions/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

Můžete přejít na web Azure Portal a podívat se na adresu URL při prohlížení prostředku Azure a získat tento řetězec.

Úprava typů prostředků, které vás upozorní

Výstrahy na úrovni předplatného nebo skupiny prostředků můžou mít různé druhy prostředků. Pokud chcete omezit upozornění tak, aby pocházela pouze z určité podmnožina typů prostředků, můžete ji definovat v condition části šablony takto:

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

Tady použijeme obálku anyOf , která umožní upozornění služby Resource Health shodovat se všemi zadanými podmínkami, což umožňuje výstrahy, které cílí na konkrétní typy prostředků.

Úprava událostí služby Resource Health, které vás upozorní

Když prostředky projdou událostí stavu, mohou projít řadou fází, které představují stav události stavu: Active, In Progress, Updateda Resolved.

Můžete být upozorněni pouze v případě, že prostředek není v pořádku, v takovém případě chcete nakonfigurovat výstrahu tak, aby upozorňovala pouze v případě status , že je Active. Pokud ale chcete být také upozorněni na ostatní fáze, můžete tyto podrobnosti přidat takto:

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

Pokud chcete být upozorněni na všechny čtyři fáze zdravotních událostí, můžete tuto podmínku odebrat pohromadě a výstraha vás upozorní bez ohledu na status vlastnost.

Poznámka:

Každý oddíl anyOf by měl obsahovat jenom jednu hodnotu typu pole.

Úprava upozornění služby Resource Health, aby se zabránilo neznámým událostem

Azure Resource Health vám může hlásit nejnovější stav vašich prostředků tím, že je neustále monitoruje pomocí spouštěčů testů. Relevantní hlášené stavy jsou: Dostupné, Nedostupné a Degradované. V situacích, kdy spouštěč a prostředek Azure nemůžou komunikovat, je však pro prostředek hlášen stav Neznámý a považuje se za událost stavu Aktivní.

Když ale prostředek hlásí "Neznámý", je pravděpodobné, že se jeho stav od poslední přesné sestavy nezměnil. Pokud chcete odstranit upozornění na neznámé události, můžete tuto logiku zadat v šabloně:

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

V tomto příkladu pouze oznamujeme události, u kterých aktuální a předchozí stav nemá hodnotu Neznámý. Tato změna může být užitečná, pokud se upozornění posílají přímo na váš mobilní telefon nebo e-mail.

Všimněte si, že v některých událostech může být vlastnost currentHealthStatus a previousHealthStatus null. Například když dojde k aktualizované události, je pravděpodobné, že se stav prostředku od poslední sestavy nezměnil, jsou k dispozici pouze další informace o události (např. příčina). Proto použití výše uvedené klauzule může vést k tomu, že se neaktivují některé výstrahy, protože vlastnosti.currentHealthStatus a properties.previousHealthStatus budou nastaveny na hodnotu null.

Úprava výstrahy, aby se zabránilo událostem iniciovaným uživatelem

Události služby Resource Health můžou aktivovat události iniciované platformou a událostmi iniciovanými uživatelem. Může být vhodné odeslat oznámení jenom v případě, že je událost stavu způsobená platformou Azure.

Upozornění můžete snadno nakonfigurovat tak, aby filtrovali jenom tyto druhy událostí:

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

Všimněte si, že pole příčiny může mít v některých událostech hodnotu null. To znamená, že probíhá přechod stavu (např. dostupný pro nedostupnost) a událost se zaprotokoluje okamžitě, aby se zabránilo zpoždění oznámení. Proto použití výše uvedené klauzule může vést k tomu, že se neaktivuje výstraha, protože hodnota vlastnosti properties.cause bude nastavena na hodnotu null.

Dokončení šablony upozornění služby Resource Health

Pomocí různých úprav popsaných v předchozí části je zde ukázková šablona, která je nakonfigurovaná tak, aby maximalizovala poměr signálu k šumu. Mějte na paměti výše uvedené upozornění, kde aktuálníHealthStatus, previousHealthStatus a příčina hodnoty vlastností mohou být v některých událostech null.

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

Budete ale vědět, jaké konfigurace jsou pro vás efektivní, a proto pomocí nástrojů, které jste naučili v této dokumentaci, proveďte vlastní přizpůsobení.

Další kroky

Další informace o službě Resource Health:

Vytvoření upozornění služby Service Health: