Konfigurowanie alertów dotyczących kondycji zasobów przy użyciu szablonów usługi Resource Manager
W tym artykule przedstawiono sposób tworzenia alertów 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:
- Musisz zainstalować moduł Azure PowerShell.
- Musisz utworzyć lub ponownie użyć grupy akcji skonfigurowanej do powiadomienia.
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
(zobacz szczegóły)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 :
[!UWAGA]
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.
main
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 opisem 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 nie jest zalecany. Dowiedz się, jak ograniczyć zakres tego alertu, aby skupić 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 niektórych zasobach lub zasobach w ramach określonej grupy zasobów, wystarczy zmodyfikować scopes
sekcję w szablonie przedstawionym powyżej.
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 ostrzegają
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: "Dostępne", "Niedostępne" i "Obniżona wydajność". Jednak w sytuacjach, w których moduł uruchamiający i zasób platformy Azure nie mogą się komunikować, stan kondycji "Nieznany" jest zgłaszany dla zasobu i jest uważany za zdarzenie kondycji "Aktywne".
Jednak gdy zasób zgłasza komunikat "Nieznany", prawdopodobnie jego stan kondycji nie uległ zmianie od czasu ostatniego dokładnego raportu. Jeśli chcesz wyeliminować alerty dotyczące zdarzeń "Nieznany", 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 wartości "Nieznany". Ta zmiana może być przydatna, jeśli alerty są wysyłane bezpośrednio na telefon komórkowy lub wiadomość e-mail.
Należy pamiętać, że właściwości currentHealthStatus i previousHealthStatus mogą mieć wartość null w niektórych zdarzeniach. Na przykład gdy wystąpi zaktualizowane zdarzenie, prawdopodobnie stan kondycji zasobu nie uległ zmianie od ostatniego raportu. Dostępne są tylko inne informacje o zdarzeniu (na przykład przyczyna). W związku z tym użycie powyższej klauzuli może spowodować, że niektóre alerty nie zostaną wyzwolone, ponieważ wartości properties.currentHealthStatus i properties.previousHealthStatus zostaną 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
}
]
}
Należy pamiętać, że w niektórych zdarzeniach pole przyczyn może mieć wartość null. 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 powyższej klauzuli może spowodować, że alert nie zostanie wyzwolony, ponieważ wartość właściwości properties.cause jest ustawiona na wartość null.
Ukończ szablon alertu usługi Resource Health
Jeśli używasz różnych korekt opisanych w poprzedniej sekcji, poniżej przedstawiono przykładowy szablon skonfigurowany do zmaksymalizowania współczynnika szumu sygnału. Należy pamiętać o zastrzeżeniach wymienionych powyżej, w których bieżącyStatus, previousHealthStatus i przyczyna wartości właściwości 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: