

# Enviar uma interrupção para diagnóstico para depurar uma instância inacessível do Amazon EC2
<a name="diagnostic-interrupt"></a>

**Atenção**  
As interrupções de diagnóstico são destinadas ao uso de usuários avançados. O uso incorreto pode ter um impacto negativo sobre sua instância. Enviar uma interrupção de diagnóstico para uma instância pode acionar uma instância para travar e reinicializar, o que pode levar à perda de dados.

É possível enviar uma interrupção de diagnóstico para uma instância inacessível ou que não responde com a finalidade de acionar manualmente um *kernel panic* para uma instância do Linux ou um *erro de parada* (comumente chamado de *erro de tela azul*) para uma instância do Windows.

**Instâncias do Linux**  
Os sistemas operacionais Linux normalmente falham e reinicializam quando ocorre um pânico de kernel. O comportamento específico do sistema operacional depende de sua configuração. Um pânico de kernel também pode ser usado para fazer com que o kernel do sistema operacional da instância execute tarefas, como a geração de um arquivo de despejo de falha. É possível usar as informações no arquivo de despejo da falha para conduzir uma análise de causa raiz e depurar a instância. Os dados do despejo da falha são gerados localmente pelo sistema operacional na própria instância.

**Instâncias do Windows**  
Em geral, os sistemas operacionais Windows falham e reinicializam quando ocorre um erro de parada, mas o comportamento específico depende de sua configuração. Um erro de parada também pode fazer com que o sistema operacional grave informações de depuração, como um despejo de memória de kernel, em um arquivo. É possível usar essas informações para conduzir análises de causa raiz para depurar a instância. Os dados do despejo da memória são gerados localmente pelo sistema operacional na própria instância.

Antes de enviar uma interrupção de diagnóstico para sua instância, recomendamos que você consulte a documentação do seu sistema operacional e, em seguida, faça as alterações de configuração necessárias.

**Topics**
+ [Tipos de instâncias compatíveis](#diagnostic-interrupt-instances)
+ [Pré-requisitos](#diagnostic-interrupt-prereqs)
+ [Enviar uma interrupção para diagnóstico](#diagnostic-interrupt-use)

## Tipos de instâncias compatíveis
<a name="diagnostic-interrupt-instances"></a>

A interrupção do diagnóstico é compatível com todos os tipos de instância baseadas em Nitro, exceto as que são ativadas pelos processadores AWS Graviton. Para obter mais informações, consulte [Instances built on the AWS Nitro System](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) e [AWS Graviton](https://aws.amazon.com/ec2/graviton/).

## Pré-requisitos
<a name="diagnostic-interrupt-prereqs"></a>

Antes de usar uma interrupção para diagnóstico, configure o sistema operacional da instância. Isso garantirá que o sistema operacional execute as ações necessárias quando ocorrer um kernel panic (instâncias do Linux) ou um erro de parada (instâncias do Windows).

### Instâncias do Linux
<a name="diagnostic-interrupt-prereqs-linux"></a>

**Para configurar o Amazon Linux 2 ou o Amazon Linux 2023 para gerar um despejo de falha quando ocorrer um pânico de kernel**

1. Conecte-se à sua instância.

1. Instale **kexec** e **kdump**.

   ```
   [ec2-user ~]$ sudo yum install kexec-tools -y
   ```

1. Configure o kernel para reservar uma quantidade de memória para o kernel secundário. A quantidade de memória a ser reservada depende da memória disponível total de sua instância. Abra o arquivo `/etc/default/grub` usando o editor de texto de sua preferência, localize a linha que começa com `GRUB_CMDLINE_LINUX_DEFAULT` e adicione o parâmetro `crashkernel` no seguinte formato: `crashkernel=memory_to_reserve`. Por exemplo, para reservar `256MB`, modifique o arquivo `grub` da seguinte forma:

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="crashkernel=256M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"
   GRUB_TIMEOUT=0
   GRUB_DISABLE_RECOVERY="true"
   ```

1. Salve as alterações e feche o arquivo `grub`.

1. Recompile o arquivo de configuração do GRUB2.

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. Em instâncias com base em processadores Intel e AMD, o comando `send-diagnostic-interrupt` envia uma *interrupção não mascarável* (NMI - non-maskable interrupt) desconhecida para a instância. É necessário configurar o kernel para falhar quando receber a NMI desconhecida. Abra o arquivo `/etc/sysctl.conf` usando o editor de texto de sua preferência e adicione o seguinte.

   ```
   kernel.unknown_nmi_panic=1
   ```

1. Reinicialize e reconecte-se a sua instância.

1. Verifique se o kernel foi inicializado com o parâmetro `crashkernel` correto.

   ```
   $ grep crashkernel /proc/cmdline
   ```

   A saída do seguinte exemplo indica uma configuração bem-sucedida.

   ```
   BOOT_IMAGE=/boot/vmlinuz-4.14.128-112.105.amzn2.x86_64 root=UUID=a1e1011e-e38f-408e-878b-fed395b47ad6 ro crashkernel=256M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0
   ```

1. Verifique se o serviço **kdump** está em execução.

   ```
   [ec2-user ~]$ systemctl status kdump.service
   ```

   A saída do seguinte exemplo mostrará o resultado se o **kdump** estiver em execução.

   ```
   kdump.service - Crash recovery kernel arming
      Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
      Active: active (exited) since Fri 2019-05-24 23:29:13 UTC; 22s ago
     Process: 2503 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
    Main PID: 2503 (code=exited, status=0/SUCCESS)
   ```

**nota**  
Por padrão, o arquivo de dump da falha é salvo em `/var/crash/`. Para alterar o local, modifique o arquivo `/etc/kdump.conf` usando o editor de texto de sua preferência.

**Para configurar o SUSE Linux Enterprise, o Ubuntu ou o Red Hat Enterprise Linux**  
Em instâncias com base em processadores Intel e AMD, o comando `send-diagnostic-interrupt` envia uma *interrupção não mascarável* (NMI - non-maskable interrupt) desconhecida para a instância. É necessário configurar o kernel para falhar quando ele receber a NMI desconhecida. Para fazer isso, ajuste o arquivo de configuração para o seu sistema operacional. Para obter mais informações sobre como configurar o kernel para falhar, consulte a documentação do sistema operacional.
+ [SUSE Linux Enterprise](https://www.suse.com/support/kb/doc/?id=3374462)
+ [Ubuntu](https://ubuntu.com/server/docs/kernel-crash-dump)
+ [ Red Hat Enterprise Linux (RHEL)](https://access.redhat.com/solutions/6038)

### Instâncias do Windows
<a name="diagnostic-interrupt-prereqs-windows"></a>

**Para configurar o Windows para gerar um despejo de memória quando ocorrer um erro de parada.**

1. Conecte-se à sua instância.

1. Abra o **Control Panel (Painel de controle)** e escolha **System (Sistema)**, **Advanced system settings (Configurações avançadas do sistema)**.

1. Na caixa de diálogo **System Properties (Propriedades do sistema)**, escolha a guia **Advanced (Avançado)**.

1. Na seção **Startup and Recovery (Inicialização e recuperação)**, escolha **Settings... (Configurações...)**.

1. Na seção **System failure (Falha do sistema)**, defina as configurações conforme necessário e escolha **OK**.

Para obter mais informações sobre como configurar os erros de parada do Windows, consulte [ Visão geral das opções do arquivo de despejo de memória do Windows](https://support.microsoft.com/en-us/help/254649/overview-of-memory-dump-file-options-for-windows).

## Enviar uma interrupção para diagnóstico
<a name="diagnostic-interrupt-use"></a>

Depois de concluir as alterações necessárias na configuração, é possível enviar uma interrupção de diagnóstico para a instância usando a AWS CLI ou a API do Amazon EC2.

------
#### [ AWS CLI ]

**Para enviar uma interrupção para diagnóstico para sua instância**  
Use o comando [send-diagnostic-interrupt](https://docs.aws.amazon.com/cli/latest/reference/ec2/send-diagnostic-interrupt.html).

```
aws ec2 send-diagnostic-interrupt --instance-id i-1234567890abcdef0
```

------
#### [ PowerShell ]

**Para enviar uma interrupção para diagnóstico para sua instância**  
Use o cmdlet [Send-EC2DiagnosticInterrupt](https://docs.aws.amazon.com/powershell/latest/reference/items/Send-EC2DiagnosticInterrupt.html).

```
Send-EC2DiagnosticInterrupt -InstanceId i-1234567890abcdef0
```

------