View a markdown version of this page

根据日志触发警报 - Amazon CloudWatch

根据日志触发警报

您可以通过两种方式创建 CloudWatch 警报来监控日志数据:

  • 日志警报方法:创建一个日志警报,按计划运行 CloudWatch Logs Insights 查询,并直接根据阈值评估聚合结果。

  • 指标筛选方法:针对日志组创建指标筛选条件,然后针对生成的指标创建标准指标警报。

创建日志警报

创建日志警报

您可以创建一个使用 CloudWatch Logs Insights 查询直接监控日志数据的 CloudWatch 警报。该查询使用计划查询按计划运行,警报会根据阈值评估聚合结果。有关日志警报的工作原理的更多信息,请参阅日志警报

先决条件

创建日志警报之前,您必须创建一个 IAM 角色来授予 CloudWatch Logs 执行计划查询的权限。如果还希望在 Amazon SNS 通知中包括日志行,则必须创建第二个角色。

注意

如果从 CloudWatch 控制台创建日志警报,则控制台会帮助您创建这些角色。

计划查询执行角色

计划查询执行角色允许 CloudWatch Logs 代表您运行查询。此角色是所有日志警报执行计划查询所必需的。该角色必须信任 logs.amazonaws.com 服务主体。

以下示例显示了计划查询执行角色的信任策略。

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

以下示例显示了权限策略。请将 Resource 的范围限定为查询所针对的日志组 ARN。

{ "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 的范围限定为查询所针对的日志组 ARN。

{ "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. 在导航窗格中,选择警报

  3. 选择创建警报

  4. 对于数据来源,选择日志

  5. 日志查询下:

    1. 选择在日志分析中创建查询。这将打开“日志分析”页面,可以在其中构建查询。

    2. 在“日志分析”页面上,编写查询。完成后,选择右上角的前往警报以返回警报控制台。

    3. 对于聚合表达式,指定如何聚合查询结果以返回用于警报评估的数值(例如 count(*)avg(latency) by endpoint)。

  6. 警报条件下:

    1. 对于每当聚合结果为...,选择一个比较运算符。

    2. 对于不止于...,输入阈值。

    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 要评估的最近查询执行次数(M-out-of-N 中的 N)。
--query-results-to-alarm 触发 ALARM 所需的违规结果数(M-out-of-N 中的 M)。
--treat-missing-data 如何处理缺失数据。有效值:missing(默认值)、notBreachingbreachingignore
--scheduled-query-configuration 查询配置,包括查询字符串、日志组标识符、计划查询角色 ARN、聚合表达式和计划配置。
--action-log-line-count Amazon SNS 电子邮件通知中包括的日志行数(0-50)。默认值为 0。
--action-log-line-role-arn 信任 cloudwatch.amazonaws.com 的 IAM 角色的 ARN。如果 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. 选择创建警报

  7. (可选)在 Metric(指标)下,编辑 Metric name(指标名称)、Statistic(统计数据)和 Period(周期)。

  8. 条件下面,指定以下内容:

    1. 对于 Threshold type(阈值类型),选择 Static(静态)或 Anomaly detection(异常检测)。

    2. 对于 Whenever your-metric-name is . . .(每当 your-metric-name . . .),选择 Greater(大于)、Greater/Equal(大于/等于)、Lower/Equal(小于/等于)或 Lower(小于)。

    3. 对于 than . . .(相比 . . .),为您的阈值指定一个数值。

  9. 选择其他配置

    1. 对于 Data points to alarm(触发告警的数据点数),指定多少数据点会触发您的告警进入 ALARM 状态。如果指定匹配的值,则如果多个连续评估期违例,该告警将变为 ALARM 状态。要创建 M-out-of-N(M(最大为 N))告警,为第一个值指定的数字应小于为第二个值指定的数字。有关更多信息,请参阅 警报评估

    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. 对于名称和描述,输入告警的名称和描述。名称必须仅包含 UTF-8 字符,并且不能包含 ASCII 控制字符。描述可以包含 Markdown 格式,该格式仅在 CloudWatch 控制台的警报详细信息选项卡中显示。Markdown 非常适合用于向运行手册或其他内部资源添加链接。

  15. 对于 Preview and create(预览并创建),确保您的配置正确,然后选择 Create alarm(创建警告)。