L'action ACS::AlarmTrigger surveille une métrique CloudMonitor et déclenche les tâches suivantes d'un modèle OOS lorsque la métrique franchit un seuil. Utilisez-la pour créer des workflows d'auto-réparation, par exemple pour redémarrer automatiquement une instance ECS lorsque son utilisation du CPU dépasse 90 %.
Fonctionnement
Une exécution OOS contenant
ACS::AlarmTriggerdémarre avec le statut Pending.Lorsque la métrique spécifiée atteint le seuil, l'exécution passe au statut Active.
OOS exécute les tâches suivantes définies dans le modèle pour remédier à l'alerte.
AlarmTrigger prend en charge deux types de métriques CloudMonitor :
Métriques natives ECS : disponibles sans configuration supplémentaire.
Métriques collectées par l'agent : nécessitent l'installation de l'agent CloudMonitor sur l'instance. Pour installer l'agent, accédez à la console CloudMonitor, allez dans Host Monitoring, sélectionnez l'instance cible et cliquez sur Install. Consultez les descriptions des métriques CloudMonitor pour déterminer le type auquel appartient une métrique.
Limites
Un modèle ne peut contenir qu'une seule action de déclenchement.
L'action de déclenchement doit être la première tâche du modèle.
Les actions de déclenchement ne peuvent pas être utilisées dans les modèles enfants (modèles imbriqués).
Propriétés
| Propriété | Obligatoire | Type | Description |
|---|---|---|---|
| Namespace | Oui | String | Namespace CloudMonitor du service à surveiller (par exemple, acs_ecs_dashboard pour ECS). Interrogez les valeurs valides à l'aide de l'opération DescribeMetricMetaList. |
| MetricName | Oui | String | Nom de la métrique (par exemple, cpu_total). Interrogez les valeurs valides à l'aide de DescribeMetricMetaList. |
| Statistics | Oui | String | Méthode d'agrégation appliquée aux données de métrique, telle que Average, Maximum ou Minimum. Interrogez les valeurs valides à l'aide de DescribeMetricMetaList. |
| ComparisonOperator | Oui | String | Opérateur qui compare la valeur de la métrique au seuil. Voir Opérateurs de comparaison. |
| Threshold | Oui | String | Valeur qui déclenche l'alerte (par exemple, "90" pour une utilisation du CPU de 90 %). |
| Resources | Oui | String | Tableau JSON spécifiant les ressources à surveiller. Voir Formats de ressource. |
| Times | Oui | Integer | Nombre de violations consécutives requises avant le déclenchement de l'alerte. |
| Interval | Non | Integer | Intervalle d'évaluation en secondes. Par défaut : 60. |
| SilenceTime | Non | Integer | Durée de mise en sourdine en secondes. Pendant cette période, une seule notification d'alerte est envoyée même si la métrique dépasse continuellement le seuil. Par défaut : 86400 (24 heures). Minimum : 3600 (1 heure). |
| Period | Non | Integer | Période d'agrégation en secondes. Par défaut : période de rapport originale de la métrique (généralement 60 pour les métriques ECS). |
| Tags | Non | JSON | Filtrez les ressources surveillées par tag. Format : [{"Key": "k1", "Value": "v1"}]. Mutuellement exclusif avec ResourceGroup. |
| ResourceGroup | Non | String | Filtrez les ressources surveillées par ID de groupe de ressources (par exemple, rg-xxxx). Mutuellement exclusif avec Tags. |
Opérateurs de comparaison
| Valeur | Signification |
|---|---|
GreaterThanOrEqualToThreshold |
>= seuil |
GreaterThanThreshold |
> seuil |
LessThanOrEqualToThreshold |
<= seuil |
LessThanThreshold |
< seuil |
NotEqualToThreshold |
!= seuil |
GreaterThanYesterday |
Augmentation par rapport à la même heure la veille |
LessThanYesterday |
Diminution par rapport à la même heure la veille |
GreaterThanLastWeek |
Augmentation par rapport à la même heure la semaine précédente |
LessThanLastWeek |
Diminution par rapport à la même heure la semaine précédente |
GreaterThanLastPeriod |
Augmentation par rapport à la période précédente |
LessThanLastPeriod |
Diminution par rapport à la période précédente |
Formats de ressource
| Étendue | Format |
|---|---|
| Toutes les ressources sous le compte actuel | [{"resource":"_ALL"}] |
| Une instance spécifique | [{"instanceId":"i-bp123467zxcvb"}] |
| Une partition de disque spécifique | [{"instanceId":"i-bp123467zxcvb","device":"/dev/vda1"}] |
| Plusieurs partitions de disque | [{"instanceId":"i-bp123467zxcvb","device":"/dev/vda1"},{"instanceId":"i-bp123467zxcvb","device":"/dev/vdb1"}] |
Sorties
Utilisez le bloc Outputs pour extraire des valeurs du JSON de l'événement d'alerte. Spécifiez un ValueSelector à l'aide d'une expression de chemin JSON (par exemple, .instanceId).
Structure JSON de l'événement d'alerte :
{
"curLevel": "INFO",
"Minimum": "34.00",
"Maximum": "95.00",
"instanceId": "i-abc12345zxcv",
"Average": "85.00",
"ruleName": "alarmtrigger-13012345678-exec-2130c0c073fa487098d3",
"userId": "13012345678",
"timestamp": "1598349720000",
"executionId": "exec-2130c0c073fa487098d3",
"sourceAliUid": "13012345678"
}
| Champ | Description |
|---|---|
| instanceId | ID de l'instance qui a déclenché l'alerte |
| curLevel | Niveau de gravité de l'alerte |
| Average / Minimum / Maximum | Valeurs de métrique agrégées |
| ruleName | Nom de la règle d'alerte |
| userId | ID du compte Alibaba Cloud |
| timestamp | Horodatage Unix (millisecondes) de l'événement d'alerte |
| executionId | ID d'exécution OOS |
Syntaxe
YAML
Tasks:
- Name: <task-name>
Action: 'ACS::AlarmTrigger'
Properties:
Namespace: 'acs_ecs_dashboard'
MetricName: 'cpu_total'
Statistics: 'Average'
ComparisonOperator: 'GreaterThanThreshold'
Threshold: '90'
Resources: '[{"resource":"_ALL"}]'
Times: 1
Interval: 60
SilenceTime: 3600
Outputs:
instanceId:
Type: String
ValueSelector: .instanceId
JSON
{
"Tasks": [
{
"Name": "<task-name>",
"Action": "ACS::AlarmTrigger",
"Properties": {
"Namespace": "acs_ecs_dashboard",
"MetricName": "cpu_total",
"Statistics": "Average",
"ComparisonOperator": "GreaterThanThreshold",
"Threshold": "90",
"Resources": "[{\"resource\":\"_ALL\"}]",
"Times": 1,
"Interval": 60,
"SilenceTime": 3600
},
"Outputs": {
"instanceId": {
"Type": "String",
"ValueSelector": ".instanceId"
}
}
}
]
}
Exemple : Redémarrer une instance ECS en cas de CPU élevé
Ce modèle surveille les instances ECS correspondant à des tags spécifiques. Lorsque l'utilisation moyenne du CPU d'une instance dépasse le seuil dans une fenêtre d'évaluation d'une minute, OOS vérifie que l'instance possède le tag attendu, puis la redémarre.
Prérequis :
L'agent CloudMonitor est installé sur les instances cibles
Le rôle RAM
OOSServiceRoleexiste (ou spécifiez un rôle personnalisé)
YAML
FormatVersion: OOS-2019-06-01
Description:
en: Reboot ECS instance with specified tag when its CPU utilization exceeded threshold. The selected instance must already have the Cloud Monitor agent installed.
name-en: ACS-ECS-RebootInstanceAtHighCpuByTags
categories:
- alarm-trigger
Parameters:
tags:
Type: Json
Description:
en: The tags to select ECS instances.
AssociationProperty: Tags
threshold:
Type: Number
Description:
en: The CPU utilization threshold.
silenceTime:
Type: Number
Description:
en: The silence time of alarm (seconds).
Default: 60
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: alarmTrigger
Action: 'ACS::AlarmTrigger'
Description:
en: Set the CPU utilization alarm for ECS instance.
Properties:
Namespace: acs_ecs_dashboard
MetricName: cpu_total
Statistics: Average
ComparisonOperator: GreaterThanThreshold
Threshold: '{{threshold}}'
Times: 1
SilenceTime: '{{ silenceTime }}'
Period: 60
Interval: 60
Outputs:
InstanceId:
Type: String
ValueSelector: .instanceId
- Name: CheckForInstances
Action: 'ACS::CheckFor'
Description:
en: Check ECS instance has specified tag.
OnError: 'ACS::END'
Properties:
Service: ECS
API: DescribeInstances
Parameters:
Tags: '{{ tags }}'
InstanceIds: '["{{ alarmTrigger.instanceId }}"]'
PropertySelector: TotalCount
DesiredValues:
- 1
- Name: RebootInstance
Action: 'ACS::ECS::RebootInstance'
Description:
en: Restarts the ECS instances.
Properties:
instanceId: '{{ alarmTrigger.instanceId }}'
JSON
{
"FormatVersion": "OOS-2019-06-01",
"Description": {
"en": "Reboot ECS instance with specified tag when its CPU utilization exceeded threshold. The selected instance must already have the Cloud Monitor agent installed.",
"name-en": "ACS-ECS-RebootInstanceAtHighCpuByTags",
"categories": ["alarm-trigger"]
},
"Parameters": {
"tags": {
"Type": "Json",
"Description": { "en": "The tags to select ECS instances." },
"AssociationProperty": "Tags"
},
"threshold": {
"Type": "Number",
"Description": { "en": "The CPU utilization threshold." }
},
"silenceTime": {
"Type": "Number",
"Description": { "en": "The silence time of alarm (seconds)." },
"Default": 60
},
"OOSAssumeRole": {
"Description": { "en": "The RAM role to be assumed by OOS." },
"Type": "String",
"Default": "OOSServiceRole"
}
},
"RamRole": "{{ OOSAssumeRole }}",
"Tasks": [
{
"Name": "alarmTrigger",
"Action": "ACS::AlarmTrigger",
"Description": { "en": "Set the CPU utilization alarm for ECS instance." },
"Properties": {
"Namespace": "acs_ecs_dashboard",
"MetricName": "cpu_total",
"Statistics": "Average",
"ComparisonOperator": "GreaterThanThreshold",
"Threshold": "{{threshold}}",
"Times": 1,
"SilenceTime": "{{ silenceTime }}",
"Period": 60,
"Interval": 60
},
"Outputs": {
"InstanceId": {
"Type": "String",
"ValueSelector": ".instanceId"
}
}
},
{
"Name": "CheckForInstances",
"Action": "ACS::CheckFor",
"Description": { "en": "Check ECS instance has specified tag." },
"OnError": "ACS::END",
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"Tags": "{{ tags }}",
"InstanceIds": "[\"{{ alarmTrigger.instanceId }}\"]"
},
"PropertySelector": "TotalCount",
"DesiredValues": [1]
}
},
{
"Name": "RebootInstance",
"Action": "ACS::ECS::RebootInstance",
"Description": { "en": "Restarts the ECS instances." },
"Properties": {
"instanceId": "{{ alarmTrigger.instanceId }}"
}
}
]
}