

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

# `AWSSupport-DiagnoseEMRLogsWithAthena`
<a name="awssupport-diagnose-emr-logs-with-athena"></a>

**Description** 

`AWSSupport-DiagnoseEMRLogsWithAthena` Runbook 可協助診斷使用 Amazon Athena 與 Data Catalog 整合的 Amazon EMR 日誌。 AWS Glue Amazon Athena 用於查詢容器、節點日誌或兩者的 Amazon EMR 日誌檔案，以及特定日期範圍或關鍵字搜尋的選用參數。

Runbook 可以自動擷取現有叢集的 Amazon EMR 日誌位置，也可以指定 Amazon S3 日誌位置。若要分析日誌， Runbook：
+ 建立 AWS Glue 資料庫並在 Amazon EMR Amazon S3 日誌位置上執行 Amazon Athena 資料定義語言 (DDL) 查詢，以建立叢集日誌的資料表和已知問題清單。 Amazon S3 
+ 執行資料處理語言 (DML) 查詢，以搜尋 Amazon EMR 日誌中的已知問題模式。這些查詢會傳回偵測到的問題清單、其出現計數，以及 Amazon S3 檔案路徑的相符關鍵字數量。
+ 結果會上傳至您在字首 下指定的 Amazon S3 儲存貯體`saw_diagnose_EMR_known_issues`。
+ Runbook 會傳回 Amazon Athena 查詢結果，反白顯示從預先定義子集取得的 Amazon 知識中心 (KC) 文章的調查結果、建議和參考。
+  完成或失敗時，會刪除 AWS Glue 資料庫和上傳至 Amazon S3 儲存貯體的已知問題檔案。

 **如何運作？** 

 使用 Amazon Athena `AWSSupport-DiagnoseEMRLogsWithAthena`執行 Amazon EMR 日誌的分析，以偵測錯誤並反白顯示調查結果、建議和相關的 知識中心文章。

Runbook 會執行下列步驟：
+ 使用叢集 ID 或輸入 Amazon S3 位置取得 Amazon EMR 叢集日誌位置，以擷取日誌位置和大小。
+ 根據日誌位置大小提供 Athena 成本估算。
+ 在執行 Athena 查詢並繼續執行後續步驟之前，請求指定 IAM 主體的核准，以繼續取得核准。
+ 將已知問題上傳至指定的 Amazon S3 儲存貯體，並建立 AWS Glue 資料庫和資料表。
+ 在 Amazon EMR 日誌資料上執行 Athena 查詢。查詢可以依日期範圍、關鍵字、兩個條件進行搜尋，也可以根據提供的輸入在沒有篩選條件的情況下執行。
+ 分析結果以反白顯示問題清單、建議和相關的 KC 文章。
+ Amazon Athena DML 查詢結果的輸出連結。
+ 透過移除建立的資料庫、資料表和上傳的已知問題來清除環境。

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

AutomationAssumeRole 參數需要下列動作，才能成功使用 Runbook：
+ athena:GetQueryExecution
+ athena:StartQueryExecution
+ athena:GetPreparedStatement
+ athena:CreatePreparedStatement
+ glue:GetDatabase
+ glue:CreateDatabase
+ glue:DeleteDatabase
+ glue:CreateTable
+ glue:GetTable
+ glue:DeleteTable 
+ elasticmapreduce：DescribeCluster
+ s3:ListBucket
+ s3:GetBucketVersioning
+ s3:ListBucketVersions
+ s3:GetBucketPublicAccessBlock
+ s3:GetBucketPolicyStatus
+ s3:GetObject
+ s3:GetBucketLocation
+ pricing：GetProducts
+ pricing：GetAttributeValues
+ pricing：DescribeServices
+ pricing：ListPriceLists

**重要**  
 若要限制僅存取此自動化所需的資源，請將下列政策連接至信任 SSM 服務的 IAM 角色。將分割區、區域和帳戶取代為執行執行手冊的分割區、區域和帳戶號碼的適當值。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:DescribeCluster",
                "glue:GetDatabase",
                "athena:GetQueryExecution",
                "athena:StartQueryExecution",
                "athena:GetPreparedStatement",
                "athena:CreatePreparedStatement",
                "s3:ListBucket",
                "s3:GetBucketVersioning",
                "s3:ListBucketVersions",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketPolicyStatus",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "pricing:GetProducts",
                "pricing:GetAttributeValues",
                "pricing:DescribeServices",
                "pricing:ListPriceLists"
            ],
            "Resource": "*"
        },
        {
            "Sid": "RestrictPutObjects",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::*/*/results/*",
                "arn:aws:s3:::*/*/saw_diagnose_emr_known_issues/*"
            ]
        },
        {
            "Sid": "RestrictDeleteAccess",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::*/*/saw_diagnose_emr_known_issues/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabase",
                "glue:CreateDatabase",
                "glue:DeleteDatabase"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:database/saw_diagnose_emr_database_*",
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/*",
                "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/saw_diagnose_emr_database_*/*",
                "arn:aws:glue:us-east-1:111122223333:catalog"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateTable",
                "glue:GetTable",
                "glue:DeleteTable"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/saw_diagnose_emr_known_issues",
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/saw_diagnose_emr_logs_table",
                "arn:aws:glue:us-east-1:111122223333:table/saw_diagnose_emr_database_*/j_*",
                "arn:aws:glue:us-east-1:111122223333:database/saw_diagnose_emr_database_*",
                "arn:aws:glue:us-east-1:111122223333:catalog"
            ]
        }
    ]
}
```

------

 **指示** 

請依照下列步驟設定自動化：

1. 在 文件 AWS Systems Manager 下導覽 [AWSSupport-DiagnoseEMRLogsWithAthena](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-DiagnoseEMRLogsWithAthena/description)。

1. 選擇 Execute automation (執行自動化)。

1. 針對輸入參數，輸入下列項目：
   + **AutomationAssumeRole （選用）：**

     (IAM) 角色的 Amazon Resource Name AWS Identity and Access Management (ARN)，允許 Systems Manager Automation 代表您執行動作。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
   + **ClusterID （必要）：**

     Amazon EMR 叢集 ID。
   + **S3LogLocation （選用）：**

     Amazon S3 Amazon EMR 日誌位置。輸入路徑樣式 URL Amazon S3 位置，例如：`s3://amzn-s3-demo-bucket/myfolder/j-1K48XXXXXXHCB/`。如果 Amazon EMR 叢集已終止超過 `30` 天，請提供此參數。
   + **S3BucketName （必要）：**

      要上傳已知問題清單的 Amazon S3 儲存貯體名稱，以及 Amazon Athena 查詢的輸出。儲存貯體應[已啟用封鎖公開存取](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)，且與 Amazon EMR 叢集位於相同的 AWS 區域和帳戶。
   + **核准者 （必要）：**

     能夠核准或拒絕動作的已 AWS 驗證主體清單。您可以使用下列任何格式來指定委託人：使用者名稱、使用者 ARN、IAM 角色 ARN 或 IAM 擔任角色 ARN。核准者的數量上限為 10。
   + **FetchNodeLogsOnly （選用）：**

      如果設定為 `true`，自動化會診斷 Amazon EMR 應用程式容器日誌。預設值為 `false`。
   + **FetchContainersLogsOnly （選用）：**

      如果設定為 `true`，自動化會診斷 Amazon EMR 容器日誌。預設值為 `false`。
   + **EndSearchDate （選用）：**

      日誌搜尋的結束日期。如果提供，自動化將專門搜尋截至指定日期為止產生的日誌，格式為 YYYY-MM-DD （例如：`2024-12-30`)。
   + **DaysToCheck （選用）：**

      `EndSearchDate` 提供 時，需要此參數來判斷從指定的 回溯搜尋日誌的天數`EndSearchDate`。最大值為 `30` 天。預設值為 `1`。
   + **SearchKeywords （選用）：**

      在日誌中搜尋的關鍵字清單，以逗號分隔。關鍵字不能包含單引號或雙引號。  
![\[Input parameters form for AWS Systems Manager Automation with various fields and options.\]](http://docs.aws.amazon.com/zh_tw/systems-manager-automation-runbooks/latest/userguide/images/awssupport-diagnose-emr-logs-with-athena_input_parameters.png)

1. 選取**執行**。

1. 自動化會啟動。

1. 文件會執行下列步驟：
   + **getLogLocation：**

     透過查詢指定的 Amazon EMR 叢集 ID 來擷取 Amazon S3 日誌位置。如果自動化無法從 Amazon EMR 叢集 ID 查詢日誌位置，則 Runbook 會使用 `S3LogLocation`輸入參數。
   + **branchOnValidLog：**

     驗證 Amazon EMR 日誌位置。如果位置有效，請繼續預估在 Amazon EMR 日誌上執行查詢時 Amazon Athena 的潛在成本。
   + **estimateAthenaCosts：**

     決定 Amazon EMR 日誌的大小，並提供在日誌資料集上執行 Athena 掃描的成本估算。對於非商業區域 （非AWS 分割區），此步驟只會提供日誌大小，而不會估算成本。您可以使用指定區域中的 Athena 定價文件來計算成本。
   + **approveAutomation：**

     等待指定的 IAM 主體核准，以繼續執行自動化的後續步驟。核准通知包含 Amazon EMR 日誌上 Amazon Athena 掃描的預估成本，以及自動化佈建之資源的詳細資訊。
   + **uploadKnownIssuesExecuteAthenaQueries：**

     將預先定義的已知問題上傳至 `S3BucketName` 參數中指定的 Amazon S3 儲存貯體。建立 AWS Glue 資料庫和資料表。根據輸入參數在 AWS Glue 資料庫中執行 Amazon Athena 查詢。
   + **getQueryExecutionStatus：**

     等到 Amazon Athena 查詢執行處於 `SUCCEEDED` 狀態。Amazon Athena DML 查詢會搜尋 Amazon EMR 叢集日誌中的錯誤和例外狀況。
   + **analyzeAthenaResults：**

     分析 Amazon Athena 結果，以提供源自預先定義映射集的調查結果、建議和知識中心 (KC) 文章。
   + **getAnalyzeResultsQuery1ExecutionStatus：**

     等待查詢執行處於 `SUCCEEDED` 狀態。Amazon Athena DML 查詢會分析先前 DML 查詢的結果。此分析查詢將傳回與解析和 KC 文章相符的例外狀況
   + **getAnalyzeResultsQuery2ExecutionStatus：**

     等待查詢執行處於 `SUCCEEDED` 狀態。Amazon Athena DML 查詢會分析先前 DML 查詢的結果。此分析查詢將傳回每個 Amazon S3 日誌路徑中偵測到的例外狀況/錯誤清單。
   + **printAthenaQueriesMessage：**

     列印 Amazon Athena DML 查詢結果的連結。
   + **cleanupResources：**

     刪除建立的 AWS Glue 資料庫並刪除在 Amazon EMR 日誌儲存貯體中建立的已知問題檔案，以清除資源。

1. 完成後，請檢閱輸出區段以取得執行的詳細結果：

   **輸出為 Athena 查詢結果提供三個連結：**
   + 在 Amazon EMR 叢集日誌中找到的所有錯誤和經常發生的例外狀況清單，以及對應的日誌位置 (Amazon S3 字首）。
   + Amazon EMR 日誌中符合的唯一已知例外狀況摘要，以及有助於故障診斷的建議解決方案和 KC 文章。
   + Amazon S3 日誌路徑中出現特定錯誤和例外狀況的詳細資訊，以支援進一步診斷。  
![\[Output section showing query links for exception summaries and analysis in AWS logs.\]](http://docs.aws.amazon.com/zh_tw/systems-manager-automation-runbooks/latest/userguide/images/awssupport-diagnose-emr-logs-with-athena_outputs.png)

 **參考** 

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-DiagnoseEMRLogsWithAthena/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定 自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程登陸頁面](https://aws.amazon.com/premiumsupport/technology/saw/)

AWS 服務文件
+ 如需詳細資訊，請參閱[疑難排解 Amazon EMR 叢集](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-troubleshoot.html) 