本文档介绍了如何创建提醒政策,以监控您在 Log Analytics 中运行的查询的结果。这些查询以 SQL 编写,并且必须查询日志视图。当查询结果满足您指定的条件时,提醒政策会通知您。例如,您可以配置提醒政策,以便在特定时间段内至少 25% 的日志条目的严重程度为 ERROR 时收到通知。
您从 Log Analytics 页面创建的提醒政策在 BigQuery 引擎上运行。因此,所查询的数据必须可通过关联的 BigQuery 数据集进行访问。因此,这些 SQL 查询只能查询日志视图。他们无法查询分析视图。
如需大致了解 Log Analytics,请参阅使用 Log Analytics 查询和分析日志。
提醒政策的工作原理
提醒政策描述了您希望在哪些情况下收到提醒,以及通过什么方式获得有关突发事件的通知。您可以使用以下三种不同的方法,在日志数据中出现内容或模式时收到通知:
如需扫描单个日志条目以查找特定短语,请创建基于日志的提醒政策。如果您希望在发生与安全相关的事件时收到通知,请使用这些提醒政策。
如需监控日志条目数据中的事件,您可以创建基于日志的指标,然后创建提醒政策来监控该指标。如果您想监控日志条目数据随时间变化的趋势,这些类型的提醒政策会非常有效。不过,如果您预计只有少量事件,那么这种方法的效果就不太理想。
如需监控日志条目数据的汇总分析,请将Log Analytics与提醒政策结合使用。在此场景中,您可以将日志存储桶升级为使用 Log Analytics,并为该日志存储桶创建关联的 BigQuery 数据集。接下来,您可以使用支持 SQL 查询的 Log Analytics 查询日志存储桶中的日志视图。最后,您创建提醒政策来监控 SQL 查询结果。这种类型的提醒政策称为基于 SQL 的提醒政策。
基于 SQL 的提醒政策最适合评估多个日志条目的确切值。如果您想评估单个日志条目,请创建基于日志的提醒政策。
本文档的其余部分将介绍如何使用基于 SQL 的提醒政策。
提醒政策组成部分
基于 SQL 的提醒政策包含条件和时间表:
条件包含查询(一个查询日志视图的 SQL 查询)。该条件还定义了在查询结果导致 Monitoring 创建突发事件的情况下的情形。
时间安排定义了提醒政策运行查询的频率。 该时间表还定义了回溯期的大小,这是一个过滤条件,仅选择自上次评估查询以来收到的日志条目。例如,如果您将时间表设置为 60 分钟,则系统会每 60 分钟运行一次查询,并使用回溯期选择最近 60 分钟的日志条目。
提醒政策还包含通知渠道列表。当满足提醒政策的条件时,Cloud Monitoring 会创建突发事件,然后通过这些渠道发送有关该突发事件的通知。 突发事件是指导致满足条件的数据的记录以及其他相关信息。此信息可帮助您排查导致突发事件的问题。 您可以使用 Google Cloud 控制台查看突发事件。
基于 SQL 的提醒政策的评估类型
用于监控 SQL 查询结果的条件支持两种类型的评估:
行数阈值:当查询结果中的行数大于、等于或小于某个阈值时,即满足条件。
例如,假设您希望在回溯窗口中超过 50 条日志条目的严重程度大于 200 时收到通知。您创建了一个查询,用于报告严重程度大于 200 的日志条目。然后,您配置一个条件,选择行数阈值,并将阈值设置为 50。
布尔值:当查询结果表中的特定布尔值列包含任何值为
true的行时,即满足条件。例如,假设您希望在回溯窗口中超过 25% 的日志条目的严重程度为
ERROR时收到通知。您创建了一个查询,用于计算严重级别为ERROR的日志条目的百分比。当该百分比超过 25% 时,查询结果会将true写入notify列。接下来,您创建一个条件,将类型设置为 Boolean,然后配置该条件以监控notify列。
监控 SQL 查询结果的提醒政策只能有一个条件。
提醒政策和 BigQuery
当提醒政策运行 SQL 查询时,该查询会使用定义提醒政策的 Google Cloud 项目中的预留 BigQuery 槽来运行。如需了解详情,请参阅使用槽预留。
如需让提醒政策使用预留的 BigQuery 槽来查询日志视图,必须将托管日志视图的日志存储桶配置为具有关联的 BigQuery 数据集。通过关联的数据集,BigQuery 可以读取日志存储桶中的数据,并且您可以对 SQL 查询返回的数据执行 BigQuery 函数。
已评估的日志条目
如需让提醒政策的 SQL 查询评估日志条目,必须同时满足以下两个条件:
- 日志条目的接收时间戳(记录 Cloud Logging 接收日志条目的时间)必须在提醒政策的回溯期内。
- 日志条目的时间戳(记录日志条目生成的时间)必须在回溯期的 15 分钟内。
例如,基于 SQL 的提醒政策的回溯期为 60 分钟。Log Analytics会在下午 1 点 30 分运行提醒政策的 SQL 查询。若要将日志条目纳入查询范围,该条目必须同时满足以下两个条件:
- 收到的时间戳必须介于中午 12:30 到下午 1:30 之间。
- 时间戳必须介于中午 12:15 到下午 1:45 之间。
当您从 Log Analytics 界面运行查询时,系统会根据日志条目的时间戳评估所选时间范围内的所有日志条目。
回溯期和突发事件传播时间
当提醒政策被安排评估其条件时,Log Analytics 会将 SQL 查询的执行延迟 5 分钟,以便 Cloud Logging 有时间将回溯期内收到的日志条目编入索引。例如,如果提醒政策使用的是结束时间为下午 2:00 的回溯期,则 Log Analytics 在下午 2:05 之前不会执行 SQL 查询。
如果在执行查询后满足提醒条件,则突发事件可能需要额外两分钟才能在系统中传播。
查询失败
基于 SQL 的提醒政策所发出的查询可能会因各种原因而失败,包括:
Monitoring 服务账号已不存在或不再具有读取所查询日志数据的必要权限。
查询执行时间超过五分钟。
发生内部错误。
失败的查询会生成一个日志条目,其中包含提醒政策 ID 和错误状态。您可以使用基于日志的提醒政策,在记录错误时创建提醒。
准备工作
本部分假定您已升级日志存储桶以使用 Log Analytics,并且可以使用 Log Analytics 页面查询和查看日志数据。该部分还假定您已为日志存储桶创建关联的 BigQuery 数据集。
在创建基于 SQL 的提醒政策之前,请完成以下步骤:
-
如需获得创建和管理基于 SQL 的提醒政策所需的权限,请让管理员向您授予以下 IAM 角色:
-
针对项目的 Monitoring Editor (
roles/monitoring.editor) -
针对项目的 Logging SqlAlertWriter (
roles/logging.sqlAlertWriter)
-
针对项目的 Monitoring Editor (
验证监控服务账号是否存在,并且具有以下角色:
- 针对项目的 Monitoring Service Agent (
roles/monitoring.notificationServiceAgent) 。 - 针对关联的数据集的 BigQuery Data Viewer (
roles/bigquery.dataViewer)。
如果Monitoring服务账号不存在,请参阅问题排查:没有Monitoring服务账号。
- 针对项目的 Monitoring Service Agent (
- 如需让基于 SQL 的提醒政策在预留的 BigQuery 槽上运行,请执行以下操作:
- 配置您要用于接收任何突发事件通知的通知渠道。为实现冗余,我们建议您创建多种类型的通知渠道。如需了解详情,请参阅创建和管理通知渠道。
创建基于 SQL 的提醒政策
如需创建基于 SQL 的提醒政策,请执行以下操作:
Google Cloud 控制台
-
在 Google Cloud 控制台中,前往 Log Analytics 页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
在 Log Analytics 页面的查询编辑器中,输入日志视图的 SQL 查询。
如需详细了解如何为日志视图编写 SQL 查询,请参阅查询日志视图。
在工具栏中,点击 Run on BigQuery。
Log Analytics 会在 BigQuery 引擎上运行查询,并在结果表中显示结果。
如果未显示在 BigQuery 上运行,请点击 settings 选择查询引擎,然后点击 BigQuery。运行查询按钮会变为 在 BigQuery 上运行。
在 Log Analytics 页面的结果表格中,点击 add_alert 创建提醒。
Log Analytics 页面会显示创建 SQL 提醒政策窗口,其中SQL 查询部分下方会显示您的查询。
在提醒条件部分,配置提醒政策的条件和时间安排。
配置提醒政策的提醒详情。
查看提醒政策,然后点击保存以创建该政策。
Cloud Monitoring API
您可以使用 alertPolicies.create 方法以编程方式创建提醒政策。提醒政策的 Condition 类型必须为 conditionSql,即 SqlCondition 的实例。
此条件类型允许使用 SQL 定义提醒政策的条件。
如需定义时间表,请为 minutes、hours 或 days 字段设置 periodicity 值。例如,如果您希望查询每 12 小时运行一次,请将 hours 字段的周期性设置为 12。
如需定义条件,请使用以下字段:
boolean_test:配置提醒政策,使其在查询结果表的布尔值列中的某一行包含 true 值时满足条件。row_count_test:配置提醒政策,以便当查询结果表中的行数达到特定阈值时,满足相应条件。
如需查看字段和定义的完整列表,请参阅 Cloud Monitoring API 文档中的 SqlCondition。
如需详细了解用于提醒政策的 Monitoring API,请参阅使用 API 管理提醒政策。
Terraform
为您的项目安装和配置 Terraform。对于 App Hub 配置,请选择 App Hub 宿主项目或管理项目。
在 Cloud Shell 中,前往包含 Terraform 配置的目录。
在 Terraform 配置中,配置 google_monitoring_alert_policy 资源的实例,包括 condition_sql。
在 Cloud Shell 中,输入
terraform apply。
如需修改提醒政策,请进行修改,然后重新应用 Terraform 配置。如需了解详情,请参阅使用 Terraform 管理提醒政策。
如需了解有关将 Google Cloud 与 Terraform 搭配使用的一般信息,请参阅将 Terraform 与 Google Cloud搭配使用。
限制
每个基于 SQL 的提醒政策只能有一个条件。
基于 SQL 的提醒政策无法查询分析视图。
如果基于 SQL 的提醒政策所发出的查询的执行时间超过 5 分钟,则查询会失败。
在预定查询到创建突发事件之间,最多有 7 分钟的延迟,加上查询执行时间。
如需查看与提醒政策相关的限制的完整列表,请参阅Monitoring限制。
价格
如需了解价格信息,请参阅以下文档:
- BigQuery 价格
- Google Cloud Observability 价格页面的 Cloud Logging 和 Cloud Monitoring 部分。
后续步骤
如需了解如何根据 Log Analytics 数据创建图表,请参阅使用 Log Analytics 将查询结果绘制成图表。
如需了解如何管理这些提醒政策的突发事件,请参阅基于 SQL 的提醒政策的突发事件。