Amazon EMR on EC2 — Verbesserte Überwachung mit CloudWatch benutzerdefinierten Metriken und Protokollen - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon EMR on EC2 — Verbesserte Überwachung mit CloudWatch benutzerdefinierten Metriken und Protokollen

Übersicht

Amazon EMR bietet leistungsstarke, kostengünstige Funktionen zur Verarbeitung großer Datenmengen. Um Leistung und Ressourcennutzung zu maximieren, ist eine effektive Überwachung unerlässlich. Amazon CloudWatch bietet umfassende Beobachtbarkeit für EMR-Cluster, sodass Sie Metriken und Protokolle in Echtzeit verfolgen können. In diesem Dokument wird beschrieben, wie Sie:

  1. Konfigurieren Sie den CloudWatch Agenten zum Senden von EC2 EMR-On-Protokollen an CloudWatch

  2. Fügen Sie mithilfe von Klassifizierungen benutzerdefinierte Hadoop-, YARN- und HBase Metriken hinzu

  3. Überwachen Sie Metriken über integrierte Dashboards

  4. Verfolgen Sie Cluster-Logs über CloudWatch Protokollgruppen

Voraussetzungen und Hintergrund

Standardmäßig sendet Amazon EMR ohne zusätzliche Kosten CloudWatch alle fünf Minuten grundlegende Metriken. Mit EMR Version 7.0+ können Sie den CloudWatch Agenten einsetzen für:

  • Erfassen Sie 34 zusätzliche detaillierte Messwerte in Intervallen von einer Minute (es fallen zusätzliche Gebühren an)

  • Sammeln Sie Metriken von allen Clusterknoten

  • Aggregieren Sie Daten auf dem primären Knoten, bevor Sie sie an senden CloudWatch

  • Greifen Sie über die Registerkarte Monitoring oder die Konsole der EMR-Konsole auf Metriken zu CloudWatch

EMR 7.1 erweitert diese Funktionen, sodass Sie den Agenten so konfigurieren können, dass er spezielle Metriken aus Hadoop, YARN und HBase Komponenten erfasst. Für Umgebungen, in denen Prometheus verwendet wird, können Metriken an Amazon Managed Service for Prometheus weitergeleitet werden.

CloudWatch Agentenkonfiguration für Protokolle

Um EMR-Logs zu erfassen CloudWatch, erstellen Sie eine cloudwatch-config.json-Datei, die definiert, welche Protokolldateien gesammelt werden sollen:

cloudwatch-config.json

{ "agent": {"metrics_collection_interval":60,"logfile":"/var/log/emr-cluster-metrics/amazon-cloudwatch-agent/amazon-cloudwatch-agent.log","run_as_user":"****","omit_hostname":true}, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-*", "log_group_name": "/emr/yarn/resourcemnger", "log_stream_name": "{instance_id}", "publish_multi_logs" : true }, { "file_path": "/var/log/hadoop-hdfs/hadoop-hdfs-namenode-*", "log_group_name": "/emr/hdfs/namenode", "log_stream_name": "{instance_id}", "publish_multi_logs" : true } ] } } } }

Bootstrap-Skript für die Agentenkonfiguration CloudWatch

Um Ihre benutzerdefinierte CloudWatch Konfiguration auf EMR-Knoten anzuwenden, erstellen Sie ein Bootstrap-Skript, das den CloudWatch Agenten mit Ihren Einstellungen neu startet. Dieses Skript stellt sicher, dass der Agent nach der Cluster-Bereitstellung mit Ihren spezifischen Protokollerfassungsparametern ausgeführt wird.

Das Bootstrap-Skript erstellen

Erstellen Sie eine Datei namens cloudwatch-agent-bootstrap.sh mit dem folgenden Inhalt:

#!/bin/bash set -xe EMR_SECONDARY_BA_SCRIPT=$(cat << 'EOF' while true; do NODEPROVISIONSTATE=$(sed -n '/localInstance [{]/,/[}]/ {/nodeProvisionCheckinRecord [{]/,/[}]/ {/status:/ p}}' /emr/instance-controller/lib/info/job-flow-state.txt | awk '{ print $2 }') if [ "$NODEPROVISIONSTATE" == "SUCCESSFUL" ]; then sleep 10 echo "Running my post provision bootstrap" NODETYPE=$(cat /mnt/var/lib/instance-controller/extraInstanceData.json | jq -r '.instanceRole' | awk '{print tolower($0)}') # Copy config file on the instance sudo aws s3 cp s3://amzn-s3-demo-bucket1>/cloudwatch-config.json /etc/emr-cluster-metrics/amazon-cloudwatch-agent/conf/emr-amazon-cloudwatch-agent.json # Stop the current agent sudo /usr/bin/amazon-cloudwatch-agent-ctl -a stop # Start the agent with the created config file sudo /usr/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c file:/etc/emr-cluster-metrics/amazon-cloudwatch-agent/conf/emr-amazon-cloudwatch-agent.json # Status CW Agent echo "Status CW Agent" sudo /usr/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status exit fi sleep 10 done EOF ) echo "${EMR_SECONDARY_BA_SCRIPT}" | tee -a /tmp/emr-secondary-ba.sh chmod u+x /tmp/emr-secondary-ba.sh /tmp/emr-secondary-ba.sh > /tmp/emr-secondary-ba.log 2>&1 & exit 0

Wichtiger Hinweis zur Konfiguration

Wichtig

Bevor Sie das Skript hochladen, <amzn-s3-demo-bucket1> ersetzen Sie es durch den tatsächlichen Namen Ihres S3-Buckets, in dem Sie die Datei cloudwatch-config.json aus dem vorherigen Schritt gespeichert haben. Dadurch wird sichergestellt, dass das Bootstrap-Skript Ihre Konfigurationsdatei während der Cluster-Initialisierung abrufen kann.

Dieses Bootstrap-Skript wird:

  • Warten Sie, bis die Knotenbereitstellung abgeschlossen ist

  • Laden Sie Ihre benutzerdefinierte Konfiguration CloudWatch herunter

  • Stoppen Sie jeden laufenden CloudWatch Agenten

  • Starten Sie den Agenten mit Ihrer spezifischen Konfiguration neu

  • Protokollieren Sie den Status des Agenten zur Fehlerbehebung

Benutzerdefinierte metrische Klassifizierungen für Hadoop, YARN und HBase

Zusätzlich zu den CloudWatch Standardmetriken können Sie Ihre Überwachungsfunktionen verbessern, indem Sie benutzerdefinierte anwendungsspezifische Metriken für Ihre EMR-Clusterkomponenten konfigurieren. Die Konfigurations-API von Amazon EMR bietet eine flexible Möglichkeit, genau zu definieren, welche Metriken Sie sammeln möchten.

Konfiguration benutzerdefinierter Metriken

Sie können die Erfassung benutzerdefinierter Metriken auf zwei Arten implementieren:

  • Während der Clustererstellung für neue Cluster

  • Als Rekonfiguration für bestehende Cluster über die EMR-Konsole

Eine Klassifizierungsdatei erstellen

Die Klassifizierungsdatei definiert, welche spezifischen Komponentenmetriken aus Ihrem Cluster gesammelt werden sollen. Im Folgenden finden Sie eine Beispielstruktur für die Erfassung benutzerdefinierter Hadoop-Metriken:

[ { "Classification": "emr-metrics", "Configurations": [ { "Classification": "emr-hadoop-hdfs-datanode-metrics", "Properties": { "Hadoop:service=DataNode,name=DataNodeActivity-*": "DatanodeNetworkErrors,TotalReadTime,TotalWriteTime,BytesRead,BytesWritten,RemoteBytesRead,RemoteBytesWritten,ReadBlockOpNumOps,ReadBlockOpAvgTime,WriteBlockOpNumOps,WriteBlockOpAvgTime", "otel.metric.export.interval": "30000" } }, { "Classification": "emr-hadoop-yarn-nodemanager-metrics", "Properties": { "Hadoop:service=NodeManager,name=JvmMetrics": "MemNonHeapUsedM,MemNonHeapCommittedM,MemNonHeapMaxM,MemHeapUsedM,MemHeapCommittedM,MemHeapMaxM,MemMaxM", "Hadoop:service=NodeManager,name=NodeManagerMetrics": "ContainerCpuUtilization,NodeCpuUtilization,ContainersCompleted,ContainersFailed,ContainersKilled,ContainersLaunched,ContainersRolledBackOnFailure,ContainersRunning,ContainerUsedMemGB,ContainerUsedVMemGB,ContainerLaunchDurationNumOps,ContainerLaunchDurationAvgTime", "otel.metric.export.interval": "20000" } } ], "Properties": {} } ]

Implementierungsschritte

  1. Erstellen Sie eine JSON-Datei mit den gewünschten metrischen Klassifizierungen.

  2. Passen Sie die Metriken an Ihre Überwachungsanforderungen an.

  3. Speichern Sie die Datei und laden Sie sie in Ihren S3-Bucket hoch.

  4. Verweisen Sie auf diese Datei, wenn Sie einen neuen Cluster erstellen oder einen vorhandenen neu konfigurieren.

Bewährte Methoden

  • Erfassen Sie nur Metriken, die aussagekräftige Erkenntnisse für Ihre Workloads liefern.

  • Berücksichtigen Sie das Intervall für die Erfassung von Metriken auf der Grundlage Ihrer Überwachungsanforderungen.

  • Die vollständige Liste der verfügbaren Metriken für jede Komponente finden Sie in der AWS Dokumentation.

  • Gruppieren Sie verwandte Metriken innerhalb derselben Klassifizierung, um eine bessere Organisation zu erreichen.

Dieser Ansatz ermöglicht es Ihnen, Ihre Überwachung auf die kritischsten Metriken für Ihre spezifischen EMR-Anwendungen zu konzentrieren und so einen tieferen Einblick in die Cluster-Leistung zu erhalten.

Bereitstellung eines EMR-Clusters mit Integration CloudWatch

Gehen Sie wie folgt vor, um einen Amazon EMR-Cluster zu erstellen, der automatisch Protokolle und benutzerdefinierte Metriken sendet an: CloudWatch

Schritt 1: Aktivieren Sie den Agenten CloudWatch

Gehen Sie beim Erstellen Ihres EMR-Clusters über die AWS Management Console wie folgt vor:

  1. Navigieren Sie während der Clustererstellung zum Abschnitt Anwendungen.

  2. Wählen Sie die Kontrollkästchen für Ihre primären Anwendungen (Hadoop, Spark usw.) aus.

  3. Scrollen Sie, um die Option Amazon CloudWatch Agent zu finden und auszuwählen.

  4. Dadurch wird der Agent in Ihrem Cluster aktiviert, was für die Erfassung erweiterter Metriken und Protokolle unerlässlich ist.

Der CloudWatch Agent wird auf allen Knoten in Ihrem Cluster installiert, sodass er System- und Anwendungsmetriken in den konfigurierten Intervallen sammeln kann.

Name und Anwendungen

Anwendungspakete

Einen Cluster erstellen und die verfügbaren Bundles anzeigen.

Anmerkung

Der CloudWatch Agent ist in EMR Version 7.0 und höher verfügbar. Die Aktivierung dieser Komponente ist für die Erfassung und Weiterleitung von benutzerdefinierten Messwerten und die in diesem Handbuch beschriebene Protokollweiterleitung erforderlich.

Schritt 2: Fügen Sie die Bootstrap-Aktion für die Protokollerfassung hinzu

So konfigurieren Sie den CloudWatch Agenten so, dass er bestimmte Protokolldateien sammelt und weiterleitet an CloudWatch:

  1. Navigieren Sie im Assistenten zum Erstellen von EMR-Clustern zum Abschnitt Bootstrap-Aktionen

  2. Klicken Sie auf Bootstrap-Aktion hinzufügen

  3. Wählen Sie im Drop-down-Menü die Option Benutzerdefinierte Aktion aus

  4. Geben Sie einen Namen für Ihre Bootstrap-Aktion ein (z. B. Configure CloudWatch Agent)

  5. Geben Sie im Feld Skriptspeicherort den S3-Pfad zu Ihrem cloudwatch-agent-bootstrap .sh-Skript ein (z. B. s3://your-bucket-name/cloudwatch-agent-bootstrap.sh)

  6. Klicken Sie auf Hinzufügen, um die Bootstrap-Aktion zu speichern

Diese Bootstrap-Aktion wird beim Start des Clusters ausgeführt. Dabei wird sichergestellt, dass der ordnungsgemäß mit Ihren benutzerdefinierten Einstellungen konfiguriert CloudWatchagent ist, um die in Ihrer Konfigurationsdatei angegebenen Protokolldateien zu sammeln und weiterzuleiten.

Der Agent beginnt automatisch mit der Erfassung von Protokollen, sobald die Knoten bereitgestellt sind, sodass Sie mithilfe CloudWatch von Protokollen nahezu in Echtzeit Einblick in Ihre Clustervorgänge erhalten.

Bootstrap-Aktionen

Bootstrap-Aktionen

Verwendung von Bootstrap-Aktionen.

Schritt 3: Konfigurieren Sie die Erfassung benutzerdefinierter Metriken

So aktivieren Sie die Erfassung von benutzerdefinierten Hadoop-, YARN- oder HBase Metriken, die über den Standardsatz hinausgehen:

  1. Navigieren Sie im Assistenten zum Erstellen von EMR-Clustern zum Abschnitt Konfigurationen.

  2. Klicken Sie auf die Schaltfläche Konfigurationen bearbeiten, um die Konfigurationsoptionen zu erweitern.

  3. Wählen Sie in der Dropdownliste für die Konfigurationsmethode die Option JSON aus Amazon S3 laden aus.

  4. Geben Sie den S3-URI-Pfad zu Ihrer Klassifizierungsdatei für benutzerdefinierte Metriken ein (z. B. s3://amzn-s3-demo-bucket1/ emr-metrics-classification .json).

  5. Klicken Sie auf Laden, um die Konfiguration zu analysieren.

  6. Stellen Sie sicher, dass die Konfiguration in der Konsolenoberfläche korrekt angezeigt wird.

  7. Klicken Sie auf Änderungen speichern, um diese Metrikkonfigurationen auf Ihren Cluster anzuwenden.

In diesem Schritt wird der CloudWatch Agent angewiesen, die spezifischen Komponentenmetriken zu sammeln, die in Ihrer Klassifizierungsdatei definiert sind. Die Metriken werden in den in Ihrer Konfiguration angegebenen Intervallen erfasst und veröffentlicht CloudWatch, wo sie visualisiert und analysiert werden können.

Benutzerdefinierte Metriken bieten tiefere Einblicke in die Leistungsmerkmale Ihres Clusters und ermöglichen so eine genauere Überwachung und Fehlerbehebung Ihrer EMR-Anwendungen.

Softwareeinstellungen

Softwareeinstellungen

Überschreiben Sie die Standardkonfigurationen.

Aktualisierung der Metrikkonfiguration für laufende Cluster

Sie können die Einstellungen für die Erfassung von Metriken für einen vorhandenen EMR-Cluster ändern, ohne den Betrieb zu unterbrechen, indem Sie die folgenden Schritte ausführen:

  1. Navigieren Sie in der AWS Management Console zu Ihrem aktiven EMR-Cluster.

  2. Wählen Sie in der Cluster-Detailansicht die Registerkarte Konfigurationen aus.

  3. Suchen Sie den Abschnitt Instanzgruppenkonfigurationen.

  4. Klicken Sie auf die Schaltfläche „Neu konfigurieren“, um die Einstellungen zu ändern.

  5. Wählen Sie „JSON aus Amazon S3 laden“ oder bearbeiten Sie die Konfiguration direkt.

  6. Geben Sie den Speicherort Ihrer aktualisierten Metrik-Klassifizierungsdatei ein oder nehmen Sie Änderungen im Editor vor.

  7. Wenden Sie die Änderungen an, um das Verhalten bei der Erfassung von Metriken zu aktualisieren.

Diese Rekonfigurationsfunktion ermöglicht es Ihnen, Ihren Überwachungsansatz an die sich ändernden Workload-Anforderungen anzupassen. Der CloudWatch Agent passt sich automatisch an die neue Konfiguration an und erfasst die aktualisierten Messwerte, ohne dass Cluster-Neustarts oder Ausfallzeiten erforderlich sind.

Wichtig

Es kann mehrere Minuten dauern, bis Konfigurationsänderungen auf alle Knoten im Cluster übertragen werden. Überwachen Sie Ihre CloudWatch Dashboards weiterhin, um sicherzustellen, dass die neuen Metriken erwartungsgemäß angezeigt werden.

Cluster-Konfigurationen

Configurations tab showing Cluster and instance group settings with options to view JSON and reconfigure.

Konfigurationen von Instanzgruppen.

Ihre CloudWatch Integration wird validiert

Nach Abschluss der Konfigurationsschritte ist es an der Zeit, zu überprüfen, ob Ihr Monitoring-Setup ordnungsgemäß funktioniert:

Schritt 1: Bereitstellen Ihres EMR-Clusters

  1. Überprüfen Sie alle Konfigurationseinstellungen auf Richtigkeit.

  2. Stellen Sie sicher, dass Bootstrap-Aktionen und Klassifizierungsdateien korrekt referenziert werden.

  3. Klicken Sie auf Cluster erstellen, um Ihre EMR-Umgebung zu starten.

  4. Warten Sie, bis der Cluster den Status Running erreicht hat (normalerweise 5—15 Minuten).

Schritt 2: Testanwendungen ausführen

Reichen Sie mehrere Spark-Testanwendungen ein, um aussagekräftige Metriken zu generieren:

  • Führen Sie einen einfachen Spark-Job aus, der Beispieldaten verarbeitet.

  • Führen Sie eine länger andauernde Analyseaufgabe aus, um die Ressourcennutzung zu beobachten.

  • Testen Sie verschiedene Anwendungskonfigurationen, um Leistungskennzahlen zu vergleichen.

Nachdem Ihre Anwendungen abgeschlossen sind (oder während sie ausgeführt werden):

  • Navigieren Sie zur CloudWatch Konsole.

  • Suchen Sie in Ihren konfigurierten Protokollgruppen nach Anwendungsprotokollen.

  • Untersuchen Sie die Metrik-Dashboards, um CPU-, Speicher- und anwendungsspezifische Metriken zu beobachten.

  • Vergewissern Sie sich, dass die in Ihrer Klassifizierungsdatei definierten benutzerdefinierten Metriken in angezeigt werden. CloudWatch

Dieser Validierungsprozess bestätigt, dass Ihre CloudWatch Integration sowohl Protokolle als auch Metriken ordnungsgemäß erfasst, sodass Sie einen umfassenden Einblick in die Leistung und das Anwendungsverhalten Ihres EMR-Clusters erhalten.

Zugreifen auf EMR-Protokolle in CloudWatch Protokollgruppen

Nachdem Ihr EMR-Cluster ausgeführt und der CloudWatch Agent ordnungsgemäß konfiguriert wurde, sind Ihre Anwendungs- und CloudWatch Systemprotokolle in Logs verfügbar. Gehen Sie wie folgt vor, um auf sie zuzugreifen und sie zu analysieren:

Ihre Protokollgruppen anzeigen

  1. Navigieren Sie in der AWS Management CloudWatch Console zur Konsole.

  2. Wählen Sie im linken Navigationsbereich Protokollgruppen aus.

  3. Suchen Sie nach den Protokollgruppen, die durch Ihre Konfiguration erstellt wurden, z. B.:

    • /emr/yarn/resourcemngernach ResourceManager YARN-Protokollen.

    • /emr/hdfs/namenodefür NameNode HDFS-Protokolle.

    • Alle zusätzlichen Protokollgruppen, die in Ihrer Konfigurationsdatei angegeben sind.

Jede Protokollgruppe enthält Protokollstreams, die nach Instanz-ID organisiert sind, sodass Sie Protokolle zu bestimmten Knoten in Ihrem Cluster zurückverfolgen können.

Mit Protokolldaten arbeiten

  • Protokolldaten durchsuchen: Verwenden Sie CloudWatch Logs Insights, um strukturierte Abfragen in Ihren Loggruppen durchzuführen.

  • Metriken erstellen: Extrahieren Sie Metriken aus Protokollmustern, um benutzerdefinierte CloudWatch Metriken zu erstellen.

  • Benachrichtigungen einrichten: Konfigurieren Sie Alarme auf der Grundlage bestimmter Fehlermuster oder Protokollfrequenzen.

  • Protokolle exportieren: Laden Sie Protokolle für die Offline-Analyse oder Archivierung herunter.

Aufbewahrung von Protokollen

Anmerkung

Standardmäßig werden Protokolle 30 Tage lang aufbewahrt. Sie können die Aufbewahrungsrichtlinie für jede Protokollgruppe ändern, um Protokolle für längere Zeiträume aufzubewahren, falls dies für Compliance- oder Analysezwecke erforderlich ist.

CloudWatch Logs bietet einen zentralen Speicherort für all Ihre EMR-Protokolldaten, sodass Sie keine SSH-Verbindung zu einzelnen Clusterknoten herstellen müssen, um Probleme zu beheben oder das Anwendungsverhalten zu analysieren.

Benutzerdefinierte Metriken im EMR Monitoring Dashboard anzeigen

Nachdem Ihr EMR-Cluster mit der Konfiguration des CloudWatch Agenten und der benutzerdefinierten Metriken ausgeführt wurde, können Sie diese Metriken einfach direkt in der EMR-Konsole überwachen:

Zugriff auf Ihre benutzerdefinierten Metriken

  1. Navigieren Sie in der AWS Management Console zu Ihrem EMR-Cluster.

  2. Wählen Sie auf der Seite mit den Cluster-Details die Registerkarte Überwachung aus.

  3. Suchen Sie oben in den Monitoring-Dashboards nach der Dropdownliste nach der Klassifizierung von Filtermetriken.

  4. Verwenden Sie diesen Filter, um bestimmte Metrikkategorien auszuwählen:

    • Wählen Sie HDFS für die Anzeige NameNode und die DataNode Metriken aus.

    • Wählen Sie YARN aus, um Metriken zu sehen ResourceManager und zu speichern.

    • Wählen Sie HBasefür HBase -spezifische Leistungsdaten.

    • Wählen Sie benutzerdefinierte metrische Klassifizierungen aus, die Sie definiert haben.

Das Dashboard wird dynamisch aktualisiert und zeigt Diagramme für Ihre ausgewählten Metriken an, die Leistungstrends im Zeitverlauf zeigen.

Arbeiten mit metrischen Visualisierungen

  • Zeitbereiche anpassen: Ändern Sie das Zeitfenster, um aktuelle Aktivitäten oder historische Trends anzuzeigen.

  • Metriken vergleichen: Zeigen Sie mehrere verwandte Metriken side-by-side für die Korrelationsanalyse an.

  • Zoom-Funktionen: Konzentrieren Sie sich auf bestimmte Zeiträume, in denen Anomalien oder Muster auftreten.

  • Daten aktualisieren: Aktualisieren Sie Visualisierungen nahezu in Echtzeit mit den neuesten Metrikdaten.

Dieser integrierte Überwachungsansatz ermöglicht es Ihnen, sowohl standardmäßige EMR-Metriken als auch Ihre benutzerdefinierten Messwerte in einem einheitlichen Dashboard zu verfolgen, sodass Sie Leistungsprobleme, Ressourcenbeschränkungen oder Anwendungsengpässe leichter identifizieren können, ohne die EMR-Konsole verlassen zu müssen.

CloudWatch Metriken

EMR Cluster monitoring dashboard showing CloudWatch metrics and filter options.

Klassifizierung von Metriken filtern.