

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

# 日誌異常偵測
<a name="LogsAnomalyDetection"></a>

您可以透過兩種方式偵測日誌資料中的異常：建立*日誌異常偵測器*以進行持續監控，或使用 CloudWatch Logs Insights 查詢中的 [`anomaly detection`](CWL_QuerySyntax-Anomaly.md)命令進行隨需分析。

日誌異常偵測器會掃描擷取至日誌群組的日誌事件，並在日誌資料中自動尋找異常。異常偵測使用機器學習和模式辨識來建立典型日誌內容的基準。對於隨需分析，您可以在 CloudWatch Logs Insights 查詢中使用 `anomaly detection`命令來識別時間序列資料中的異常模式。如需查詢型異常偵測的詳細資訊，請參閱 [在 CloudWatch Logs Insights 中使用異常偵測](LogsAnomalyDetection-Insights.md)。

為日誌群組建立異常偵測器後，它會使用日誌群組中過去兩週的日誌事件進行訓練。訓練期間最多可能需要 15 分鐘。訓練完成後，它會開始分析傳入的日誌以識別異常，而異常會顯示在 CloudWatch Logs 主控台中供您檢查。

CloudWatch Logs 模式辨識透過識別日誌中的靜態和動態內容來擷取日誌模式。模式有助於分析大型日誌集，因為大量日誌事件通常可以壓縮為幾個模式。

例如，請參閱下列三個日誌事件的範例。

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

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

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

模式內的欄位稱為*字符*。在模式內不同的欄位，例如請求 ID 或時間戳記，稱為*動態字符*。針對動態字符找到的每個不同值稱為*字符值*。

如果 CloudWatch Logs 可以推斷動態字符代表的資料類型，則會將字符顯示為 `<{{string}}-{{number}}>`。{{字串}}是字符所代表資料類型的描述。相較於其他動態字符，{{數字}}會顯示此字符在模式中的顯示位置。

CloudWatch Logs 會根據分析包含該名稱的日誌事件內容來指派名稱的字串部分。

如果 CloudWatch Logs 無法推斷動態權杖所代表的資料類型，它會將權杖顯示為 <Token-{{number}}>，且{{數字}}指出與其他動態權杖相比，此權杖在模式中出現的位置。

動態字符的常見範例包括錯誤代碼、IP 地址、時間戳記和請求 IDs。

日誌異常偵測使用這些模式來尋找異常。在異常偵測器模型訓練期間之後，會根據已知趨勢評估日誌。異常偵測器會將顯著波動標記為異常。

本章說明如何啟用異常偵測、檢視異常、建立日誌異常偵測器的警示，以及日誌異常偵測器發佈的指標。它還描述了如何使用 加密異常偵測器及其結果 AWS Key Management Service。

建立日誌異常偵測器不會產生費用。

## 異常和模式的嚴重性和優先順序
<a name="LogsAnomalyDetection-Severity-Priority"></a>

日誌異常偵測器找到的每個異常都會指派*優先順序*。每個找到的模式都會指派一個*嚴重性*。
+ *優先順序*會自動計算，並以模式的嚴重性等級和與預期值的偏差量為基礎。例如，如果某個字符值突然增加 500%，該異常可能指定為`HIGH`優先順序，即使其嚴重性為 `NONE`。
+ *嚴重性*僅基於模式中找到的關鍵字，例如 `FATAL`、 `ERROR`和 `WARN`。如果找不到這些關鍵字，則模式的嚴重性會標記為 `NONE`。

## 異常可見性時間
<a name="LogsAnomalyDetection-Visibility"></a>

當您建立異常偵測器時，您可以指定它的最大異常可見性期間。這是異常顯示在主控台中，並由 [ListAnomalies](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_ListAnomalies.html) API 操作傳回的天數。經過這段時間之後，如果持續發生異常，它會自動接受為一般行為，且異常偵測器模型會停止將其標記為異常。

如果您在建立異常偵測器時未調整可見性時間，則會使用 21 天做為預設值。

## 隱藏異常
<a name="LogsAnomalyDetection-Suppress"></a>

發現異常之後，您可以選擇暫時或永久隱藏該異常。隱藏異常會導致異常偵測器在您指定的時間內停止將此出現標記為異常。當您抑制異常時，您可以選擇僅隱藏該特定異常，或抑制與發現異常的模式相關的所有異常。

您仍然可以在 主控台中檢視隱藏的異常。您也可以選擇停止隱藏它們。

## 常見問答集
<a name="LogsAnomalyDetection-FAQ"></a>

 **是否 AWS 使用我的資料來訓練機器學習演算法，以供其他客戶 AWS 使用？ ** 

否。訓練建立的異常偵測模型是根據日誌群組中的日誌事件，並且僅在該日誌群組和該 AWS 帳戶中使用。

 **哪些類型的日誌事件適用於異常偵測？** 

**日誌異常偵測非常適合：**應用程式日誌和其他類型的日誌，其中大多數日誌項目都符合典型模式。包含日誌層級或嚴重性關鍵字的日誌群組，例如 **INFO**、**R ERROR** 和 **DEBUG**，特別適合用於日誌異常偵測。

**日誌異常偵測不適用於：**具有極長 JSON 結構的日誌事件，例如 CloudTrail Logs。模式分析最多只會分析日誌行的前 1500 個字元，因此超過該限制的任何字元都會略過。

稽核或存取日誌，例如 VPC 流程日誌，也會減少異常偵測的成功率。異常偵測旨在尋找應用程式問題，因此可能不適合網路或存取異常。

為了協助您判斷異常偵測器是否適合特定日誌群組，請使用 CloudWatch Logs 模式分析來尋找群組中日誌事件中的模式數目。如果模式數量不超過約 300，異常偵測可能運作良好。如需模式分析的詳細資訊，請參閱 [模式分析](CWL_AnalyzeLogData_Patterns.md)。

 **哪些項目被標記為異常？** 

下列情況可能會導致日誌事件標記為異常：
+ 具有先前在日誌群組中看不到模式的日誌事件。
+ 已知模式的顯著變化。
+ 動態字符的新值，具有一組分散的一般值。
+ 動態字符值的出現次數發生大幅變更。

雖然上述所有項目都可能標記為異常，但它們並不表示應用程式效能不佳。例如，higher-than-usual`200`的成功值數目可能會標記為異常。在這種情況下，您可能會考慮抑制這些不代表問題的異常。

 **正在遮罩的敏感資料會發生什麼情況？** 

任何被遮罩為敏感資料的日誌事件部分都不會掃描異常。如需遮罩敏感資料的詳細資訊，請參閱[使用遮罩協助保護敏感日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data.html)。