

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

# 模式分析
<a name="CWL_AnalyzeLogData_Patterns"></a>

CloudWatch Logs Insights 會使用機器學習演算法來尋找*模式*。模式是在您的日誌欄位之間重複出現的共用文字結構。當您檢視查詢的結果時，您可以選擇**模式**索引標籤，以查看 CloudWatch Logs 根據結果範例找到的模式。或者，您可以將 `pattern`命令附加至查詢，以分析整組相符日誌事件中的模式。

模式有助於分析大型日誌集，因為大量日誌事件通常可以壓縮為幾個模式。

請考慮以下三個日誌事件的範例。

```
2023-01-01 19:00:01 [INFO] Calling DynamoDB to store for resource id 12342342k124-12345
2023-01-01 19:00:02 [INFO] Calling DynamoDB to store for resource id 324892398123-12345
2023-01-01 19:00:03 [INFO] Calling DynamoDB to store for resource id 3ff231242342-12345
```

在先前的範例中，這三個日誌事件都遵循一個模式：

```
<Time-1> [INFO] Calling DynamoDB to store for resource id <ID-2>
```

模式內的欄位稱為*字符*。模式內不同的欄位，例如請求 ID 或時間戳記，都是*動態字符*。每個動態字符都由 表示`<string-number>`。*字串*是字符所代表資料類型的描述。此*數字*顯示與其他動態字符相比，此字符在模式中的顯示位置。

動態字符的常見範例包括錯誤代碼、時間戳記和請求 IDs。*權杖值*代表動態權杖的特定值。例如，如果動態字符代表 HTTP 錯誤代碼，則字符值可以是 `501`。

模式偵測也用於 CloudWatch Logs 異常偵測器並比較功能。如需詳細資訊，請參閱[日誌異常偵測](LogsAnomalyDetection.md)及[比較 （差異） 與先前的時間範圍](CWL_AnalyzeLogData_Compare.md)。

## 模式分析入門
<a name="CWL_AnalyzeLogData_Patterns-GetStarted"></a>

模式偵測會在任何 CloudWatch Logs Insights 查詢中自動執行。不包含 `pattern`命令的查詢會在結果中同時取得日誌事件和模式。

如果您在查詢中包含 `pattern`命令，則會對整組相符的日誌事件執行模式分析。這可提供更準確的模式結果，但當您使用 `pattern`命令時，不會傳回原始日誌事件。當查詢不包含 時`pattern`，模式結果會根據前 1000 個傳回的日誌事件，或是您在查詢中使用的限制值。如果您在查詢`pattern`中包含 ，則**模式**索引標籤中顯示的結果會衍生自查詢相符的所有日誌事件。

**在 CloudWatch Logs Insights 中開始使用模式分析**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇**日誌**，然後選擇 **Logs Insights**。

   在 **Logs Insights** (日誌洞察) 頁面上，查詢編輯器包含會傳回 20 筆最新日誌事件的預設查詢。

1. 移除查詢方塊中的`| limit 20`行，讓查詢如下所示：

   ```
   fields @timestamp, @message, @logStream, @log
   | sort @timestamp desc
   ```

1. 在**選取日誌群組 (Select log group) **下拉式清單中，選擇要查詢的一或多個日誌群組。

1. (選用) 使用時間間隔選擇器，選取您要查詢的時間段。

   您可以選擇 5 分鐘和 30 分鐘間隔；1 小時、3 小時和 12 小時間隔；或自訂時間範圍。

1. 選擇**執行查詢**以開始查詢。

   當查詢完成執行時，**日誌**索引標籤會顯示查詢傳回的日誌事件資料表。表格上方是有關有多少筆記錄符合查詢的訊息，類似於**顯示 71，101 筆記錄中有 10，000 筆符合**。

1. 選擇**模式**索引標籤。

1. 資料表現在會顯示查詢中找到的模式。由於查詢不包含 `pattern`命令，此標籤只會顯示 10，000 個日誌事件中探索到的模式，這些事件會顯示在**日誌**標籤的表格中。

   對於每個模式，會顯示下列資訊：
   + **模式**，每個動態字符都顯示為 `<string-number>`。*字串*是字符所代表資料類型的描述。此*數字*顯示與其他動態字符相比，此字符在模式中的顯示位置。
   + **事件計數**，這是模式出現在查詢日誌事件中的次數。選擇**事件計數**欄標題，依頻率排序模式。
   + **事件比率**，即包含此模式的查詢日誌事件百分比。
   + **嚴重性類型**，將是下列其中一項：
     + 如果模式包含**錯誤**一詞，則為**錯誤**。
     + 如果模式包含**警告**一詞，但不包含**錯誤**，請**警告** 。
     + 如果模式不包含**警告**或**錯誤**，**則為 INFO**。

     選擇**嚴重性資訊**欄標題，依嚴重性排序模式。

1. 現在變更查詢。將查詢中的 `| sort @timestamp desc`行取代為 `| pattern @message`，讓完整的查詢如下所示：

   ```
   fields @timestamp, @message, @logStream, @log
   | pattern @message
   ```

1. 選擇 **Run query** (執行查詢)。

   查詢完成時，**日誌**索引標籤中沒有結果。不過，根據查詢的日誌事件總數，**模式**索引標籤可能列出更多模式。

1. 無論您是否包含在查詢`pattern`中，都可以進一步檢查查詢傳回的模式。若要這樣做，請在**檢查**欄中選擇其中一個模式的圖示。

   **模式檢查**窗格隨即出現，並顯示下列項目：
   + **模式**。在模式中選取權杖，以分析該權杖的值。
   + 顯示查詢時間範圍內模式出現次數的長條圖。這可協助您識別有趣的趨勢，例如模式的出現突然增加。
   + **日誌範例**索引標籤會顯示一些符合所選模式的日誌事件。
   + 如果您已選取動態**權杖，權杖值**索引標籤會顯示所選動態權杖的值。
**注意**  
每個字符最多擷取 10 個字符值。字符計數可能不精確。CloudWatch Logs 使用機率計數器來產生字符計數，而不是絕對值。
   + **相關模式**索引標籤會顯示與您檢查的模式幾乎同時經常發生的其他模式。例如，如果`ERROR`訊息的模式通常伴隨另一個標記為 的日誌事件`INFO`和其他詳細資訊，則此模式會顯示在此處。

## 模式命令的詳細資訊
<a name="CWL_AnalyzeLogData_Patterns-Details"></a>

本節包含有關 `pattern`命令及其用途的更多詳細資訊。
+ 在先前的教學課程中，我們在新增 時移除 `sort`命令，`pattern`因為如果查詢在`sort`命令之後包含`pattern`命令，則查詢無效。在 `pattern`之前擁有 是有效的`sort`。

   如需`pattern`語法的詳細資訊，請參閱 [pattern](CWL_QuerySyntax-Pattern.md)。
+ 當您`pattern`在查詢中使用 時， `@message` 必須是在 `pattern`命令中選取的其中一個欄位。
+ 您可以在`filter`命令之前包含 `pattern`命令，只讓篩選過的日誌事件集做為模式分析的輸入。
+ 若要查看特定欄位的模式結果，例如衍生自`parse`命令的欄位，請使用 `pattern @fieldname`。
+ 使用非日誌輸出的查詢，例如使用 `stats`命令的查詢，不會傳回模式結果。

