Serviço de Metadados do Azure: Eventos Agendados para VMs do Linux
Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjunto de dimensionamento uniformes
Os eventos agendados são um serviço de metadados do Azure que dá ao aplicativo tempo para se preparar para a manutenção de máquinas virtuais (VM). Ele fornece informações sobre eventos de manutenção futuros (por exemplo, reinicializar) para que seu aplicativo possa se preparar e limitar a interrupção. Ele está disponível para todos os tipos de Máquinas Virtuais do Azure, incluindo PaaS e IaaS no Windows e no Linux.
Para saber mais sobre os eventos agendados no Windows, veja Eventos Agendados para VMs do Windows.
Observação
Eventos Agendados estão disponível geralmente em todas as regiões do Azure. Consulte Disponibilidade de Versão e Região para obter informações sobre a versão mais recente.
Por que usar Eventos Agendados?
Muitos aplicativos podem se beneficiar do tempo para se preparar para a manutenção de VMs. O tempo pode ser usado para executar tarefas específicas de aplicativo que melhoram a disponibilidade, a confiabilidade e a capacidade de manutenção, incluindo:
- Ponto de verificação e restauração.
- Descarregamento de conexão.
- Failover de réplica primária.
- Remoção de um pool de balanceador de carga.
- Log de eventos.
- Desligamento normal.
Com Eventos Agendados, seu aplicativo pode descobrir quando a manutenção ocorrerá e acionará tarefas para limitar seu impacto.
Os eventos agendados fornecem eventos nos seguintes casos de uso:
- Manutenção iniciada pela plataforma (por exemplo, reinicialização de VM, migração ao vivo ou atualizações de preservação de memória para host)
- A máquina virtual está em execução no hardware de host degradado que tem previsão para falhar em breve
- A máquina virtual estava em execução em um host que sofreu uma falha de hardware
- Manutenção iniciada pelo usuário (por exemplo, um usuário reinicia ou reimplanta uma VM)
- Remoção de instâncias VM spot e Conjunto de dimensionamento spot.
Noções básicas
O Serviço de Metadados do Azure expõe informações sobre a execução de VMs usando um ponto de extremidade REST acessível de dentro da VM. As informações estão disponíveis por meio de um IP não roteável para que ele não seja exposto fora da VM.
Escopo
Os eventos agendados são entregues a:
- Máquinas virtuais autônomas.
- Todas as VMs em um serviço de nuvem.
- Todas as VMs em um conjunto de disponibilidade.
- Todas as VMs em uma zona de disponibilidade.
- Todas as VMs em um grupo de posicionamento do conjunto de dimensionamento.
Observação
Específico para VMs em uma zona de disponibilidade, os eventos agendados vão para VMs únicas em uma zona. Por exemplo, se você tiver 100 VMs em um conjunto de disponibilidade e houver uma atualização para uma delas, o evento agendado irá para todas as 100, mas, se houver 100 VMs únicas em uma zona, o evento irá apenas para a VM que está sendo afetada.
Como resultado, verifique o campo Resources
no evento para identificar quais VMs são afetadas.
Descoberta do ponto de extremidade
Para VMs habilitadas para VNET, o serviço de metadados está disponível de um IP não roteável estático, 169.254.169.254
. O ponto de extremidade completo para a versão mais recente dos eventos agendados é:
http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
Se a VM não for criada em uma Rede Virtual, os casos padrão para serviços de nuvem e VMs clássicas, uma lógica adicional será necessária para descobrir o endereço IP a ser utilizado. Consulte esse exemplo para saber como descobrir o ponto de extremidade do host.
Disponibilidade de Versão e Região
O serviço de Eventos Agendados tem controle de versão. As versões são obrigatórias; a versão atual é 2020-07-01
.
Versão | Tipo de Versão | Regiões | Notas de versão |
---|---|---|---|
2020-07-01 | Disponibilidade geral | Todos | |
01-08-2019 | Disponibilidade geral | Todos | |
01-04-2019 | Disponibilidade geral | Todos | |
2019-01-01 | Disponibilidade geral | Todos | |
2017-11-01 | Disponibilidade geral | Todos | |
2017-08-01 | Disponibilidade geral | Todos | |
2017-03-01 | Visualização | Todos |
Observação
Versões prévias anteriores de Eventos Agendados compatíveis {mais recentes} como a api-version. Esse formato não é mais suportado e será substituído no futuro.
Habilitar e Desabilitar Eventos Agendados
Eventos Agendados são habilitados para o serviço na primeira vez em que você faz uma solicitação para eventos. Você deve esperar um atraso na resposta em sua primeira chamada de até dois minutos.
Eventos Agendados são desabilitados para o serviço se ele não fizer uma solicitação por 24 horas.
Manutenção iniciada pelo usuário
A manutenção de VMs iniciada pelo usuário pelo Portal do Azure, API, CLI ou PowerShell resulta em um evento agendado. Você pode então testar a lógica de preparação de manutenção em seu aplicativo e permite que seu aplicativo se prepare para manutenção iniciada pelo usuário.
Se você reinicia uma VM, um evento com o tipo Reboot
é agendado. Se você reimplanta uma VM, um evento com o tipo Redeploy
é agendado.
Usar a API
headers
Ao consultar o Serviço de Metadados você deverá fornecer o cabeçalho Metadata:true
para garantir que a solicitação não foi redirecionada de forma involuntária. O cabeçalho Metadata:true
é necessário para todas as solicitações de eventos programados. A não inclusão do cabeçalho na solicitação resulta em uma resposta de "Solicitação Incorreta" do Serviço de Metadados.
Consulta de eventos
Você pode consultar Eventos Agendados realizando a chamada a seguir:
Exemplo de bash
curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
Uma resposta contém uma matriz de eventos agendados. Uma matriz vazia significa que não há eventos agendados no momento. No caso de haver eventos agendados, a resposta contém uma matriz de eventos.
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled" | "Started",
"NotBefore": {timeInUTC},
"Description": {eventDescription},
"EventSource" : "Platform" | "User",
"DurationInSeconds" : {timeInSeconds},
}
]
}
Propriedades do evento
Propriedade | Descrição |
---|---|
EventId | Identificador global exclusivo para esse evento. Exemplo:
|
EventType | Impacto desse evento. Valores:
|
ResourceType | O tipo de recurso que esse evento afeta. Valores:
|
Recursos | A lista de recursos que esse evento afeta. É garantido que a lista contém máquinas de no máximo um domínio de atualização, mas pode não conter todas as máquinas no UD. Exemplo:
|
EventStatus | Status desse evento. Valores:
Completed ou status semelhante é fornecido em nenhum momento. O evento não é mais retornado quando é concluído. |
NotBefore | Tempo após o qual esse evento pode começar. Exemplo:
|
Descrição | A descrição deste evento. Exemplo:
|
EventSource | Iniciador do evento. Exemplo:
|
DurationInSeconds | A duração esperada da interrupção causada pelo evento. Exemplo:
|
Agendamento do evento
Cada evento é agendado uma quantidade mínima de tempo no futuro com base no tipo de evento. Esse tempo é refletido na propriedades NotBefore
de um evento.
EventType | Aviso mínimo |
---|---|
Congelamento | 15 minutos |
Reboot | 15 minutos |
Reimplantar | 10 minutos |
Preempt | 30 segundos |
Terminate | Configurável pelo usuário: De 5 a 15 minutos |
Observação
Em alguns casos, o Azure é capaz de prever a falha do host devido a hardware degradado e agendará uma migração para tentar reduzir a interrupção em seu serviço. As máquinas virtuais afetadas receberão um evento agendado com um NotBefore
, que normalmente é de alguns dias no futuro. O tempo real depende da avaliação de risco da falha prevista. O Azure tenta avisar com sete dias de antecedência, quando possível, mas o tempo real varia e poderá ser menor se houver uma previsão de grande chance de falha de software iminente. Para minimizar o risco para o serviço caso o hardware falhe antes da migração iniciada pelo sistema, recomendamos que você reimplante sua máquina virtual assim que possível.
Observação
Quando o nó de host apresenta uma falha de hardware, o Azure ignora o período mínimo de aviso prévio e inicia imediatamente o processo de recuperação das máquinas virtuais afetadas. Isso reduz o tempo de recuperação, caso as VMs afetadas não consigam responder. Durante o processo de recuperação, um evento é criado para todas as VMs afetadas com EventType = Reboot e EventStatus = Started
Frequência de sondagem
Você pode fazer uma sondagem do ponto de extremidade para buscar atualizações com a frequência que desejar. No entanto, quanto maior o tempo entre as solicitações, mais tempo você pode perder para reagir a um evento futuro. A maioria dos eventos tem entre 5 e 15 minutos de aviso prévio, embora, em alguns casos, esse aviso possa ser de apenas 30 segundos. Para garantir que você tenha o máximo de tempo possível para realizar ações de mitigação, recomendamos monitorar o serviço uma vez por segundo.
Iniciar um evento
Após a descoberta de um evento futuro e concluído sua lógica de desligamento normal, você poderá aprovar o evento pendente fazendo uma chamada POST
para o Serviço de Metadados com EventId
. Essa chamada indica para o Azure que ele pode encurtar o tempo mínimo de notificação (quando possível).
A seguir vemos o exemplo de JSON esperado no corpo da solicitação POST
. A solicitação deve conter uma lista de StartRequests
. Cada StartRequest
contém o EventId
para o evento que você deseja agilizar:
{
"StartRequests" : [
{
"EventId": {EventId}
}
]
}
Exemplo de bash
curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
Observação
Reconhecer um evento permite que o evento prossiga para todos Resources
no evento, e não apenas a VM que reconhece o evento. Portanto, é possível eleger um líder para coordenar o reconhecimento, que pode ser tão simples como a primeira máquina no campo Resources
.
Exemplo de Python
O exemplo a seguir consulta o Serviço de Metadados para eventos agendados e aprova cada evento pendente:
#!/usr/bin/python
import json
import socket
import urllib2
metadata_url = "http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01"
this_host = socket.gethostname()
def get_scheduled_events():
req = urllib2.Request(metadata_url)
req.add_header('Metadata', 'true')
resp = urllib2.urlopen(req)
data = json.loads(resp.read())
return data
def handle_scheduled_events(data):
for evt in data['Events']:
eventid = evt['EventId']
status = evt['EventStatus']
resources = evt['Resources']
eventtype = evt['EventType']
resourcetype = evt['ResourceType']
notbefore = evt['NotBefore'].replace(" ", "_")
description = evt['Description']
eventSource = evt['EventSource']
if this_host in resources:
print("+ Scheduled Event. This host " + this_host +
" is scheduled for " + eventtype +
" by " + eventSource +
" with description " + description +
" not before " + notbefore)
# Add logic for handling events here
def main():
data = get_scheduled_events()
handle_scheduled_events(data)
if __name__ == '__main__':
main()
Próximas etapas
- Examine os Exemplos de código de Eventos Agendados no Repositório GitHub de Eventos Agendados de Metadados de Instância do Azure.
- Leia mais sobre as APIs disponíveis no Serviço de Metadados de Instância.
- Saiba mais sobre a manutenção planejada para máquinas virtuais do Linux no Azure .