

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

# 針對日誌的警示
<a name="Alarm-On-Logs"></a>

您可以建立 CloudWatch 警示，以兩種方式監控您的日誌資料：
+ **日誌警示方法** — 建立日誌警示，以排程執行 CloudWatch Logs Insights 查詢，並直接根據閾值評估彙總結果。
+ **指標篩選條件方法** — 在日誌群組上建立指標篩選條件，然後在產生的指標上建立標準指標警示。

## 建立日誌警示
<a name="Create_Log_Alarm"></a>

### 建立日誌警示
<a name="log-alarm-overview"></a>

您可以建立使用 CloudWatch Logs Insights 查詢來直接監控日誌資料的 CloudWatch 警示。查詢會依排程使用排程查詢執行，而警示會根據閾值評估彙總結果。如需日誌警示如何運作的詳細資訊，請參閱 [日誌警示](alarm-log.md)。

### 先決條件
<a name="log-alarm-prerequisites"></a>

建立日誌警示之前，您必須建立授予 CloudWatch Logs 執行排程查詢許可的 IAM 角色。如果您也想要在 Amazon SNS 通知中包含日誌行，則必須建立第二個角色。

**注意**  
如果您從 CloudWatch 主控台建立日誌警示，主控台會協助您建立這些角色。

#### 排程查詢執行角色
<a name="log-alarm-prereq-query-role"></a>

排程查詢執行角色允許 CloudWatch Logs 代表您執行查詢。此角色是所有日誌警示執行排程查詢的必要角色。角色必須信任 `logs.amazonaws.com`服務委託人。

下列範例顯示排程查詢執行角色的信任政策。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

下列範例顯示許可政策。將 範圍`Resource`限定為查詢目標的日誌群組 ARNs。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:StartQuery",
                "logs:StopQuery",
                "logs:GetQueryResults",
                "logs:DescribeLogGroups"
            ],
            "Resource": "arn:aws:logs:{{region}}:{{account-id}}:log-group:{{your-log-group}}:*"
        }
    ]
}
```

#### 日誌行角色 （選用）
<a name="log-alarm-prereq-alarm-role"></a>

日誌行角色允許 CloudWatch 擷取 Amazon SNS 電子郵件通知的日誌行。只有在您將 `ActionLogLineCount`設定為大於 0 的值時，才需要此角色。角色必須信任 `cloudwatch.amazonaws.com`服務委託人。

下列範例顯示日誌行角色的信任政策。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudwatch.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

下列範例顯示日誌行角色的許可政策。需要 `logs:GetQueryResults`許可才能擷取日誌行。將 範圍`Resource`限定為查詢目標的日誌群組 ARNs。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:GetQueryResults"
            ],
            "Resource": "arn:aws:logs:{{region}}:{{account-id}}:log-group:{{your-log-group}}:*"
        }
    ]
}
```

**注意**  
若要在 CloudWatch 主控台中檢視日誌警示查詢結果，存取主控台的 IAM 使用者或角色必須具有 `logs:GetScheduledQueryData`許可。這是僅限主控台的 API，無法透過 AWS CLI 或 SDK 使用。CloudTrail 會將此 API 記錄為資料事件，因此您必須使用資料事件記錄來設定追蹤以進行擷取。

### 使用主控台建立日誌警示
<a name="log-alarm-create-console"></a>

本節中的步驟說明如何使用 CloudWatch 主控台建立日誌警示。您也可以使用 AWS CLI 來建立日誌警示。如需詳細資訊，請參閱[使用 建立日誌警示 AWS CLI](#log-alarm-create-cli)。

**建立日誌警示**

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

1. 在導覽窗格中，選擇 **Alarms** (警示)。

1. 選擇**建立警示**。

1. 針對**資料來源**，選擇**日誌**。

1. 在**日誌查詢**下：

   1. 選擇在 **Log Analytics 中建立查詢**。這會開啟您建置查詢的 Log Analytics 頁面。

   1. 在日誌分析頁面上，撰寫您的查詢。完成後，選擇右上角**的繼續警示**以返回警示主控台。

   1. 對於**彙總表達式**，指定如何彙總查詢結果，以傳回數值進行警示評估 （例如， `count(*)`或 `avg(latency) by endpoint`)。

1. 在**警示條件下**：

   1. 對於**每當彙總結果為...時**，請選擇比較運算子。

   1. 針對 **than...**，輸入閾值。

   1. （選用） **在其他組態**下：

      1. 修改**資料點以發出警示**，以指定`ALARM`觸發最後一個 N 個查詢所需的違規結果數量。

      1. 修改**缺少資料處理**，以指定如何處理缺少的資料。

1. 在**排程**下：

   1. 針對**評估頻率**，選擇查詢執行的頻率 （例如，每 5 分鐘）。

   1. 對於**開始時間偏移**，每個查詢執行的回顧時段。

   1. 對於**結束時間位移** （選用），查詢時間範圍的結束，以目前時間的秒數表示。

1. 在 **IAM 許可**下：

   1. 指定執行排程查詢所需的角色。您可以選擇建立新的角色或使用現有的角色。

1. 選擇**下一步**。

1. 在**設定動作**下，視需要設定動作和通知。

   1. 若要在 Amazon SNS 電子郵件通知中包含觸發警示轉換的日誌行，請在**動作中包含查詢結果**：

     1. 新增**查詢結果的數量**，以指定要包含的日誌行數。

     1. 建立或選擇用來取得所需查詢結果的現有角色。

1. 選擇**下一步**。

1. 輸入**名稱**和選用**的描述** （支援 Markdown)。

1. (選用) 新增標籤。

1. 選擇**下一步**。

1. 在**預覽和建立**下，檢閱您的組態，然後選擇**建立警示**。

### 使用 建立日誌警示 AWS CLI
<a name="log-alarm-create-cli"></a>

您可以使用 AWS CLI `put-log-alarm`命令來建立日誌警示。

下列範例會建立日誌警示，以監控日誌群組中的錯誤計數，並在 5 個查詢執行中的 3 個計數超過 100 個時轉換為 `ALARM` 狀態。

```
aws cloudwatch put-log-alarm \
    --alarm-name "HighErrorCount" \
    --alarm-description "Alarm when error count exceeds 100" \
    --comparison-operator GreaterThanThreshold \
    --threshold 100 \
    --query-results-to-evaluate 5 \
    --query-results-to-alarm 3 \
    --treat-missing-data missing \
    --alarm-actions "arn:aws:sns:{{region}}:{{account-id}}:{{topic-name}}" \
    --scheduled-query-configuration '{
        "QueryString": "fields @timestamp, @message | filter @message like /ERROR/",
        "LogGroupIdentifiers": ["/aws/lambda/my-function"],
        "ScheduledQueryRoleARN": "arn:aws:iam::{{account-id}}:role/ScheduledQueryRole",
        "AggregationExpression": "count(*)",
        "ScheduleConfiguration": {
            "ScheduleExpression": "rate(10 minutes)",
            "StartTimeOffset": 600
        }
    }' \
    --action-log-line-count 5 \
    --action-log-line-role-arn "arn:aws:iam::{{account-id}}:role/LogLineRole"
```

下表說明 `put-log-alarm`命令的關鍵參數。


| 參數 | 必要 | 描述 | 
| --- | --- | --- | 
| --alarm-name | 是 | 警示的名稱。只能包含 UTF-8 字元。 | 
| --comparison-operator | 是 | 閾值評估的比較運算子。有效值：GreaterThanThreshold、GreaterThanOrEqualToThreshold、LessThanThreshold、LessThanOrEqualToThreshold。 | 
| --threshold | 是 | 要比較的數值閾值。 | 
| --query-results-to-evaluate | 是 | 要評估的最近查詢執行數目 (N，以 M-out-of-N 表示）。 | 
| --query-results-to-alarm | 是 | 觸發所需的違規結果數量 ALARM(M-out-of-N)。 | 
| --treat-missing-data | 否 | 如何處理遺失的資料。有效值： missing（預設）notBreaching、、breaching、ignore。 | 
| --scheduled-query-configuration | 是 | 查詢組態，包括查詢字串、日誌群組識別符、排程查詢角色 ARN、彙總表達式和排程組態。 | 
| --action-log-line-count | 否 | 要包含在 Amazon SNS 電子郵件通知中的日誌行數 (0–50)。預設值為 0。 | 
| --action-log-line-role-arn | 否 | 信任 之 IAM 角色的 ARNcloudwatch.amazonaws.com。如果 action-log-line-count 大於 0，則為必要。 | 

### 使用 建立日誌警示 AWS CloudFormation
<a name="log-alarm-create-cfn"></a>

您可以使用 `AWS::CloudWatch::LogAlarm` 資源類型在 AWS CloudFormation 範本中建立日誌警示。

下列範例範本會建立可監控錯誤計數的日誌警示。

```
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  HighErrorCountAlarm:
    Type: AWS::CloudWatch::LogAlarm
    Properties:
      AlarmName: HighErrorCount
      AlarmDescription: Alarm when error count exceeds 100
      ComparisonOperator: GreaterThanThreshold
      Threshold: 100
      QueryResultsToEvaluate: 5
      QueryResultsToAlarm: 3
      TreatMissingData: missing
      ActionLogLineCount: 5
      ActionLogLineRoleArn: !GetAtt LogLineRole.Arn
      ScheduledQueryConfiguration:
        QueryString: "fields @timestamp, @message | filter @message like /ERROR/"
        LogGroupIdentifiers:
          - /aws/lambda/my-function
        ScheduledQueryRoleARN: !GetAtt ScheduledQueryRole.Arn
        AggregationExpression: "count(*)"
        ScheduleConfiguration:
          ScheduleExpression: "rate(10 minutes)"
          StartTimeOffset: 600
      AlarmActions:
        - !Ref AlarmSNSTopic
```

### 根據日誌群組指標篩選條件建立 CloudWatch 警示
<a name="Create_alarm_log_group_metric_filter"></a>

 本節中的程序說明如何根據日誌群組指標篩選條件建立警示。借助指標篩選條件，您可在要傳送至 CloudWatch 的日誌資料中尋找詞彙和模式。如需詳細資訊，請參閱《Amazon CloudWatch Logs 使用者指南**》中的「[使用篩選條件從日誌事件建立指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)」。根據日誌群組指標篩選條件建立警示之前，必須先完成下列動作：
+  建立 日誌群組 如需詳細資訊，請參閱《Amazon CloudWatch Logs 使用者指南**》中的[使用日誌群組和日誌串流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group)。
+  建立指標篩選條件。如需詳細資訊，請參閱《Amazon CloudWatch Logs 使用者指南**》中的[建立日誌群組的指標篩選條件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html)。

**根據日誌群組指標篩選條件建立警示**

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

1.  在導覽窗格中，選擇 **Logs** (日誌)，然後選擇 **Log groups** (日誌群組)。

1.  選擇包含指標篩選條件的日誌群組。

1.  選擇 **Metric filters** (指標篩選條件)。

1.  在指標篩選條件索引標籤中，選取要作為警示依據之指標篩選條件的方塊。

1.  選擇 **Create alarm** (建立警示)。

1.  (選用) 在 **Metric** (指標) 下，編輯 **Metric name** (指標名稱)、**Statistic** (統計資料) 以及 **Period** (期間)。

1.  在 **Conditions (條件)** 下，指定以下內容：

   1.  對於 **Threshold type** (閾值類型)，選擇 **Static** (靜態) 或 **Anomaly detection** (異常偵測)。

   1.  對於 **Whenever {{your-metric-name}} is . . .** (每當 your-metric-name 為…時)，選擇 **Greater** (大於)、**Greater/Equal** (大於/等於)、**Lower/Equal** (小於/等於) 或 **Lower** (小於)。

   1.  對於 **than . . .** (相比…)，為閾值指定一個數字。

1.  選擇 **Additional configuration (其他組態)**。

   1.  對於 **Data points to alarm** (要警示的資料點)，指定多少資料點會觸發警示進入 `ALARM` 狀態。如果您指定相符的值，則在許多連續期間違規時，警示會進入 `ALARM` 狀態。若要建立 N 個中有 M 個警示，請為第一個值指定一個數字，該數字應小於您為第二個值指定的數字。如需詳細資訊，請參閱[警示評估](alarm-evaluation.md)。

   1.  對於 **Missing data treatment** (遺失資料處理方式)，請選取一個選項，以指定評估警示時如何處理遺失資料。

1.  選擇**下一步**。

1.  對於 **Notification** (通知)，請指定當警示處於 `ALARM`、`OK` 或 `INSUFFICIENT_DATA` 狀態時要通知的 Amazon SNS 主題。

   1.  (選用) 若要針對相同警示狀態或不同警示狀態傳送多個通知，請選擇 **Add notification** (新增通知)。

   1.  (選用) 若不傳送通知，請選擇 **Remove** (移除)。

1. 若要讓警示執行 Auto Scaling、 EC2、Lambda 或 Systems Manager 動作，請選擇適當的按鈕，然後選擇警示狀態及要執行的動作。如果選擇 Lambda 函數作為警示動作，則可以指定函數名稱或 ARN，並且可以選擇性地選擇函數的特定版本。

   警示只能在進入 ALARM 狀態時執行 Systems Manager 動作。如需有關 Systems Manager 的詳細資訊，請參閱[設定 CloudWatch 以從警示建立 OpsItems](https://docs.aws.amazon.com/systems-manager/latest/userguide/OpsCenter-create-OpsItems-from-CloudWatch-Alarms.html) 和[事件建立](https://docs.aws.amazon.com/incident-manager/latest/userguide/incident-creation.html)。
**注意**  
若要建立執行 SSM Incident Manager 動作的警示，您必須具備特定許可。如需詳細資訊，請參閱 [AWS Systems Manager Incident Manager 的身分型政策範例](https://docs.aws.amazon.com/incident-manager/latest/userguide/security_iam_id-based-policy-examples.html)。

1.  選擇**下一步**。

1.  在 **Name and description (名稱和描述)** 中，輸入警示的名稱和描述。此名稱只能包含 UTF-8 字元，不能包含 ASCII 控制字元。說明可以包括 Markdown 格式，僅在 CloudWatch 主控台的警示**詳細資訊**標籤中顯示。Markdown 對於將連結新增至執行手冊或其他內部資源很實用。

1.  對於 **Preview and create** (預覽並建立)，請檢查組態是否正確無誤，然後選擇 **Create alarm** (建立警示)。