

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

# 記錄 Athena 中的 Spark 應用程式事件
<a name="notebooks-spark-logging"></a>

Athena 筆記本編輯器允許標準的 Jupyter、Spark 和 Python 記錄。您可以使用 `df.show()` 顯示 PySpark DataFrame 內容，或使用 `print("Output")` 在儲存格輸出中顯示值。計算的 `stdout`、`stderr` 和 `results` 輸出會寫入 Amazon S3 中的查詢結果儲存貯體位置。

## 將 Spark 應用程式事件記錄到 Amazon CloudWatch
<a name="notebooks-spark-logging-logging-spark-application-events-to-amazon-cloudwatch"></a>

您的 Athena 工作階段也可以在您使用的帳戶中將日誌寫入 [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)。

### 了解日誌串流和日誌群組
<a name="notebooks-spark-logging-understanding-log-streams-and-log-groups"></a>

CloudWatch 會將日誌活動整理至日誌串流和日誌群組中。

**Log streams** (日誌串流) –CloudWatch Logs 日誌串流是一系列共用相同來源的日誌事件。CloudWatch Logs 中的每個單獨日誌來源組成單獨的日誌串流。

**Log groups** (日誌群組) – 在 CloudWatch Logs 中，日誌群組是共享相同保留、監控和存取控制設定的日誌串流群組。

可以屬於一個日誌群組的日誌串流數量並沒有限制。

在 Athena 中，當您第一次啟動筆記本工作階段時，Athena 會在 CloudWatch 中建立一個使用已啟用 Spark 之工作群組名稱的日誌群組，如下列範例所示。

```
/aws-athena/workgroup-name
```

此日誌群組會為工作階段中的每個執行器接收日誌串流，其中該日誌串流會產生至少一個日誌事件。執行器是筆記本工作階段可向 Athena 請求的最小運算單位。在 CloudWatch 中，日誌串流的名稱以工作階段 ID 和執行器 ID 開頭。

如需有關 CloudWatch 日誌群組和日誌串流的詳細資訊，請參閱《Amazon CloudWatch Logs 使用者指南》中的[使用日誌群組和日誌串流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

### 在 Athena for Spark 中，使用標準記錄器物件
<a name="notebooks-spark-logging-using-standard-logger-objects-in-athena-for-spark"></a>

在 Athena for Spark 工作階段中，您可以使用下列兩個全球標準記錄器物件將日誌寫入到 Amazon CloudWatch：
+ **athena\_user\_logger** – 僅將日誌傳送到 CloudWatch。當您想要將 Spark 應用程式的資訊直接記錄到 CloudWatch 時，請使用此物件，如下列範例所示。

  ```
  athena_user_logger.info("CloudWatch log line.")
  ```

  此範例會將日誌事件寫入 CloudWatch，如下所示：

  ```
  AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: CloudWatch log line.
  ```
+ **athena\_shared\_logger** – 基於 AWS 支援目的，將相同的日誌傳送至 CloudWatch 和 。您可以使用此物件與服務 AWS 團隊共用日誌以進行故障診斷，如下列範例所示。

  ```
  athena_shared_logger.info("Customer debug line.")
  var = [...some variable holding customer data...]
  athena_shared_logger.info(var)
  ```

  此範例會將 `var` 變數的 `debug` 行和值記錄到 CloudWatch Logs，並將每行的複本傳送到 支援。
**注意**  
為了您的隱私權，您的計算程式碼和結果不會與 共用 AWS。確定您的 `athena_shared_logger` 呼叫僅寫入您想要 支援顯示的資訊。

提供的記錄器會透過 [Apache Log4j](https://logging.apache.org/log4j/) 寫入事件，並繼承此介面的日誌記錄層級。可能的日誌層級值為 `DEBUG`、`ERROR`、`FATAL`、`INFO` 和 `WARN` 或 `WARNING`。您可以使用記錄器上相應的具名函數來產生這些值。

**注意**  
請勿重新繫結名稱 `athena_user_logger` 或 `athena_shared_logger`。如此一來，記錄物件無法在剩餘的工作階段寫入 CloudWatch。

### 範例：將筆記本事件記錄到 CloudWatch
<a name="notebooks-spark-logging-example-logging-notebook-events-to-cloudwatch"></a>

以下程序說明如何將 Athena 筆記本事件記錄到 Amazon CloudWatch Logs。

**若要將 Athena 筆記本事件記錄到 Amazon CloudWatch Logs**

1. 請遵循 [開始在 Amazon Athena 上使用 Apache Spark](notebooks-spark-getting-started.md)，以使用唯一名稱在 Athena 中建立已啟用 Spark 的工作群組。本教學課程使用工作群組名稱 `athena-spark-example`。

1. 請遵循 [步驟 7：建立您自己的筆記本](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook) 中的步驟，以建立筆記本並啟動新的工作階段。

1. 在 Athena 筆記本編輯器的新筆記本儲存格中，輸入下列命令：

   ```
   athena_user_logger.info("Hello world.")         
   ```

1. 執行儲存格。

1. 執行下列其中一項動作，擷取目前工作階段 ID：
   + 檢視儲存格輸出 (例如，`... session=72c24e73-2c24-8b22-14bd-443bdcd72de4`)。
   + 在新的儲存格中，執行[魔術](notebooks-spark-magics.md)命令 `%session_id`。

1. 儲存工作階段 ID。

1. 使用與您用來執行筆記本工作階段 AWS 帳戶 相同的 ，開啟位於 https：//[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 的 CloudWatch 主控台。

1. 在 CloudWatch 主控台導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 在日誌群組清單中，選擇具有已啟用 Spark 之 Athena 工作群組名稱的日誌群組，如下列範例所示。

   ```
   /aws-athena/athena-spark-example
   ```

   **Log streams** (日誌串流) 區段包含工作群組的一或多個日誌串流連結清單。每個日誌串流名稱都包含工作階段 ID、執行器 ID 和由正斜線字元分隔的唯一 UUID。

   例如，如果工作階段 ID 為 `5ac22d11-9fd8-ded7-6542-0412133d3177` 且執行器 ID 為 `f8c22d11-9fd8-ab13-8aba-c4100bfba7e2`，日誌串流的名稱會類似下列範例。

   ```
   5ac22d11-9fd8-ded7-6542-0412133d3177/f8c22d11-9fd8-ab13-8aba-c4100bfba7e2/f012d7cb-cefd-40b1-90b9-67358f003d0b
   ```

1. 選擇工作階段的日誌串流連結。

1. 在 **Log events** (日誌事件) 頁面上，檢視 **Message** (訊息) 資料欄。

   您執行之儲存格的日誌事件類似下列：

   ```
   AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
   ```

1. 返回 Athena 筆記本編輯器。

1. 在新的儲存格中，輸入下列程式碼。程式碼會將變數記錄到 CloudWatch：

   ```
   x = 6
   athena_user_logger.warn(x)
   ```

1. 執行儲存格。

1. 返回相同日誌串流的 CloudWatch 主控台 **Log events** (日誌事件) 頁面。

1. 日誌串流現在包含日誌事件項目，其中包含類似下列訊息：

   ```
   AthenaForApacheSpark: 2022-01-01 12:00:00,000 WARN builtins: 6
   ```