Udostępnij za pośrednictwem


Konfigurowanie alertów dotyczących kondycji zasobów przy użyciu szablonów usługi Resource Manager

W tym artykule pokazano, jak programowo tworzyć alerty dziennika aktywności usługi Resource Health przy użyciu szablonów usługi Azure Resource Manager i programu Azure PowerShell.

Usługa Azure Resource Health informuje o bieżącym i historycznym stanie kondycji zasobów platformy Azure. Alerty usługi Azure Resource Health mogą powiadamiać użytkownika niemal w czasie rzeczywistym o zmianie stanu kondycji tych zasobów. Programowe tworzenie alertów usługi Resource Health umożliwia użytkownikom tworzenie i dostosowywanie alertów zbiorczo.

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Wymagania wstępne

Aby postępować zgodnie z instrukcjami na tej stronie, musisz skonfigurować kilka rzeczy z wyprzedzeniem:

  1. Zainstaluj moduł Azure PowerShell.
  2. Utwórz lub ponownie użyj grupy akcji skonfigurowanej do powiadamiania Użytkownika.

Instrukcje

  1. Użyj programu PowerShell, aby zalogować się na platformie Azure przy użyciu konta i wybrać subskrypcję, z którą chcesz korzystać.

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Uwaga

    Możesz użyć Get-AzSubscription polecenia , aby wyświetlić listę subskrypcji, do których masz dostęp.

  2. Znajdź i zapisz pełny identyfikator usługi Azure Resource Manager dla grupy akcji.

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Tworzenie i zapisywanie szablonu usługi Resource Manager dla alertów usługi Resource Health jako resourcehealthalert.json można znaleźć w temacie Resource Manager template options for Resource Health alerts (Opcje szablonu usługi Resource Manager dla alertów usługi Resource Health).

  4. Utwórz nowe wdrożenie usługi Azure Resource Manager przy użyciu tego szablonu.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Zostanie wyświetlony monit o wpisenie nazwy alertu i skopiowanego wcześniej identyfikatora zasobu grupy akcji:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Jeśli wszystko zadziałało pomyślnie, otrzymasz potwierdzenie w programie 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 :
    

Jeśli planujesz w pełni zautomatyzować ten proces, wystarczy zmodyfikować szablon usługi Resource Manager, aby nie wyświetlić monitu o wartości w kroku 5.

Opcje szablonu usługi Resource Manager dla alertów usługi Resource Health

Możesz użyć tego szablonu podstawowego jako punktu wyjścia do tworzenia alertów usługi Resource Health. Ten szablon działa zgodnie z zapisem i zarejestruje Cię, aby otrzymywać alerty dotyczące wszystkich nowo aktywowanych zdarzeń kondycji zasobów we wszystkich zasobach w subskrypcji.

Uwaga

W dolnej części tego artykułu dołączyliśmy również bardziej złożony szablon alertu, który powinien zwiększyć współczynnik szumu sygnału dla alertów usługi Resource Health w porównaniu z tym szablonem.

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

Jednak ogólny alert podobny do tego zwykle nie jest zalecany. W poniższej sekcji dowiesz się, jak ograniczyć zakres tego alertu, aby skoncentrować się na zdarzeniach, o których nam zależy.

Dostosowywanie zakresu alertu

Alerty usługi Resource Health można skonfigurować do monitorowania zdarzeń w trzech różnych zakresach:

  • Poziom subskrypcji
  • Poziom grupy zasobów
  • Poziom zasobu

Szablon alertu jest skonfigurowany na poziomie subskrypcji, ale jeśli chcesz skonfigurować alert, aby powiadomić Cię tylko o określonych zasobach lub zasobach w ramach określonej grupy zasobów, wystarczy zmodyfikować scopes sekcję w tym szablonie.

W przypadku zakresu na poziomie grupy zasobów sekcja zakresów powinna wyglądać następująco:

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

W przypadku zakresu na poziomie zasobu sekcja zakresu powinna wyglądać następująco:

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

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

Uwaga

Możesz przejść do witryny Azure Portal i przyjrzeć się adresowi URL podczas wyświetlania zasobu platformy Azure, aby uzyskać ten ciąg.

Dostosowywanie typów zasobów, które alerty

Alerty na poziomie subskrypcji lub grupy zasobów mogą mieć różne rodzaje zasobów. Jeśli chcesz ograniczyć alerty tylko z określonego podzestawu typów zasobów, możesz zdefiniować je w condition sekcji szablonu w następujący sposób:

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

W tym miejscu użyjemy anyOf otoki, aby umożliwić alertowi kondycji zasobów dopasowanie dowolnego określonego przez nas warunków, umożliwiając alerty przeznaczone dla określonych typów zasobów.

Dostosowywanie zdarzeń usługi Resource Health, które ostrzegają

Gdy zasoby przechodzą zdarzenie kondycji, mogą przejść przez szereg etapów reprezentujących stan zdarzenia kondycji: Active, , In ProgressUpdatedi Resolved.

Możesz otrzymywać powiadomienia tylko wtedy, gdy zasób stanie się w złej kondycji, w tym przypadku chcesz skonfigurować alert, aby powiadamiać tylko wtedy, gdy status element ma wartość Active. Jeśli jednak chcesz również otrzymywać powiadomienia na innych etapach, możesz dodać te szczegóły w następujący sposób:

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

Jeśli chcesz otrzymywać powiadomienia o wszystkich czterech etapach zdarzeń kondycji, możesz usunąć ten warunek razem, a alert powiadamia Cię niezależnie od status właściwości.

Uwaga

Każda sekcja "anyOf" powinna zawierać tylko jedną wartość typu pola.

Dostosowywanie alertów usługi Resource Health w celu uniknięcia zdarzeń "Nieznany"

Usługa Azure Resource Health może zgłaszać najnowszą kondycję zasobów, stale monitorując je przy użyciu modułów uruchamiającego testy. Odpowiednie zgłoszone stany kondycji to: Available, Unavailablei Degraded. Jednak w sytuacjach, gdy moduł uruchamiający i zasób platformy Azure nie mogą się komunikować, Unknown stan kondycji jest zgłaszany dla zasobu i jest uważany za zdarzenie kondycji "Aktywne".

Jednak gdy zasób raportuje Unknown, prawdopodobnie jego stan kondycji nie uległ zmianie od czasu ostatniego dokładnego raportu. Jeśli chcesz wyeliminować alerty dotyczące Unknown zdarzeń, możesz określić logikę w szablonie:

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

W tym przykładzie powiadamiamy tylko o zdarzeniach, w których bieżący i poprzedni stan kondycji nie ma Unknownwartości . Ta zmiana może być przydatna, jeśli alerty są wysyłane bezpośrednio na telefon komórkowy lub wiadomość e-mail.

Istnieje możliwość, aby currentHealthStatus właściwości i previousHealthStatus miały wartość null w niektórych zdarzeniach. Na przykład po wystąpieniu zdarzenia Zaktualizowano prawdopodobnie stan kondycji zasobu nie uległ zmianie od czasu ostatniego raportu, tylko że więcej informacji o zdarzeniu jest dostępnych (na przykład przyczyna). W związku z tym użycie klauzuli w tym przykładzie może spowodować, że niektóre alerty nie są wyzwalane, ponieważ properties.currentHealthStatus wartości i properties.previousHealthStatus są ustawione na wartość null.

Dostosowywanie alertu w celu uniknięcia zdarzeń inicjowanych przez użytkownika

Zdarzenia usługi Resource Health mogą być wyzwalane przez zdarzenia inicjowane przez platformę i inicjowane przez użytkownika. Warto wysłać powiadomienie tylko wtedy, gdy zdarzenie kondycji jest spowodowane przez platformę Azure.

Alert można łatwo skonfigurować tak, aby filtrować tylko pod kątem tego rodzaju zdarzeń:

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

Istnieje możliwość, że pole przyczyny będzie mieć wartość null w niektórych zdarzeniach. Oznacza to, że następuje przejście kondycji (na przykład dostępne dla niedostępności), a zdarzenie jest rejestrowane natychmiast, aby zapobiec opóźnieniom powiadomień. W związku z tym użycie klauzuli w tym przykładzie może spowodować, że alert nie zostanie wyzwolony, ponieważ properties.cause wartość właściwości zostanie ustawiona na wartość null.

Ukończ szablon alertu usługi Resource Health

Oto przykładowy szablon, który jest skonfigurowany przy użyciu korekt opisanych w poprzedniej sekcji w celu zmaksymalizowania współczynnika szumu sygnału. Należy pamiętać o zastrzeżeniach wymienionych powyżej, w których currentHealthStatuswartości właściwości , previousHealthStatusi mogą mieć wartość null w niektórych zdarzeniach.

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

Jednak wiesz najlepiej, jakie konfiguracje są skuteczne, więc użyj narzędzi, których nauczysz się w tej dokumentacji, aby dostosować własne ustawienia.

Następne kroki

Dowiedz się więcej o usłudze Resource Health:

Tworzenie alertów usługi Service Health: