A ação ACS::AlarmTrigger monitora uma métrica do CloudMonitor e aciona tarefas subsequentes em um modelo OOS quando a métrica ultrapassa um limiar. Use este recurso para criar fluxos de trabalho de autorrecuperação, como reiniciar automaticamente uma instância ECS quando o uso da CPU exceder 90%.
Funcionamento
Uma execução OOS com
ACS::AlarmTriggerinicia com o status Pending.Quando a métrica atinge o limiar especificado, a execução muda para o status Active.
O OOS executa as tarefas seguintes definidas no modelo para remediar o alerta.
O AlarmTrigger oferece suporte a dois tipos de métricas do CloudMonitor:
Métricas nativas do ECS: disponíveis sem configuração adicional.
Métricas coletadas por agente: exigem o agente do CloudMonitor na instância. Para instalar o agente, acesse o console CloudMonitor, acesse Host Monitoring, selecione a instância de destino e clique em Install. Consulte as descrições de métricas do CloudMonitor para identificar o tipo de cada métrica.
Limitações
Um modelo pode conter apenas uma ação de gatilho.
A ação de gatilho deve ser a primeira tarefa do modelo.
Não é possível usar ações de gatilho em modelos filhos (modelos incorporados).
Propriedades
|
Propriedade |
Obrigatória |
Tipo |
Descrição |
|
Namespace |
Sim |
String |
Namespace do CloudMonitor do serviço monitorado (por exemplo, |
|
MetricName |
Sim |
String |
Nome da métrica (exemplo: |
|
Statistics |
Sim |
String |
Método de agregação aplicado aos dados da métrica, como |
|
ComparisonOperator |
Sim |
String |
Operador que compara o valor da métrica com o limiar. Veja Operadores de comparação. |
|
Threshold |
Sim |
String |
Valor que dispara o alerta (por exemplo, |
|
Resources |
Sim |
String |
Array JSON que especifica os recursos a monitorar. Consulte Formatos de recurso. |
|
Times |
Sim |
Integer |
Quantidade de violações consecutivas necessárias para disparar o alerta. |
|
Interval |
Não |
Integer |
Intervalo de avaliação em segundos. Padrão: |
|
SilenceTime |
Não |
Integer |
Duração do silêncio em segundos. Nesse período, o sistema envia apenas uma notificação de alerta, mesmo que a métrica continue acima do limiar. Padrão: |
|
Period |
Não |
Integer |
Período de agregação em segundos. Padrão: período original de relatório da métrica (geralmente |
|
Tags |
Não |
JSON |
Filtra os recursos monitorados por tag. Formato: |
|
ResourceGroup |
Não |
String |
Filtra os recursos monitorados pelo ID do grupo de recursos (exemplo: |
Operadores de comparação
|
Valor |
Significado |
|
|
>= limiar |
|
|
> limiar |
|
|
<= limiar |
|
|
< limiar |
|
|
!= limiar |
|
|
Aumento em relação ao mesmo horário de ontem |
|
|
Redução em relação ao mesmo horário de ontem |
|
|
Aumento em relação ao mesmo horário da semana passada |
|
|
Redução em relação ao mesmo horário da semana passada |
|
|
Aumento em relação ao período anterior |
|
|
Redução em relação ao período anterior |
Formatos de recurso
|
Escopo |
Formato |
|
Todos os recursos da conta atual |
|
|
Uma instância específica |
|
|
Uma partição de disco específica |
|
|
Várias partições de disco |
|
Saídas
Use o bloco Outputs para extrair valores do JSON do evento de alerta. Especifique um ValueSelector com uma expressão de caminho JSON (por exemplo, .instanceId).
Estrutura JSON do evento de alerta:
{
"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"
}
|
Campo |
Descrição |
|
instanceId |
ID da instância que disparou o alerta |
|
curLevel |
Nível de severidade do alerta |
|
Average / Minimum / Maximum |
Valores agregados da métrica |
|
ruleName |
Nome da regra de alerta |
|
userId |
ID da conta Alibaba Cloud |
|
timestamp |
Timestamp Unix (milissegundos) do evento de alerta |
|
executionId |
ID da execução OOS |
Sintaxe
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"
}
}
}
]
}
Exemplo: Reiniciar uma instância ECS devido a alto uso de CPU
Este modelo monitora instâncias ECS com tags específicas. Quando o uso médio de CPU de uma instância ultrapassa o limiar em uma janela de avaliação de 1 minuto, o OOS verifica se a instância possui a tag esperada e a reinicia.
Pré-requisitos:
Agente do CloudMonitor instalado nas instâncias de destino.
Função RAM
OOSServiceRoleexistente (ou especifique uma função personalizada).
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 }}"
}
}
]
}