Comment puis-je transférer les journaux des applications Amazon EMR vers CloudWatch ?

Lecture de 5 minute(s)
0

Je souhaite transférer les journaux des applications Amazon EMR vers Amazon CloudWatch pour les versions 5.30.0 et ultérieures d'Amazon EMR.

Brève description

Utilisez l'agent CloudWatch pour collecter des métriques et des journaux à partir des instances Amazon Elastic Compute Cloud (Amazon EC2). Puis, configurez les instances de cluster Amazon EMR pour publier les journaux d’application sur CloudWatch.

Résolution

Prérequis :

Créer un fichier de configuration de l'agent CloudWatch.

Créer le fichier de configuration

Pour transférer des journaux d'application spécifiques depuis vos instances Amazon EMR, utilisez l'un des exemples suivants pour créer un fichier de configuration.

Transférer les journaux pour l'application YARN sur tous les nœuds

L'exemple de fichier de configuration suivant transfère les journaux de conteneurs de chaque instance Amazon EMR :

{
    "agent": {
            "metrics_collection_interval": 300,
            "run_as_user": "yarn"
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                    "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*",
                     "log_group_name": "/emr/applications/",
                     "log_stream_name": "{instance_id}-{ip_address}",
                     "publish_multi_logs" : true
                    }
                ]
            }
        }
    }
}

Remarque : Remplacez /var/log/hadoop-yarn/containers/application_*/container*/* par l'emplacement de votre chemin de fichier.

Transférer les journaux pour l’application YARN et Hive Server 2 sur le nœud principal

L'exemple de fichier de configuration suivant transfère les journaux du gestionnaire de ressources Yarn et les journaux du serveur Hive depuis le nœud principal EMR :

{
    "agent": {
            "metrics_collection_interval": 300,
            "run_as_user": "hadoop"
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                    "file_path": "/mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-*",
                    "log_group_name": "/emr/master/logs",
                    "log_stream_name": "{instance_id}-{ip_address}-resourcemanager.log"
                    },
                    {
                    "file_path": "/mnt/var/log/hive/hive-server2.log",
                    "log_group_name": "/emr/master/logs",
                    "log_stream_name": "{instance_id}-{ip_address}-hive-server2.log"
                    }
                ]
            }
        }
    }
}

Remarque : Remplacez /mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-* par l'emplacement de votre chemin de fichier.

Charger le fichier de configuration vers le compartiment S3

Chargez le fichier de configuration dans un compartiment Amazon Simple Storage Service (Amazon S3).

Remarque : Le cluster Amazon EMR doit disposer des autorisations AWS Identity and Access Management (IAM) pour accéder au compartiment S3.

Lancer Amazon EMR

Dans le cadre de l'action d'amorçage Amazon EMR, exécutez le script suivant pour configurer l'agent CloudWatch et lancer le processus de l'agent CloudWatch :

# == Install CloudWatch Agent ==
echo "=================== BootstrapActions: Install CloudWatch Agent ==================="

sudo yum install amazon-cloudwatch-agent -y
sudo amazon-linux-extras install collectd -y

# Copy config file on the instance
sudo aws s3 cp s3://<your-s3-path>/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json

# Start the agent with the created config file
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

# Status CW Agent
echo "Status CW Agent"
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

Remarque : Remplacez s3://<your-s3-path>/config.json avec le chemin de votre environnement.

(Facultatif) Soumettre une application Spark

Pour générer des exemples de journaux d'application, exécutez la commande suivante depuis le nœud leader du cluster Amazon EMR pour démarrer une application Spark :

spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10

Utiliser la console CloudWatch pour surveiller CloudWatch Logs

  1. Ouvrez la console CloudWatch.
  2. Dans le volet de navigation, sous Journaux, sélectionnez Groupes de journaux.
  3. Sélectionnez le groupe de journaux que vous souhaitez afficher en fonction du fichier de configuration.
  4. Si vous utilisez l'exemple de fichier config.json de l'exemple précédent, effectuez l'une des tâches suivantes :
    Pour afficher les journaux d’application, sélectionnez /emr/applications.
    Pour afficher les journaux de leader, sélectionnez /emr/master/logs.

Remarque : Les journaux des événements CloudWatch sont automatiquement supprimés uniquement lorsque vous configurez une politique de rétention pour le groupe de journaux. Vous pouvez également configurer vos paramètres de rétention pour optimiser vos coûts. Pour plus d'informations, consultez la section Changer la conservation des données de journalisation dans CloudWatch Logs.

(Facultatif) Utiliser Systems Manager pour installer l'agent CloudWatch sur Amazon EMR

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Utilisez AWS Systems Manager pour stocker le contenu du fichier de l'agent. Puis, reportez-vous au fichier Systems Manager lorsque vous démarrez l'agent CloudWatch.

  1. Utilisez la console Systems Manager ou l'AWS CLI pour créer un paramètre Systems Manager. Puis, stockez le contenu du fichier de l'agent. L'exemple suivant utilise l'interface de ligne de commande AWS pour créer le paramètre :

    aws ssm put-parameter \
         --name "AmazonCloudWatch-Config.json" \
         --value "{
                     "agent": {
                             "metrics_collection_interval": 300,
                             "run_as_user": "yarn"
                     },
                     "logs": {
                        "logs_collected": {
                            "files": {
                                "collect_list": [
                                    {
                                    "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*",
                                    "log_group_name": "/emr/applications/",
                                    "log_stream_name": "{instance_id}",
                                    "publish_multi_logs" : true
                                    }
                                ]
                            }
                        }
                     }
             }" \
         --type String

    Remarque : Remplacez /var/log/hadoop-yarn/containers/application_*/container*/* par l'emplacement de votre chemin de fichier. Dans l'exemple précédent, le fichier de configuration transfère les journaux de conteneurs de chaque instance Amazon EMR. Pour plus d'informations sur les paramètres de System Manager, consultez la section Création de paramètres de Systems Manager.

  2. Mettre à jour le script d'action d’amorçage pour faire référence au paramètre :

    # Start the agent with the created config file
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c ssm:AmazonCloudWatch-Config.json

Informations connexes

Exécuter une action d’amorçage de manière conditionnelle

Afficher les fichiers journaux sur le nœud principal

Exécution de l'agent CloudWatch en tant qu'utilisateur différent

Afficher les données de journal envoyées à CloudWatch Logs

Comment puis-je collecter des métriques personnalisées à partir d'instances de cluster Amazon EMR et les surveiller dans CloudWatch ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an