Journalisation des événements de l’application Spark dans Athena - Amazon Athena

Journalisation des événements de l’application Spark dans Athena

L'éditeur de bloc-notes Athena permet la journalisation standard sur Jupyter, Spark et Python. Vous pouvez utiliser df.show() pour afficher le contenu de PySpark DataFrame ou utiliser print("Output") pour afficher les valeurs dans la sortie de la cellule. Les sorties stdout, stderr et results de vos calculs sont écrites dans votre compartiment de résultats de requête dans Amazon S3.

Journalisation des événements de l’application Spark dans Amazon CloudWatch

Vos sessions Athena peuvent également écrire des journaux sur Amazon CloudWatch dans le compte que vous utilisez.

Présentation des flux de journaux et des groupes de journaux

CloudWatch organise l'activité des journaux en flux de journaux et en groupes de journaux.

Flux de journaux – Le flux de journalisation CloudWatch est une séquence d'événements du journal qui partagent la même source. Chaque source distincte de journaux dans CloudWatch Logs constitue un flux de journaux distinct.

Groupes de journaux – Dans CloudWatch Logs, le groupe de journaux est un groupe de flux de journaux qui partagent les mêmes paramètres de rétention, de surveillance et de contrôle d'accès.

Le nombre de flux de journaux pouvant appartenir à un groupe de journaux est illimité.

Dans Athena, lorsque vous démarrez une session de bloc-notes pour la première fois, Athena crée un groupe de journaux dans CloudWatch qui utilise le nom de votre groupe de travail compatible avec Spark, comme dans l'exemple suivant.

/aws-athena/workgroup-name

Ce groupe de journaux reçoit un flux de journaux pour chaque exécuteur de votre session qui produit au moins un événement du journal. L'exécuteur est la plus petite unité de calcul qu'une session de bloc-notes peut demander à Athena. Dans CloudWatch, le nom du flux de journaux commence par l'ID de la session et l'ID de l'exécuteur.

Pour plus d'informations sur les groupes de journaux et les flux de journaux CloudWatch, voir la rubrique Utilisation des groupes de journaux et des flux de journaux du Guide de l'utilisateur d'Amazon CloudWatch Logs.

Utilisation d’objets de journalisation standard dans Athena pour Spark

Dans une session Athena pour Spark, vous pouvez utiliser les deux objets de journalisation standard globaux suivants pour écrire des journaux sur Amazon CloudWatch :

  • athena_user_logger – Envoie les journaux à CloudWatch uniquement. Utilisez cet objet lorsque vous souhaitez journaliser les informations de vos applications Spark directement sur CloudWatch, comme dans l'exemple suivant.

    athena_user_logger.info("CloudWatch log line.")

    L'exemple écrit un événement du journal sur CloudWatch comme suit :

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: CloudWatch log line.
  • athena_shared_logger – Envoie le même journal à la fois à CloudWatch et à AWS des fins d'assistance. Vous pouvez utiliser cet objet pour partager les journaux avec les équipes de service AWS pour la résolution des problèmes, comme dans l'exemple suivant.

    athena_shared_logger.info("Customer debug line.") var = [...some variable holding customer data...] athena_shared_logger.info(var)

    L'exemple enregistre la ligne debug et la valeur de la variable var dans CloudWatch Logs et envoie une copie de chaque ligne à Support.

    Note

    Pour des raisons de confidentialité, votre code de calcul et vos résultats ne sont pas partagés avec AWS. Veillez à ce que vos appels à athena_shared_logger n'écrivent que les informations que vous voulez rendre visibles à Support.

Les enregistreurs fournis écrivent des événements via Apache Log4j et héritent les niveaux de journalisation de cette interface. Les valeurs de niveau de journalisation possibles sont DEBUG, ERROR, FATAL, INFO, WARN et WARNING. Vous pouvez utiliser la fonction nommée correspondante sur l'enregistreur pour produire ces valeurs.

Note

Ne reliez pas les noms athena_user_logger ou athena_shared_logger. Cela empêche les objets de journalisation d'écrire sur CloudWatch pendant le reste de la session.

La procédure suivante montre comment journaliser les événements du bloc-notes Athena sur Amazon CloudWatch Logs.

Journalisation des événements du bloc-notes Athena dans Amazon CloudWatch Logs
  1. Suivez Prise en main d’Apache Spark dans Amazon Athena pour créer un groupe de travail compatible avec Spark dans Athena avec un nom unique. Ce tutoriel utilise le nom de groupe de travail athena-spark-example.

  2. Suivez les étapes de Étape 7 : Création de votre propre bloc-notes pour créer un bloc-notes et lancer une nouvelle session.

  3. Dans l'éditeur de bloc-notes Athena, dans une nouvelle cellule de bloc-notes, saisissez la commande suivante :

    athena_user_logger.info("Hello world.")
  4. Exécuter la cellule.

  5. Récupérez l'ID de la session actuelle en effectuant l'une des opérations suivantes :

    • Affichez la sortie de la cellule (par exemple, ... session=72c24e73-2c24-8b22-14bd-443bdcd72de4).

    • Dans une nouvelle cellule, exécutez la commande magique %session_id.

  6. Enregistrer l'ID de la session.

  7. En utilisant le même Compte AWS que celui utilisé pour exécuter la session de bloc-notes, ouvrez la console CloudWatch à l'adresse https://console.aws.amazon.com/cloudwatch/.

  8. Dans le volet de navigation de la console CloudWatch, choisissez Log groups (Groupe de journaux).

  9. Dans la liste des groupes de journaux, choisissez le groupe de journaux qui porte le nom de votre groupe de travail Athena compatible avec Spark, comme dans l'exemple suivant.

    /aws-athena/athena-spark-example

    La section Log streams (Flux de journaux) contient une liste d'un ou plusieurs liens de flux de journaux pour le groupe de travail. Le nom de chaque flux de journaux contient l'ID de la session, l'ID de l'exécuteur et l'UUID unique, séparés par des barres obliques.

    Par exemple, si l'ID de la session est 5ac22d11-9fd8-ded7-6542-0412133d3177 et l'ID de l'exécuteur est f8c22d11-9fd8-ab13-8aba-c4100bfba7e2, le nom du flux de journaux ressemble à l'exemple suivant.

    5ac22d11-9fd8-ded7-6542-0412133d3177/f8c22d11-9fd8-ab13-8aba-c4100bfba7e2/f012d7cb-cefd-40b1-90b9-67358f003d0b
  10. Choisissez le lien du flux de journaux pour votre session.

  11. Sur la page Log events (Événements du journal), consultez la colonne Message.

    L'événement du journal pour la cellule que vous avez exécutée ressemble à ce qui suit :

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
  12. Retournez à l'éditeur de blocs-notes Athena.

  13. Dans une nouvelle cellule, saisissez le code suivant. Le code enregistre une variable dans CloudWatch :

    x = 6 athena_user_logger.warn(x)
  14. Exécuter la cellule.

  15. Revenez à la page Log events (Événements du journal) de la console CloudWatch pour le même flux de journal.

  16. Le flux de journaux contient maintenant une entrée d'événement du journal avec un message comme le suivant :

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 WARN builtins: 6