

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `AWSSupport-AnalyzeEMRLogs`
<a name="automation-awssupport-analyzeemrlogs"></a>

 **Description** 

此 Runbook 有助於識別在 Amazon EMR 叢集上執行任務時的錯誤。Runbook 會分析檔案系統上定義的日誌清單，並尋找預先定義的關鍵字清單。這些日誌項目用於建立 Amazon CloudWatch Events 事件，因此您可以根據事件採取任何必要的動作。或者， Runbook 會將日誌項目發佈至您選擇的 Amazon CloudWatch Logs 日誌群組。此 Runbook 目前會在日誌檔案中尋找下列錯誤和模式：
+  container\$1out\$1of\$1memory – YARN 容器記憶體不足，執行中的任務可能會失敗。
+  yarn\$1nodemanager\$1health：CORE 或 TASK 節點磁碟空間不足，無法執行任務。
+  node\$1state\$1change：主節點無法連線 CORE 或 TASK 節點。
+  step\$1failure：EMR 步驟失敗。
+  no\$1core\$1nodes\$1running：目前沒有 CORE 節點正在執行，叢集運作狀態不佳。
+  hdfs\$1missing\$1blocks：缺少可能導致資料遺失的 HDFS 區塊。
+  hdfs\$1high\$1util：HDFS 使用率很高，這可能會影響任務和叢集運作狀態。
+  instance\$1controller\$1restart：Instance-Controller 程序已重新啟動。此程序對於叢集運作狀態至關重要。
+  instance\$1controller\$1restart\$1legacy：Instance-Controller 程序已重新啟動。此程序對於叢集運作狀態至關重要。
+  high\$1load：偵測到高負載平均，可能會影響節點運作狀態報告，或導致逾時或變慢。
+  yarn\$1node\$1blacklisted：YARN 已從執行中的任務將 CORE 或 TASK 節點列入黑名單。
+  yarn\$1node\$1lost：YARN 已將 CORE 或 TASK 節點標記為 LOST，可能是連線問題。

 與您指定的 `ClusterID` 相關聯的執行個體必須由 管理 AWS Systems Manager。您可以執行此自動化一次、排定自動化在特定時間間隔執行，或移除先前由自動化建立的排程。此 Runbook 支援 Amazon EMR 發行版本 5.20 到 6.30。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-AnalyzeEMRLogs) 

**文件類型**

 自動化

**擁有者**

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。
+ 作業

  類型：字串

  有效值：執行一次 \$1 排程 \$1 移除排程 

  描述：（必要） 在叢集上執行的操作。
+ IntervalTime

  類型：字串

  有效值：5 分鐘 \$1 10 分鐘 \$1 15 分鐘

   描述：（選用） 執行自動化之間的持續時間。此參數僅適用於您`Schedule`為 `Operation` 參數指定的 。
+ LogToCloudWatchLogs

  類型：字串

  有效值：是 \$1 否

   描述：（選用） 如果您`yes`為此參數的值指定 ，自動化會使用 `CloudWatchLogGroup` 參數中指定的名稱來建立 CloudWatch Logs 日誌群組，以存放任何相符的日誌項目。
+ CloudWatchLogGroup

  類型：字串

   描述：（選用） 您要存放任何相符日誌項目的 CloudWatch Logs 日誌群組名稱。此參數僅適用於您`yes`為 `LogToCloudWatchLogs` 參數指定的 。
+ CreateLogInsightsDashboard

  類型：字串

  有效值：是 \$1 否

   描述：（選用） 如果您指定 `yes` ，如果 CloudWatch 儀表板尚未存在，則會建立該儀表板。此參數僅適用於您`yes`為 `LogToCloudWatchLogs` 參數指定的 。
+ CreateMetricFilters

  類型：字串

  有效值：是 \$1 否

   描述：（選用） 指定`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