

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Recuperar logs de nós de um nó gerenciado usando kubectl e S3
<a name="auto-get-logs"></a>

Saiba como recuperar logs de nós de um nó gerenciado do Amazon EKS que tem o agente de monitoramento de nós.

## Pré-requisitos
<a name="_prerequisites"></a>

Certifique-se de ter o seguinte:
+ Um cluster existente do Amazon EKS com o agente de monitoramento de nós. Para obter mais informações, consulte [Detectar problemas de integridade dos nós e habilitar o reparo automático dos nós](node-health.md).
+ A ferramenta de linha de comandos da `kubectl` instalada e configurada para se comunicar com o cluster.
+ A AWS CLI instalada e conectada com permissões suficientes para criar buckets e objetos do S3.
+ Uma versão recente do Python 3 instalada
+ O AWS SDK para Python 3, Boto 3, instalado.

## Etapa 1: criar um bucket de destino do S3 (opcional)
<a name="_step_1_create_s3_bucket_destination_optional"></a>

Caso ainda não tenha um bucket do S3 para armazenar os logs, crie um. Use o comando da AWS CLI a seguir. O bucket usa como padrão a lista de controle de acesso `private`. Substitua *bucket-name* pelo nome exclusivo do bucket escolhido.

```
aws s3api create-bucket --bucket <bucket-name>
```

## Etapa 2: criar um URL do S3 pré-assinado para HTTP PUT
<a name="_step_2_create_pre_signed_s3_url_for_http_put"></a>

O Amazon EKS retorna os logs dos nós fazendo uma operação HTTP PUT em um URL especificado por você. Neste tutorial, vamos gerar um URL de HTTP PUT do S3 pré-assinado.

Os logs serão retornados como um tarball gzip, com a extensão `.tar.gz`.

**nota**  
Você deve usar a API ou um SDK da AWS para criar o URL de upload do S3 pré-assinado para que o EKS faça o upload do arquivo de logs. Você não pode criar um URL de upload do S3 pré-assinado usando a AWS CLI.

1. Determine em que parte do bucket você deseja armazenar os logs. Por exemplo, você pode usar *2024-11-12/logs1.tar.gz* como a chave.

1. Salve o código Python abaixo no arquivo *presign-upload.py*. Substitua *<bucket-name>* e *<key>*. A chave deve terminar com `.tar.gz`.

   ```
   import boto3; print(boto3.client('s3').generate_presigned_url(
      ClientMethod='put_object',
      Params={'Bucket': '<bucket-name>', 'Key': '<key>'},
      ExpiresIn=1000
   ))
   ```

1. Execute o script com

   ```
   python presign-upload.py
   ```

1. Observe a saída do URL. Use esse valor na próxima etapa como *http-put-destination*.

Para obter mais informações, consulte [Generate a presigned URL to upload a file](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html#generating-a-presigned-url-to-upload-a-file) na documentação do AWS Boto3 SDK para Python.

## Etapa 3: criar um recurso NodeDiagnostic
<a name="_step_3_create_nodediagnostic_resource"></a>

Identifique o nome do nós do qual deseja coletar os logs.

Crie um manifesto `NodeDiagnostic` que use o nome do nó como nome do recurso e forneça um destino de URL de HTTP PUT.

```
apiVersion: eks.amazonaws.com/v1alpha1
kind: NodeDiagnostic
metadata:
    name: <node-name>
spec:
    logCapture:
        destination: http-put-destination
```

Aplique o manifesto ao cluster.

```
kubectl apply -f nodediagnostic.yaml
```

Você pode verificar o status da coleta descrevendo o recurso `NodeDiagnostic`:
+ Um status de `Success` ou `SuccessWithErrors` indica que a tarefa foi concluída e os logs foram enviados para o destino fornecido (`SuccessWithErrors` indica que alguns logs podem estar ausentes)
+ Se o status for Falha, confirme se o URL de upload está formado de forma correta e não expirou.

```
kubectl describe nodediagnostics.eks.amazonaws.com/<node-name>
```

## Etapa 4: fazer download dos logs do S3
<a name="_step_4_download_logs_from_s3"></a>

Aguarde aproximadamente um minuto antes de tentar fazer download dos logs. Em seguida, use a CLI do S3 para fazer download dos logs.

```
# Once NodeDiagnostic shows Success status, download the logs
aws s3 cp s3://<bucket-name>/key ./<path-to-node-logs>.tar.gz
```

## Etapa 5: limpar o recurso NodeDiagnostic
<a name="_step_5_clean_up_nodediagnostic_resource"></a>
+  Os recursos `NodeDiagnostic` não são excluídos automaticamente. Você deve limpá-los por conta própria depois de obter os artefatos de logs.

```
# Delete the NodeDiagnostic resource
kubectl delete nodediagnostics.eks.amazonaws.com/<node-name>
```

## Destino do NodeDiagnostic `node`
<a name="_nodediagnostic_node_destination"></a>

A partir da versão `v1.6.1-eksbuild.1` do Node Monitoring Agent, existe uma opção para definir o destino da coleta de logs como `node`. A utilização deste destino resultará na coleta e no armazenamento temporário de logs no nó para posterior coleta. Além dessa funcionalidade, no repositório do Node Monitoring Agent no GitHub há um plug-in `kubectl` que você pode instalar para facilitar a interação e a coleta de logs. Para obter mais informações, consulte a [documentação do plug-in `kubectl ekslogs`](https://github.com/aws/eks-node-monitoring-agent/blob/main/tools/kubectl-ekslogs/README.md).

## Exemplo de uso
<a name="_example_usage"></a>

```
# Collect NodeDiagnostic logs from a single node
kubectl ekslogs <node-name>

# Collect NodeDiagnostic logs from multiple nodes
kubectl ekslogs <node-name-1> <node-name-2> <node-name-3>

# Collect NodeDiagnostic logs from all nodes with a specific label
kubectl ekslogs -l <key>=<value>
```