本文档介绍了如何创建提醒政策以监控您在 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
列。接下来,您可以创建一个条件,将类型设置为布尔值,并将条件配置为监控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 所需的权限,请让您的管理员为您授予日志存储桶或日志视图的以下 IAM 角色:
-
查询
_Required
和_Default
日志存储桶:Logs Viewer (roles/logging.viewer
) -
查询项目中的所有日志视图:Logs View Accessor (
roles/logging.viewAccessor
) -
如需查询特定日志视图中的日志,请执行以下操作:
为日志视图创建 IAM 政策,或限制 Logs View Accessor (
roles/logging.viewAccessor
) 角色只能访问特定日志视图。如需了解详情,请参阅控制对日志视图的访问权限。
-
查询
- 对于您要查询的日志视图,请前往日志存储页面,并验证存储这些日志视图的日志存储桶是否已升级为使用 Log Analytics。如有必要,请升级日志存储桶。
- 如需在预留的 BigQuery 槽上运行查询,请执行以下操作:
- 如果您要查询的日志存储桶没有关联的数据集,请为其创建关联的数据集。
- 配置预留 BigQuery 槽,并将其分配给 Google Cloud 项目。
-
如需获得创建和管理基于 SQL 的提醒政策所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
针对项目的 Monitoring Editor (
roles/monitoring.editor
) -
针对项目的Logging SqlAlertWriter (
roles/logging.sqlAlertWriter
) -
针对项目的 BigQuery Job User (
roles/bigquery.jobUser
) -
针对关联数据集的 BigQuery Data Viewer (
roles/bigquery.dataViewer
)
如需了解如何授予对数据集的访问权限,请参阅授予对数据集的访问权限。
-
针对项目的 Monitoring Editor (
确保Monitoring服务账号存在,并且具有以下角色:
- 针对项目的 Monitoring Service Agent (
roles/monitoring.notificationServiceAgent
) 。 - 针对关联的数据集的 BigQuery Data Viewer (
roles/bigquery.dataViewer
)。
如果Monitoring服务账号不存在,请参阅问题排查:没有Monitoring服务账号。
- 针对项目的 Monitoring Service Agent (
- 配置您要用于接收任何突发事件通知的通知渠道。为实现冗余,我们建议您创建多种类型的通知渠道。如需了解详情,请参阅创建和管理通知渠道。
在 Google Cloud 控制台中,前往日志存储页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
创建基于 SQL 的提醒政策
如需创建基于 SQL 的提醒政策,请执行以下操作:
Google Cloud 控制台
-
在 Google Cloud 控制台中,前往 Log Analytics 页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
在 Log Analytics 页面上的查询编辑器中,输入日志视图的 SQL 查询。
如需详细了解如何为日志视图编写 SQL 查询,请参阅查询日志视图。
在工具栏上,点击在 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 查询的执行会延迟 5 分钟,以便 Cloud Logging 有时间将回溯期内收到的日志条目编入索引。例如,如果提醒政策使用的是结束时间为下午 2:00 的回溯期,则 SQL 查询会在下午 2:05 之后才执行。
- 每个基于 SQL 的提醒政策可以有一个提醒条件。
- 基于 SQL 的提醒政策发出的查询在执行时间超过五分钟时会失败。发生失败时,系统会记录错误。
- 基于 SQL 的提醒政策无法查询分析视图。
如需查看与提醒政策相关的限制的完整列表,请参阅Monitoring限制。
价格
如需了解价格信息,请参阅以下文档:
- BigQuery 价格
- Google Cloud Observability价格文档中的 Cloud Logging
- Google Cloud Observability价格文档中的 Cloud Monitoring
后续步骤
如需了解如何根据 Log Analytics 数据创建图表,请参阅使用 Log Analytics 绘制查询结果图表。
如需了解如何管理这些提醒政策的突发事件,请参阅基于 SQL 的提醒政策的突发事件。