View a markdown version of this page

針對日誌的警示 - Amazon CloudWatch

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

針對日誌的警示

您可以建立 CloudWatch 警示,以兩種方式監控您的日誌資料:

  • 日誌警示方法 — 建立日誌警示,以排程執行 CloudWatch Logs Insights 查詢,並直接根據閾值評估彙總結果。

  • 指標篩選條件方法 — 在日誌群組上建立指標篩選條件,然後在產生的指標上建立標準指標警示。

建立日誌警示

建立日誌警示

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

先決條件

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

注意

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

排程查詢執行角色

排程查詢執行角色允許 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:*" } ] }

日誌行角色 (選用)

日誌行角色可讓 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 記錄為資料事件,因此您必須使用資料事件記錄來設定追蹤以進行擷取。

使用主控台建立日誌警示

本節中的步驟說明如何使用 CloudWatch 主控台建立日誌警示。您也可以使用 AWS CLI 來建立日誌警示。如需詳細資訊,請參閱使用 建立日誌警示 AWS CLI

建立日誌警示
  1. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  2. 在導覽窗格中,選擇 Alarms (警示)。

  3. 選擇建立警示

  4. 針對資料來源,選擇日誌

  5. 日誌查詢下:

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

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

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

  6. 警示條件下

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

    2. 針對 than...,輸入閾值。

    3. (選用) 在其他組態下:

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

      2. 修改缺少資料處理,以指定如何處理缺少的資料。

  7. 排程下:

    1. 針對評估頻率,選擇查詢執行的頻率 (例如,每 5 分鐘)。

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

    3. 對於結束時間位移 (選用),查詢時間範圍的結束,以目前時間的秒數表示。

  8. IAM 許可下:

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

  9. 選擇下一步

  10. 設定動作下,視需要設定動作和通知。

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

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

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

  11. 選擇下一步

  12. 輸入名稱和選用的描述 (支援 Markdown)。

  13. (選用) 新增標籤。

  14. 選擇下一步

  15. 預覽和建立下,檢閱您的組態,然後選擇建立警示

使用 建立日誌警示 AWS CLI

您可以使用 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命令的關鍵參數。

put-log-alarm 參數
參數 必要 描述
--alarm-name 警示的名稱。只能包含 UTF-8 字元。
--comparison-operator 閾值評估的比較運算子。有效值:GreaterThanThresholdGreaterThanOrEqualToThresholdLessThanThresholdLessThanOrEqualToThreshold
--threshold 要比較的數值閾值。
--query-results-to-evaluate 要評估的最近查詢執行數目 (N,以 M-out-of-N 表示)。
--query-results-to-alarm 觸發所需的違規結果數量 ALARM(M M-out-of-N。
--treat-missing-data 如何處理遺失的資料。有效值: missing(預設)notBreaching、、breachingignore
--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

您可以使用 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 警示

本節中的程序說明如何根據日誌群組指標篩選條件建立警示。借助指標篩選條件,您可在要傳送至 CloudWatch 的日誌資料中尋找詞彙和模式。如需詳細資訊,請參閱《Amazon CloudWatch Logs 使用者指南》中的「使用篩選條件從日誌事件建立指標」。根據日誌群組指標篩選條件建立警示之前,必須先完成下列動作:

根據日誌群組指標篩選條件建立警示
  1. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

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

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

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

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

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

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

  8. Conditions (條件) 下,指定以下內容:

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

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

    3. 對於 than . . . (相比…),為閾值指定一個數字。

  9. 選擇 Additional configuration (其他組態)

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

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

  10. 選擇下一步

  11. 對於 Notification (通知),請指定當警示處於 ALARMOKINSUFFICIENT_DATA 狀態時要通知的 Amazon SNS 主題。

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

    2. (選用) 若不傳送通知,請選擇 Remove (移除)。

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

    警示只能在進入 ALARM 狀態時執行 Systems Manager 動作。如需有關 Systems Manager 的詳細資訊,請參閱設定 CloudWatch 以從警示建立 OpsItems事件建立

    注意

    若要建立執行 SSM Incident Manager 動作的警示,您必須具備特定許可。如需詳細資訊,請參閱 AWS Systems Manager Incident Manager 的身分型政策範例

  13. 選擇下一步

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

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