

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

# 將 CloudWatch Logs 傳送至 Firehose
<a name="writing-with-cloudwatch-logs"></a>

CloudWatch Logs 事件可以使用 CloudWatch 訂閱篩選條件傳送至 Firehose。如需詳細資訊，請參閱[使用 Amazon Data Firehose 訂閱篩選條件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#FirehoseExample)。

CloudWatch Logs 事件會以壓縮的 gzip 格式傳送至 Firehose。如果您想要將解壓縮的日誌事件交付至 Firehose 目的地，您可以使用 Firehose 中的解壓縮功能自動解壓縮 CloudWatch Logs。

**重要**  
目前，Firehose 不支援將 CloudWatch Logs 交付至 Amazon OpenSearch Service 目的地，因為 Amazon CloudWatch 將多個日誌事件合併為一個 Firehose 記錄，Amazon OpenSearch Service 無法接受一個記錄中的多個日誌事件。作為替代方案，您可以考慮[在 CloudWatch Logs 中使用 Amazon OpenSearch Service 的訂閱篩選條件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_OpenSearch_Stream.html)。

# 解壓縮 CloudWatch Logs
<a name="writing-with-cloudwatch-logs-decompression"></a>

如果您使用 Firehose 交付 CloudWatch Logs 並想要將解壓縮的資料交付至 Firehose 串流目的地，請使用 Firehose [Data Format Conversion](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html) (Parquet、ORC) 或[動態分割](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html)。您必須為 Firehose 串流啟用解壓縮。

您可以使用 AWS 管理主控台 AWS Command Line Interface 或 AWS SDKs啟用解壓縮。

**注意**  
如果您在串流上啟用解壓縮功能，請僅將該串流用於 CloudWatch Logs 訂閱篩選條件，而不是用於已取代的日誌。如果您在用來同時擷取 CloudWatch Logs 和 Vended Logs 的串流上啟用解壓縮功能，則 Vended Logs 擷取至 Firehose 失敗。此解壓縮功能僅適用於 CloudWatch Logs。

# 解壓縮 CloudWatch Logs 後擷取訊息
<a name="Message_extraction"></a>

當您啟用解壓縮時，您也可以選擇啟用訊息擷取。使用訊息擷取時，Firehose 會從解壓縮的 CloudWatch Logs 記錄中篩選掉所有中繼資料，例如擁有者、日誌群組、日誌串流和其他中繼資料，並僅傳遞訊息欄位中的內容。如果您要將資料交付至 Splunk 目的地，您必須開啟訊息擷取，Splunk 才能剖析資料。以下是使用和不使用訊息擷取解壓縮後的範例輸出。

圖 1：解壓縮後未擷取訊息的範例輸出：

```
{
 "owner": "111111111111",
 "logGroup": "CloudTrail/logs",
 "logStream": "111111111111_CloudTrail/logs_us-east-1",
 "subscriptionFilters": [
 "Destination"
 ],
 "messageType": "DATA_MESSAGE",
 "logEvents": [
 {
 "id": "31953106606966983378809025079804211143289615424298221568",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root1\"}"
 },
 {
 "id": "31953106606966983378809025079804211143289615424298221569",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root2\"}"
 },
 {
 "id": "31953106606966983378809025079804211143289615424298221570",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root3\"}"
 }
 ]
}
```

圖 2：使用訊息擷取解壓縮後的範例輸出：

```
{"eventVersion":"1.03","userIdentity":{"type":"Root1"}
{"eventVersion":"1.03","userIdentity":{"type":"Root2"}
{"eventVersion":"1.03","userIdentity":{"type":"Root3"}
```

# 從主控台對新的 Firehose 串流啟用解壓縮
<a name="writing-with-cloudwatch-logs-decompression-enabling-console"></a>

**使用 在新的 Firehose 串流上啟用解壓縮 AWS 管理主控台**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis) 的 Kinesis 主控台。

1. 在導覽窗格中選擇 **Amazon Data Firehose**。

1. 選擇**建立 Firehose 串流**。

1. 在**選擇來源和目的地**下  
****來源****  
Firehose 串流的來源。選擇下列其中一個來源：  
   + **直接 PUT** – 選擇此選項可建立生產者應用程式直接寫入的 Firehose 串流。如需與 Firehose 中的 Direct PUT 整合的 服務和代理程式和開放原始碼服務清單 AWS ，請參閱[本節](create-name.md)。
   + **Kinesis 串流：**選擇此選項可設定使用 Kinesis 資料串流做為資料來源的 Firehose 串流。然後，您可以使用 Firehose 輕鬆從現有的 Kinesis 資料串流讀取資料，並將其載入目的地。如需詳細資訊，請參閱[使用 Kinesis Data Streams 寫入 Firehose](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-kinesis-streams.html)  
****目的地****  
Firehose 串流的目的地。選擇下列其中一項：  
   + Amazon S3
   + Splunk

1. 在 **Firehose 串流名稱**下，輸入串流的名稱。

1. （選用） 在**轉換記錄**下：
   + 在**從 Amazon CloudWatch Logs 解壓縮來源記錄**區段中，選擇**開啟解壓縮**。
   + 如果您想要在解壓縮後使用訊息擷取，請選擇**開啟訊息擷取**。

# 在現有的 Firehose 串流上啟用解壓縮
<a name="enabling-decompression-existing-stream-console"></a>

本節提供在現有 Firehose 串流上啟用解壓縮的指示。它涵蓋兩個案例：已停用 Lambda 處理的串流，以及已啟用 Lambda 處理的串流。以下各節概述每個案例的step-by-step程序，包括 Lambda 函數的建立或修改、更新 Firehose 設定，以及監控 CloudWatch 指標，以確保成功實作內建的 Firehose 解壓縮功能。

## 停用 Lambda 處理時啟用解壓縮
<a name="enabling-decomp-exist-stream-lam-disable"></a>

若要在停用 Lambda 處理的現有 Firehose 串流上啟用解壓縮，您必須先啟用 Lambda 處理。此條件僅適用於現有的串流。下列步驟顯示如何在未啟用 Lambda 處理的現有串流上啟用解壓縮。

1. 建立 Lambda 函式。您可以建立傳遞的虛擬記錄，也可以使用此[藍圖](https://github.com/aws-samples/aws-kinesis-firehose-resources/tree/main/blueprints/kinesis-firehose-cloudwatch-logs-processor)建立新的 Lambda 函數。

1. 更新您目前的 Firehose 串流以啟用 Lambda 處理，並使用您建立用於處理的 Lambda 函數。

1. 使用新的 Lambda 函數更新串流後，請返回 Firehose 主控台並啟用解壓縮。

1. 停用您在步驟 1 中啟用的 Lambda 處理。您現在可以刪除您在步驟 1 中建立的函數。

## 啟用 Lambda 處理時啟用解壓縮
<a name="enabling-decomp-exist-stream-lam-enable"></a>

如果您已有具有 Lambda 函數的 Firehose 串流，若要執行解壓縮，您可以將其取代為 Firehose 解壓縮功能。在繼續之前，請檢閱您的 Lambda 函數程式碼，以確認其僅執行解壓縮或訊息擷取。Lambda 函數的輸出看起來應該類似於[圖 1 或圖 2 ](Message_extraction.md)所示的範例。如果輸出看起來類似，您可以使用下列步驟取代 Lambda 函數。

1. 使用此[藍圖](https://github.com/aws-samples/aws-kinesis-firehose-resources/tree/main/blueprints/kinesis-firehose-cloudwatch-logs-processor)取代您目前的 Lambda 函數。新的藍圖 Lambda 函數會自動偵測傳入的資料是壓縮還是解壓縮。只有在壓縮其輸入資料時，才會執行解壓縮。

1. 使用內建的 Firehose 選項開啟解壓縮以解壓縮。

1. 如果尚未啟用，請為您的 Firehose 串流啟用 CloudWatch 指標。監控指標`CloudWatchProcessorLambda_IncomingCompressedData`並等到此指標變更為零。這會確認傳送至 Lambda 函數的所有輸入資料都已解壓縮，而且不再需要 Lambda 函數。

1. 移除 Lambda 資料轉換，因為您不再需要它來解壓縮串流。

# 在 Firehose 串流上停用解壓縮
<a name="writing-with-cloudwatch-logs-decompression-disabling-console"></a>

****

使用 在資料串流上停用解壓縮 AWS 管理主控台

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis) 的 Kinesis 主控台。

1. 在導覽窗格中選擇 **Amazon Data Firehose**。

1. 選擇您要編輯的 Firehose 串流。

1. 在 **Firehose 串流詳細資訊**頁面上，選擇**組態**索引標籤。

1. 在**轉換和轉換記錄**區段中，選擇**編輯**。

1. **在從 Amazon CloudWatch Logs 解壓縮來源記錄**下，清除**開啟解壓縮**，然後選擇**儲存變更**。

# 針對 Firehose 中的解壓縮進行故障診斷
<a name="decomp-faq"></a>

下表顯示 Firehose 在資料解壓縮和處理期間如何處理錯誤，包括將記錄交付至錯誤 S3 儲存貯體、記錄錯誤和發出指標。它還說明針對未經授權的資料放置操作傳回的錯誤訊息。


| 問題 | 解決方案 | 
| --- | --- | 
| 如果在解壓縮期間發生錯誤，來源資料會發生什麼情況？ |  如果 Amazon Data Firehose 無法解壓縮記錄，記錄會依原狀 （壓縮格式） 交付，以便在 Firehose 串流建立時間期間指定的 S3 儲存貯體發生錯誤。除了記錄之外，交付的物件也包含錯誤碼和錯誤訊息，而且這些物件會交付到名為 的 S3 儲存貯體字首`decompression-failed`。Firehose 會在記錄解壓縮失敗後繼續處理其他記錄。  | 
| 如果成功解壓縮後處理管道發生錯誤，來源資料會發生什麼情況？ |  如果在解壓縮如動態分割和資料格式轉換等處理步驟中，Amazon Data Firehose 發生錯誤，記錄會以壓縮格式交付到您在 Firehose 串流建立時間期間指定的錯誤 S3 儲存貯體。除了記錄之外，交付的物件也包含錯誤碼和錯誤訊息。  | 
| 如果發生錯誤或例外狀況，您會如何收到通知？ |  如果在解壓縮期間發生錯誤或例外狀況，如果您設定 CloudWatch Logs，Firehose 會將錯誤訊息記錄到 CloudWatch Logs。此外，Firehose 會將指標傳送至您可以監控的 CloudWatch 指標。您也可以根據 Firehose 發出的指標選擇性地建立警示。  | 
| 當put操作不是來自 CloudWatch Logs 時會發生什麼情況？ | 當客戶puts不是來自 CloudWatch Logs 時，會傳回下列錯誤訊息：<pre>Put to Firehose failed for AccountId: <accountID>, FirehoseName:  <firehosename> because the request is not originating from allowed source types.</pre> | 
| Firehose 針對解壓縮功能發出哪些指標？ | Firehose 會發出每個記錄的解壓縮指標。您應該選取期間 (1 分鐘）、統計資料 （總和）、日期範圍，以取得DecompressedRecords失敗、成功或DecompressedBytes失敗或成功的數量。如需詳細資訊，請參閱[CloudWatch Logs 解壓縮指標](monitoring-with-cloudwatch-metrics.md#decompression-metrics-cw)。 | 