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:
- Zainstaluj moduł Azure PowerShell.
- Utwórz lub ponownie użyj grupy akcji skonfigurowanej do powiadamiania Użytkownika.
Instrukcje
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.Znajdź i zapisz pełny identyfikator usługi Azure Resource Manager dla grupy akcji.
(Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
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).
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>
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>
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 Progress
Updated
i 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
, Unavailable
i 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 Unknown
wartoś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 currentHealthStatus
wartości właściwości , previousHealthStatus
i 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:
- Omówienie funkcji Azure Resource Health
- Typy zasobów i kontrole kondycji dostępne w usłudze Azure Resource Health
Tworzenie alertów usługi Service Health: