

 **Aidez à améliorer cette page** 

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien **Modifier cette page sur** qui se trouve dans le volet droit de chaque page.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Extraction des journaux d’un nœud géré à l’aide de kubectl et S3
<a name="auto-get-logs"></a>

Découvrez comment extraire les journaux d’un nœud géré Amazon EKS disposant de l’agent de surveillance des nœuds.

## Conditions préalables
<a name="_prerequisites"></a>

Vérifiez que vous avez les éléments suivants :
+ Un cluster Amazon EKS existant avec l’agent de surveillance des nœuds installé. Pour de plus amples informations, veuillez consulter [Détectez les problèmes de santé des nœuds et activez la réparation automatique des nœuds](node-health.md).
+ L’outil en ligne de commande `kubectl` installé et configuré pour communiquer avec votre cluster.
+ La AWS CLI s'est installée et s'est connectée avec des autorisations suffisantes pour créer des compartiments et des objets S3.
+ Une version récente de Python 3 installée
+ Le AWS SDK pour Python 3, Boto 3, est installé.

## Étape 1 : créer un compartiment S3 de destination (facultatif)
<a name="_step_1_create_s3_bucket_destination_optional"></a>

Si vous ne disposez pas encore d’un compartiment S3 pour stocker les journaux, créez-en un. Utilisez la commande AWS CLI suivante. Le compartiment utilise par défaut la liste de contrôle d’accès `private`. *bucket-name*Remplacez-le par le nom de compartiment unique que vous avez choisi.

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

## Étape 2 : créer une URL S3 pré-signée pour HTTP PUT
<a name="_step_2_create_pre_signed_s3_url_for_http_put"></a>

Amazon EKS renvoie les journaux du nœud par une opération HTTP PUT vers l’URL que vous indiquez. Dans ce tutoriel, nous allons générer une URL HTTP PUT S3 pré-signée.

Les journaux seront renvoyés sous la forme d’une archive gzip, avec l’extension `.tar.gz`.

**Note**  
Vous devez utiliser l' AWS API ou un SDK pour créer l'URL de téléchargement S3 pré-signée permettant à EKS de télécharger le fichier journal. Vous ne pouvez pas créer d'URL de téléchargement S3 pré-signée à l'aide de la AWS CLI.

1. Déterminez où vous souhaitez stocker les journaux dans le compartiment. Par exemple, vous pouvez utiliser *2024-11-12/logs1.tar.gz* comme clé.

1. Enregistrez le code Python suivant dans le fichier *presign-upload.py*. Remplacez *<bucket-name>* et *<key>*. La clé doit se terminer par `.tar.gz`.

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

1. Exécutez le script avec

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

1. Notez le résultat de l’URL. Utilisez cette valeur à l’étape suivante comme *http-put-destination*.

Pour plus d'informations, consultez [Générer une URL présignée pour télécharger un fichier](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html#generating-a-presigned-url-to-upload-a-file) dans la documentation du SDK AWS Boto3 pour Python.

## Étape 3 : Création d'une NodeDiagnostic ressource
<a name="_step_3_create_nodediagnostic_resource"></a>

Identifiez le nom du nœud à partir duquel vous souhaitez collecter les journaux.

Créez un manifeste `NodeDiagnostic` qui utilise le nom du nœud comme nom de la ressource et fournissant une destination URL HTTP PUT.

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

Appliquez le fichier manifeste à votre cluster.

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

Vous pouvez vérifier l’état de la collecte en décrivant la ressource `NodeDiagnostic` :
+ Un état `Success` ou `SuccessWithErrors` indique que la tâche est terminée et que les journaux ont été téléversés vers la destination indiquée (l’état `SuccessWithErrors` indique que certains journaux peuvent être manquants)
+ Si l’état est Échec, vérifiez que l’URL de téléversement est bien formée et qu’elle n’a pas expiré.

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

## Étape 4 : télécharger des journaux depuis S3
<a name="_step_4_download_logs_from_s3"></a>

Attendez environ une minute avant d’essayer de télécharger les journaux. Utilisez ensuite la CLI S3 pour télécharger les journaux.

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

## Étape 5 : Nettoyer les NodeDiagnostic ressources
<a name="_step_5_clean_up_nodediagnostic_resource"></a>
+  Les ressources `NodeDiagnostic` ne sont pas supprimées automatiquement. Vous devez les supprimer manuellement après avoir récupéré les artefacts de vos journaux

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

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

À partir de la version `v1.6.1-eksbuild.1` de l'agent de surveillance des nœuds, il existe une option permettant de définir la destination de collecte de journaux sur`node`. L'utilisation de cette destination entraînera la collecte et la persistance temporaire des journaux sur le nœud pour une collecte ultérieure. Outre cette fonctionnalité, le GitHub référentiel de l'agent de surveillance des nœuds contient un `kubectl` plugin que vous pouvez installer pour faciliter les interactions et la collecte des journaux. Pour plus d'informations, consultez la [documentation du `kubectl ekslogs` plugin](https://github.com/aws/eks-node-monitoring-agent/blob/main/tools/kubectl-ekslogs/README.md).

## Exemple d'utilisation
<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>
```