根据日志触发警报
您可以通过两种方式创建 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 创建日志警报。
创建日志警报
-
通过 https://console.aws.amazon.com/cloudwatch/
打开 CloudWatch 控制台。 -
在导航窗格中,选择警报。
-
选择创建警报。
-
对于数据来源,选择日志。
-
在日志查询下:
-
选择在日志分析中创建查询。这将打开“日志分析”页面,可以在其中构建查询。
-
在“日志分析”页面上,编写查询。完成后,选择右上角的前往警报以返回警报控制台。
-
对于聚合表达式,指定如何聚合查询结果以返回用于警报评估的数值(例如
count(*)或avg(latency) by endpoint)。
-
-
在警报条件下:
-
对于每当聚合结果为...,选择一个比较运算符。
-
对于不止于...,输入阈值。
-
(可选)在其他配置下:
-
修改要报警的数据点,以指定触发最后 N 个查询的
ALARM所需的违规结果数。 -
修改缺失数据处理,以指定如何处理缺失数据。
-
-
-
在计划下:
-
对于评估频率,选择查询运行的频率(例如每 5 分钟一次)。
-
对于起始时间偏移,是每次查询执行的回溯窗口。
-
对于结束时间偏移(可选),查询时间范围的结束与当前时间的偏移量(以秒为单位)。
-
-
在 IAM 权限下:
-
指定执行计划查询所需的角色。可以选择创建新角色,也可以使用现有角色。
-
-
选择下一步。
-
在配置操作下,根据需要配置操作和通知。
-
要在 Amazon SNS 电子邮件通知中包括触发警报转换的日志行,请在在操作中包括查询结果下:
-
添加查询结果的数量以指定要包括的日志行数。
-
创建或选择用于获取所需的查询结果的现有角色。
-
-
-
选择下一步。
-
输入名称和可选描述(支持 Markdown)。
-
(可选)添加标签。
-
选择下一步。
-
在预览和创建下,查看您的配置,然后选择创建警报。
使用 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 命令的关键参数。
| 参数 | 必需 | 描述 |
|---|---|---|
--alarm-name |
是 | 警报的名称。必须仅包含 UTF-8 字符。 |
--comparison-operator |
是 | 用于阈值评估的比较运算符。有效值:GreaterThanThreshold、GreaterThanOrEqualToThreshold、LessThanThreshold、LessThanOrEqualToThreshold。 |
--threshold |
是 | 要比较的数值阈值。 |
--query-results-to-evaluate |
是 | 要评估的最近查询执行次数(M-out-of-N 中的 N)。 |
--query-results-to-alarm |
是 | 触发 ALARM 所需的违规结果数(M-out-of-N 中的 M)。 |
--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 |
否 | 信任 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 用户指南》中的 使用筛选条件从日志事件创建指标。在根据日志组指标筛选器创建告警之前,您必须完成以下操作:
-
创建日志组。有关更多信息,请参阅《Amazon CloudWatch Logs 用户指南》中的 使用日志组和日志流。
-
创建指标筛选条件。有关更多信息,请参阅《Amazon CloudWatch Logs 用户指南》中的 为日志组创建指标筛选条件。
要根据日志组指标筛选条件创建告警
-
通过 https://console.aws.amazon.com/cloudwatch/
打开 CloudWatch 控制台。 -
从左侧导航窗格中,选择 Logs(日志),然后选择 Log groups(日志组)。
-
选择包含您的指标筛选器的日志组。
-
选择 Metric filters(指标筛选条件)。
-
在指标筛选器选项卡中,选中要用于创建告警的指标筛选器对应的复选框。
-
选择创建警报。
-
(可选)在 Metric(指标)下,编辑 Metric name(指标名称)、Statistic(统计数据)和 Period(周期)。
-
在条件下面,指定以下内容:
-
对于 Threshold type(阈值类型),选择 Static(静态)或 Anomaly detection(异常检测)。
-
对于 Whenever
your-metric-nameis . . .(每当 your-metric-name . . .),选择 Greater(大于)、Greater/Equal(大于/等于)、Lower/Equal(小于/等于)或 Lower(小于)。 -
对于 than . . .(相比 . . .),为您的阈值指定一个数值。
-
-
选择其他配置。
-
对于 Data points to alarm(触发告警的数据点数),指定多少数据点会触发您的告警进入
ALARM状态。如果指定匹配的值,则如果多个连续评估期违例,该告警将变为ALARM状态。要创建 M-out-of-N(M(最大为 N))告警,为第一个值指定的数字应小于为第二个值指定的数字。有关更多信息,请参阅 警报评估。 -
对于 Missing data treatment(缺失数据处理),选择一个选项以指定在评估告警时如何应对缺失数据。
-
-
选择下一步。
-
对于 Notification(通知),选择当您的告警处于
ALARM、OK或INSUFFICIENT_DATA状态时要通知的 Amazon SNS 主题。-
(可选)要为相同告警状态或不同告警状态发送多个通知,请选择 Add notification(添加通知)。
-
(可选)要想不发送通知,请选择 Remove(删除)。
-
-
要让警报执行 Auto Scaling、EC2、Lambda 或 Systems Manager 操作,请选择相应的按钮,然后选择警报状态和要执行的操作。如果您选择 Lambda 函数作为警报操作,则需要指定函数名称或 ARN,并且可以选择该函数的特定版本。
警报只有在进入“ALARM(警报)”状态时才能执行 Systems Manager 操作。有关 Systems Manager 操作的更多信息,请参阅将 CloudWatch 配置为通过警报创建 OpsItems 和事件创建。
注意
要创建执行 SSM Incident Manager 操作的警报,您必须具有特定的权限。有关更多信息,请参阅 AWS Systems Manager Incident Manager 的基于身份的策略示例。
-
选择下一步。
-
对于名称和描述,输入告警的名称和描述。名称必须仅包含 UTF-8 字符,并且不能包含 ASCII 控制字符。描述可以包含 Markdown 格式,该格式仅在 CloudWatch 控制台的警报详细信息选项卡中显示。Markdown 非常适合用于向运行手册或其他内部资源添加链接。
-
对于 Preview and create(预览并创建),确保您的配置正确,然后选择 Create alarm(创建警告)。