

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Recuperación de los registros de nodos de un nodo administrado mediante kubectl y S3
<a name="auto-get-logs"></a>

Aprenda a recuperar los registros de nodos de un nodo administrado por Amazon EKS que tenga el agente de supervisión de nodos.

## Requisitos previos
<a name="_prerequisites"></a>

Asegúrese de contar con lo siguiente:
+ Un clúster de Amazon EKS con el agente de supervisión de nodos existente. Para obtener más información, consulte [Detección de los problemas de estado de los nodos y reparación automática de los nodos](node-health.md).
+ La herramienta de línea de comandos `kubectl` instalada y configurada para comunicarse con el clúster.
+ AWS CLI instalada y sesión iniciada con los permisos suficientes para crear buckets y objetos de S3.
+ Una versión reciente de Python 3 instalada
+ El SDK de AWS para Python 3 y Boto 3 instalado.

## Paso 1: Creación de un destino de bucket de S3 (opcional)
<a name="_step_1_create_s3_bucket_destination_optional"></a>

Si aún no tiene un bucket de S3 para almacenar los registros, cree uno. Utilice el siguiente comando de AWS CLI. El bucket utiliza de manera predeterminada la lista de control de acceso `private`. Sustituya *bucket-name* por el nombre único que haya elegido.

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

## Paso 2: Creación de una URL de S3 previamente firmada para HTTP Put
<a name="_step_2_create_pre_signed_s3_url_for_http_put"></a>

Amazon EKS devuelve los registros de nodo mediante una operación HTTP PUT a una URL especificada. En este tutorial, generaremos una URL de HTTP PUT de S3 previamente firmada.

Los registros se devolverán como un gzip tarball, con la extensión `.tar.gz`.

**nota**  
Debe usar la API de AWS o un SDK para crear la URL de carga previamente firmada de S3 para que EKS cargue el archivo de registro. No puede crear una URL de carga previamente firmada de S3 mediante AWS CLI.

1. Determine en qué parte del bucket desea almacenar los registros. Por ejemplo, puede utilizar *2024-11-12/logs1.tar.gz* como clave.

1. Copie el siguiente código de Python en el archivo *presign-upload.py*. Sustituya *<bucket-name>* y *<key>*. La clave debe terminar con `.tar.gz`.

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

1. Ejecute el script con

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

1. Anote la URL de resultado. Utilice este valor en el siguiente paso como *http-put-destination*.

Para obtener más información, 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) en la documentación del AWS SDK para Python Boto3.

## Paso 3: Creación del recurso de NodeDiagnostic
<a name="_step_3_create_nodediagnostic_resource"></a>

Identifique el nombre del nodo del que desea recopilar los registros.

Cree un manifiesto `NodeDiagnostic` que utilice el nombre del nodo como nombre del recurso y que proporcione un destino de URL de HTTP PUT.

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

Aplique el manifiesto al clúster.

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

Para comprobar el estado de la recopilación, puede describir el recurso `NodeDiagnostic`:
+ Un estado de `Success` o `SuccessWithErrors` indica que la tarea se completó y los registros se cargaron en el destino indicado (`SuccessWithErrors` indica que es posible que falten algunos registros)
+ Si el estado es Error, confirme que la URL de carga esté formada correctamente y no haya caducado.

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

## Paso 4: Descarga de los registros de S3
<a name="_step_4_download_logs_from_s3"></a>

Espere aproximadamente un minuto antes de intentar descargar los registros. A continuación, use la CLI de S3 para descargar los registros.

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

## Paso 5: Cómo limpiar el recurso de NodeDiagnostic
<a name="_step_5_clean_up_nodediagnostic_resource"></a>
+  Los recursos de `NodeDiagnostic` no se eliminan automáticamente. Deberá limpiarlos por cuenta propia después de haber obtenido los artefactos de registro

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

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

A partir de la versión `v1.6.0` del agente de supervisión de nodos, existe la opción de establecer el destino de la recopilación de registros en `node`. El uso de este destino permitirá recopilar y conservar temporalmente los registros en el nodo para su posterior recopilación. Además de esta funcionalidad, en el repositorio de GitHub del agente de supervisión de nodos hay un complemento `kubectl` que puede instalar para facilitar la interacción y la recopilación de registros. Para obtener más información, consulte la [documentación del complemento `kubectl ekslogs`](https://github.com/aws/eks-node-monitoring-agent/blob/main/tools/kubectl-ekslogs/README.md).

## Ejemplo 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>
```