本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWSSupport-AnalyzeEMRLogs
Description
此 Runbook 有助於識別在 Amazon EMR 叢集上執行任務時的錯誤。Runbook 會分析檔案系統上定義的日誌清單,並尋找預先定義的關鍵字清單。這些日誌項目用於建立 Amazon CloudWatch Events 事件,因此您可以根據事件採取任何必要的動作。或者, Runbook 會將日誌項目發佈至您選擇的 Amazon CloudWatch Logs 日誌群組。此 Runbook 目前會在日誌檔案中尋找下列錯誤和模式:
-
container_out_of_memory – YARN 容器記憶體不足,執行中的任務可能會失敗。 -
yarn_nodemanager_health:CORE 或 TASK 節點磁碟空間不足,無法執行任務。 -
node_state_change:主節點無法存取 CORE 或 TASK 節點。 -
step_failure:EMR 步驟失敗。 -
no_core_nodes_running:目前沒有 CORE 節點正在執行,叢集運作狀態不佳。 -
hdfs_missing_blocks:缺少可能導致資料遺失的 HDFS 區塊。 -
hdfs_high_util:HDFS 使用率很高,這可能會影響任務和叢集運作狀態。 -
instance_controller_restart:Instance-Controller 程序已重新啟動。此程序對於叢集運作狀態至關重要。 -
instance_controller_restart_legacy:Instance-Controller 程序已重新啟動。此程序對於叢集運作狀態至關重要。 -
high_load:偵測到高負載平均,可能會影響節點運作狀態報告,或導致逾時或變慢。 -
yarn_node_blacklisted:YARN 已將 CORE 或 TASK 節點從執行中的任務列入黑名單。 -
yarn_node_lost:YARN 已將 CORE 或 TASK 節點標記為 LOST,可能是連線問題。
與您指定的 ClusterID 相關聯的執行個體必須由 管理 AWS Systems Manager。您可以執行此自動化一次、排定自動化在特定時間間隔執行,或移除先前由自動化建立的排程。此 Runbook 支援 Amazon EMR 發行版本 5.20 到 6.30。
文件類型
自動化
擁有者
Amazon
平台
Linux、macOS、 Windows
參數
-
AutomationAssumeRole
類型:字串
描述:(選用) 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色,Systems Manager Automation 會使用啟動此 Runbook 的使用者許可。
-
ClusterID (ClusterID)
類型:字串
描述:(必要) 您要分析其節點日誌的叢集 ID。
-
作業
類型:字串
有效值:執行一次 | 排程 | 移除排程
描述:(必要) 在叢集上執行的操作。
-
IntervalTime
類型:字串
有效值:5 分鐘 | 10 分鐘 | 15 分鐘
描述:(選用) 執行自動化之間的持續時間。此參數僅適用於您
Schedule為Operation參數指定的 。 -
LogToCloudWatchLogs
類型:字串
有效值:是 | 否
描述:(選用) 如果您
yes為此參數的值指定 ,自動化會使用CloudWatchLogGroup參數中指定的名稱來建立 CloudWatch Logs 日誌群組,以存放任何相符的日誌項目。 -
CloudWatchLogGroup
類型:字串
描述:(選用) 您要存放任何相符日誌項目的 CloudWatch Logs 日誌群組名稱。此參數僅適用於您
yes為LogToCloudWatchLogs參數指定的 。 -
CreateLogInsightsDashboard
類型:字串
有效值:是 | 否
描述:(選用) 如果您指定
yes,如果 CloudWatch 儀表板不存在,則會建立它。只有在您yes為 參數指定 時,此LogToCloudWatchLogs參數才適用。 -
CreateMetricFilters
類型:字串
有效值:是 | 否
描述:(選用) 指定
yes您是否要為 CloudWatch Logs 日誌群組建立指標篩選條件。只有在您yes為 參數指定 時,此LogToCloudWatchLogs參數才適用。
必要的 IAM 許可
AutomationAssumeRole 參數需要下列動作才能成功使用 Runbook。
-
ssm:StartAutomationExecution -
ssm:GetDocument -
ssm:ListDocuments -
ssm:DescribeAutomationExecutions -
ssm:DescribeAutomationStepExecutions -
ssm:GetAutomationExecution -
ssm:DescribeInstanceInformation -
ssm:ListCommandInvocations -
ssm:ListCommands -
ssm:SendCommand -
iam:CreateRole -
iam:DeleteRole -
iam:GetRolePolicy -
iam:PutRolePolicy -
iam:DeleteRolePolicy -
iam:passrole -
cloudformation:DescribeStacks -
cloudformation:DeleteStack -
cloudformation:CreateStack -
events:DeleteRule -
events:RemoveTargets -
events:PutTargets -
events:PutRule -
events:DescribeRule -
logs:DescribeLogGroups -
logs:CreateLogGroup -
logs:PutMetricFilter -
cloudwatch:PutDashboard -
elasticmapreduce:ListInstances -
elasticmapreduce:DescribeCluster
文件步驟
-
aws:executeAwsApi- 收集ClusterID參數中指定之 Amazon EMR 叢集的相關資訊。 -
aws:branch- 以輸入為基礎的分支。-
如果提供的操作是
Run Once或Schedule:-
aws:assertAwsResourceProperty- 驗證叢集是否可用。 -
aws:executeAwsApi- 收集叢集中執行之所有執行個體IDs。 -
aws:assertAwsResourceProperty- 驗證 SSM 代理程式是否在叢集中的所有執行個體上執行。 -
aws:branch- 根據您是否指定 執行自動化一次或排程進行分支。-
如果提供的操作是
Run Once:-
aws:branch- 根據LogToCloudWatchLogs參數中指定的值進行分支。-
如果
LogToCloudWatchLogs值為yes:-
aws:executeScript- 檢查 參數中指定名稱的 CloudWatch Logs 日誌群組是否CloudWatchLogGroup已存在。如果沒有,則會使用指定的名稱建立群組。 -
aws:branch- 根據CreateMetricFilters參數中指定的值進行分支。-
如果
CreateMetricFilters值為yes:-
aws:executeAwsApi- 每個指標篩選條件執行 12 個步驟 -
aws:branch- 根據CreateLogInsightsDashboard參數中指定的值進行分支。-
如果
CreateLogInsightsDashboard值為yes:-
aws:executeAwsApi- 建立 CloudWatch 儀表板,如果它不存在,請使用CloudWatchLogGroup參數中指定的相同名稱。
-
-
如果
CreateLogInsightsDashboard值為no:-
aws:runCommand- 執行 shell 指令碼來尋找叢集中每個執行個體的日誌模式。
-
-
-
-
如果
CreateMetricFilters值為no:-
aws:branch- 根據CreateLogInsightsDashboard參數中指定的值進行分支。-
如果
CreateLogInsightsDashboard值為yes:-
aws:executeAwsApi- 建立 CloudWatch 儀表板,如果它不存在,請使用CloudWatchLogGroup參數中指定的相同名稱。
-
-
如果
CreateLogInsightsDashboard值為no:-
aws:runCommand- 執行 shell 指令碼來尋找叢集中每個執行個體的日誌模式。
-
-
-
-
-
-
如果
LogToCloudWatchLogs值為no:-
aws:executeAwsApi- 執行 shell 指令碼來尋找叢集中每個執行個體的日誌模式。
-
-
-
-
如果提供的操作是
Schedule:-
aws:createStack- 建立以此 Runbook 為目標的 Amazon EventBridge 事件。
-
-
-
-
如果提供的操作是
Remove Schedule:-
aws:executeAwsApi- 驗證叢集是否存在排程。 -
aws:deleteStack- 刪除排程。
-
-
輸出
GetClusterInformation.ClusterName
GetClusterInformation.ClusterState
ListingClusterInstances.InstanceIDs
CreatingScheduleCloudFormationStack.StackStatus
RemovingScheduleByDeletingScheduleCloudFormationStack.StackStatus
CheckIfLogGroupExists.output
FindLogPatternOnEMRNode.CommandId