本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EMR on EC2 – 使用自訂指標和日誌透過 CloudWatch 進行增強型監控
概觀
Amazon EMR 提供強大且經濟實惠的大數據處理功能。為了最大化效能和資源使用率,有效監控至關重要。Amazon CloudWatch 為 EMR 叢集提供全面的可觀測性,讓您能夠即時追蹤指標和日誌。本文件概述如何:
-
設定 CloudWatch 代理程式將 EC2 日誌上的 EMR 傳送至 CloudWatch
-
透過分類新增自訂 Hadoop、YARN 和 HBase 指標
-
透過內建儀表板監控指標
-
透過 CloudWatch 日誌群組追蹤叢集日誌
先決條件和背景
根據預設,Amazon EMR 會每五分鐘將基本指標傳送至 CloudWatch,無需額外費用。使用 EMR 7.0+ 版,您可以將 CloudWatch 代理程式部署到:
-
每隔一分鐘收集 34 個額外的詳細指標 (需支付額外費用)
-
從所有叢集節點收集指標
-
在傳送至 CloudWatch 之前,彙總主節點上的資料
-
透過 EMR 主控台的監控索引標籤或 CloudWatch 主控台存取指標
EMR 7.1 擴展了這些功能,可讓您設定代理程式,以從 Hadoop、YARN 和 HBase 元件擷取特殊指標。對於使用 Prometheus 的環境,指標可以轉送到 Amazon Managed Service for Prometheus。
日誌的 CloudWatch 代理程式組態
若要在 CloudWatch 中擷取 EMR 日誌,請建立 cloudwatch-config.json 檔案來定義要收集的日誌檔案:
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 } ] } } } }
CloudWatch 代理程式組態的引導指令碼
若要將自訂 CloudWatch 組態套用至 EMR 節點,請建立引導指令碼,以使用您的設定重新啟動 CloudWatch 代理程式。此指令碼可確保代理程式在叢集佈建後使用您的特定日誌集合參數執行。
建立引導指令碼
使用下列內容建立名為 cloudwatch-agent-bootstrap.sh 的檔案:
#!/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
重要組態備註
重要
上傳指令碼之前,請將 取代<amzn-s3-demo-bucket1>
為您上一個步驟存放 cloudwatch-config.json 檔案之 S3 儲存貯體的實際名稱。這可確保引導指令碼可以在叢集初始化期間擷取您的組態檔案。
此引導指令碼將:
-
等待節點佈建完成
-
下載您的自訂 CloudWatch 組態
-
停止任何執行中的 CloudWatch 代理程式
-
使用特定組態重新啟動代理程式
-
記錄客服人員的狀態以進行故障診斷
Hadoop、YARN 和 HBase 的自訂指標分類
除了預設 CloudWatch 指標之外,您還可以透過為 EMR 叢集元件設定自訂應用程式特定的指標來增強監控功能。Amazon EMR 的組態 API 提供靈活的方式來定義您要收集的指標。
設定自訂指標
您可以透過兩種方式實作自訂指標集合:
-
在為新叢集建立叢集期間
-
透過 EMR 主控台重新設定現有叢集
建立分類檔案
分類檔案定義應從您的叢集收集哪些特定元件指標。以下是收集自訂 Hadoop 指標的範例結構:
[ { "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": {} } ]
實作步驟
-
使用所需的指標分類建立 JSON 檔案。
-
根據您的監控需求自訂指標。
-
儲存檔案並上傳至 S3 儲存貯體。
-
建立新叢集或重新設定現有叢集時,請參考此檔案。
最佳實務
-
僅收集為您的工作負載提供有意義的洞見的指標。
-
根據您的監控需求考慮指標收集間隔。
-
檢閱 AWS 文件以取得每個元件可用指標的完整清單。
-
在相同分類內將相關指標分組,以獲得更好的組織。
此方法可讓您將監控重點放在特定 EMR 應用程式的最重要指標上,讓您更深入了解叢集效能。
使用 CloudWatch 整合部署 EMR 叢集
請依照下列步驟建立 Amazon EMR 叢集,自動將日誌和自訂指標傳送至 CloudWatch:
步驟 1:啟用 CloudWatch Agent
透過 AWS 管理主控台建立 EMR 叢集時:
-
在叢集建立期間導覽至應用程式區段。
-
選取主要應用程式的核取方塊 (Hadoop、Spark 等)。
-
捲動以尋找並選取 Amazon CloudWatch Agent 選項。
-
這可在叢集上啟用 代理程式,這對於收集增強型指標和日誌至關重要。
CloudWatch Agent 將安裝在叢集中的所有節點上,允許它以設定的間隔收集系統和應用程式指標。
名稱和應用程式

建立叢集並顯示可用的套件。
注意
CloudWatch Agent 可在 EMR 7.0 版及更新版本中使用。本指南所述的自訂指標收集和日誌轉送需要啟用此元件。
步驟 2:新增日誌收集的引導操作
若要設定 CloudWatch 代理程式以收集特定日誌檔案並將其轉送至 CloudWatch:
-
在 EMR 叢集建立精靈中,導覽至引導操作區段
-
按一下新增引導操作
-
從下拉式選單中選取自訂動作
-
為您的引導操作提供名稱 (例如,設定 CloudWatch Agent)
-
在指令碼位置欄位中,輸入 cloudwatch-agent-bootstrap.sh 指令碼的 S3 路徑 (例如 s3://your-bucket-name/cloudwatch-agent-bootstrap.sh)
-
按一下新增以儲存引導操作
此引導操作將在叢集啟動期間執行,確保 CloudWatchagent 已正確設定您的自訂設定,以收集和轉送組態檔案中指定的日誌檔案。
佈建節點後,代理程式會自動開始收集日誌,透過 CloudWatch Logs 提供近乎即時的叢集操作可見性。
引導操作

使用引導操作。
步驟 3:設定自訂指標集合
若要啟用超過預設設定的自訂 Hadoop、YARN 或 HBase 指標集合:
-
在 EMR 叢集建立精靈中,導覽至組態區段。
-
按一下編輯組態按鈕以展開組態選項。
-
從組態方法下拉式清單中選取從 Amazon S3 載入 JSON 選項。
-
輸入自訂指標分類檔案的 S3 URI 路徑 (例如 s3://amzn-s3-demo-bucket1/emr-metrics-classification.json)。
-
按一下載入以剖析組態。
-
確認組態正確顯示在主控台界面中。
-
按一下儲存變更,將這些指標組態套用至您的叢集。
此步驟會指示 CloudWatch 代理程式收集分類檔案中定義的特定元件指標。這些指標將依您組態中指定的間隔收集,並發佈至 CloudWatch,以便將其視覺化和分析。
自訂指標可讓您更深入了解叢集的效能特性,以便更精確地監控 EMR 應用程式並進行故障診斷。
軟體設定

覆寫預設組態。
更新執行中叢集的指標組態
您可以依照下列步驟修改現有 EMR 叢集的指標集合設定,而不會中斷操作:
-
在 AWS 管理主控台中導覽至作用中的 EMR 叢集。
-
在叢集詳細資訊檢視中選取組態索引標籤。
-
尋找執行個體群組組態區段。
-
按一下重新設定按鈕來修改設定。
-
選擇從 Amazon S3 載入 JSON 或直接編輯組態。
-
輸入更新後的指標分類檔案位置,或在編輯器中進行變更。
-
套用變更以更新指標收集行為。
此重新設定功能可讓您隨著工作負載需求的變化,微調監控方法。CloudWatch 代理程式會自動適應新組態,收集更新的指標集,而不需要叢集重新啟動或停機。
重要
組態變更可能需要幾分鐘的時間才能傳播到叢集中的所有節點。繼續監控 CloudWatch 儀表板,以確認新指標如預期顯示。
叢集組態

執行個體群組組態。
驗證您的 CloudWatch 整合
完成組態步驟後,是時候驗證您的監控設定是否正常運作了:
步驟 1:部署 EMR 叢集
-
檢閱所有組態設定的準確性。
-
確保正確參考引導操作和分類檔案。
-
按一下建立叢集以啟動 EMR 環境。
-
等待叢集達到執行中狀態 (通常為 5-15 分鐘)。
步驟 2:執行測試應用程式
提交數個測試 Spark 應用程式來產生有意義的指標:
-
執行處理範例資料的簡易 Spark 任務。
-
執行長時間執行的分析任務,以觀察資源使用率。
-
測試不同的應用程式組態,以比較效能指標。
應用程式完成後 (或執行時):
-
導覽至 CloudWatch 主控台。
-
檢查您設定的日誌群組是否有應用程式日誌。
-
檢查指標儀表板,以觀察 CPU、記憶體和應用程式特定的指標。
-
確認分類檔案中定義的自訂指標出現在 CloudWatch 中。
此驗證程序會確認您的 CloudWatch 整合正確擷取日誌和指標,讓您全面了解 EMR 叢集的效能和應用程式行為。
在 CloudWatch Log Groups 中存取 EMR Logs
執行 EMR 叢集並正確設定 CloudWatch 代理程式後,您的應用程式和系統日誌將可在 CloudWatch Logs 中使用。請依照下列步驟存取和分析它們:
檢視您的日誌群組
-
導覽至 AWS 管理主控台中的 CloudWatch 主控台。
-
從左側導覽窗格中選取日誌群組。
-
尋找您的組態建立的日誌群組,例如:
-
/emr/yarn/resourcemnger for YARN ResourceManager 日誌。
-
/emr/hdfs/namenode for HDFS NameNode 日誌。
-
組態檔案中指定的任何其他日誌群組。
-
每個日誌群組都包含依執行個體 ID 整理的日誌串流,可讓您將日誌追蹤到叢集中的特定節點。
使用日誌資料
-
搜尋日誌資料:使用 CloudWatch Logs Insights 跨日誌群組執行結構化查詢。
-
建立指標:從日誌模式擷取指標,以建立自訂 CloudWatch 指標。
-
設定警示:根據特定錯誤模式或日誌頻率設定警示。
-
匯出日誌:下載日誌以進行離線分析或封存。
日誌保留
注意
根據預設,日誌會保留 30 天。如果需要用於合規或分析目的,您可以修改每個日誌群組的保留政策,以將日誌保留更長的時間。
CloudWatch Logs 為您的所有 EMR 日誌資料提供集中的位置,無需 SSH 到個別叢集節點來疑難排解問題或分析應用程式行為。
在 EMR 監控儀表板中檢視自訂指標
使用 CloudWatch 代理程式和自訂指標組態執行 EMR 叢集之後,您可以直接在 EMR 主控台輕鬆監控這些指標:
存取您的自訂指標
-
在 AWS 管理主控台中導覽至 EMR 叢集。
-
在叢集詳細資訊頁面中選取監控索引標籤。
-
在監控儀表板頂端附近找到篩選條件指標分類下拉式清單。
-
使用此篩選條件來選取特定指標類別:
-
選擇 HDFS 以檢視 NameNode 和 DataNode 指標。
-
選取 YARN 以查看 ResourceManager 和容器指標。
-
為 HBase 特定效能資料選擇 HBase。
-
選取您定義的自訂指標分類。
-
儀表板會動態更新,以顯示所選指標的圖表,顯示一段時間內的效能趨勢。
使用指標視覺化
-
調整時間範圍:變更時間範圍以檢視最近的活動或歷史趨勢。
-
比較指標:side-by-side顯示多個相關指標以進行相互關聯分析。
-
縮放功能:專注於出現異常或模式的特定時段。
-
重新整理資料:近乎即時地使用最新的指標資料更新視覺效果。
這種整合式監控方法可讓您在統一的儀表板中追蹤標準 EMR 指標和自訂指標,讓您更輕鬆地識別效能問題、資源限制或應用程式瓶頸,而無需離開 EMR 主控台。
CloudWatch 指標

篩選指標分類。