使用 MQL 的提醒政策

您可以创建条件包含 Monitoring Query Language (MQL) 查询的 Monitoring 提醒政策。针对提醒政策条件的 MQL 查询与其他 MQL 查询类似,只不过它们还包含 MQL 提醒操作。如果您在条件中使用 MQL,则该条件必须是政策中的唯一条件。

本页面介绍了 MQL 提醒操作,并介绍了如何创建使用这些操作的提醒政策。如需了解有关 Monitoring 提醒政策的一般信息,请参阅基于指标的提醒政策的行为

开始使用

所有 MQL 查询都从以下组成部分开始:

  • fetch 操作,用于从 Cloud Monitoring 检索时序。
  • 一个参数,由受监控的资源和指标类型组成,用于标识要提取的时序。

例如,以下查询会检索 Compute Engine 实例针对指标类型 compute.googleapis.com/instance/cpu/utilization 写入的时序,该指标类型记录这些实例的 CPU 利用率:

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization

fetch 命令的参数由受监控的资源类型 gce_instance、一对冒号字符 :: 和指标类型 compute.googleapis.com/instance/cpu/utilization 组成。

如需在设有基于 MQL 的条件的提醒政策中使用您的查询,您的查询必须以一项操作结尾,其中定义了 Cloud Monitoring 会根据哪些参数触发提醒。根据您是构建指标阈值提醒政策还是指标缺失提醒政策,操作会有所不同。

针对指标阈值提醒政策的 MQL 查询

指标阈值 MQL 查询需要执行 condition 操作,该操作会在查询执行时间内的每个时间点评估布尔表达式。如果对于该考量时长内的所有点,该表达式的求值结果均为 true,则 Cloud Monitoring 会触发提醒。

例如,以下查询会评估 Compute Engine 虚拟机实例,并会在过去 24 小时内向磁盘写入的数据量超过 5 GB 时触发提醒:

fetch gce_instance :: compute.googleapis.com/instance/disk/write_bytes_count
| group_by 24h, .sum
| every 30s
| condition val() > 5'GBy'

您可以使用复杂的条件来评估特定范围的数据。例如,如果过去 24 小时内的虚拟机实例写入的数据超过 5 GB、少于 6 GB,或数据量超过 8 GB,则以下条件会触发提醒:

fetch gce_instance :: compute.googleapis.com/instance/disk/write_bytes_count
| group_by 24h, .sum
| every 30s
| condition (val() > 5'GBy' && val() < 6'GBy') || val() > 8'GBy'

以下示例使用 filter、滑动 group_by 运算和复杂条件来评估校准输入表中的每个数据点,并确定利用率值是否超过阈值 15%:

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
| filter zone =~ 'us-central.*'
| group_by sliding(5m), mean(val())
| every 30s
| condition val() > .15 '10^2.%'

在上述查询中,由 condition 运算符生成的表有两个值列,一个记录阈值评估结果的布尔值列,另一个包含输入表中 utilization 值列的副本。由于默认的 group_by 窗口设置为滑动,因此 group_by 表达式与 group_by 5m, mean(val()) 相同。

CPU 利用率值存储为分数利用率;值的范围为 0.0 到 1.0。指标描述符将这些值的单位指定为 10^2.%,它们在图表中以百分比的形式显示。阈值的单位必须兼容,因此我们将阈值表示为 .15 '10^2.%

针对指标缺失提醒政策的 MQL 查询

指标缺失 MQL 查询使用 absent_for 操作,该操作获取必须缺失数据的时长。例如,以下查询会测试美国中央区域的数据是否缺失了 8 小时:

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
| filter zone =~ 'us-central.*'
| every 30s
| absent_for 8h

absent_for 运算仅采用一个时长参数,该参数表示数据必须缺失多长时间才能满足条件。

如果数据在最近 24 小时内出现,但持续时间未超过该时长(在本例中为最近 8 小时),则此示例视为缺失数据。

absent_for 查询使用默认对齐或使用 absent_for 运算后接 every 运算来创建具有校准值的输出表。

输出表有两列。

  • 第一列是 active 列,用于记录数据缺失的布尔值结果。true 值表示过去 24 小时内存在输入点,但在该时段内没有输入点。

  • 第二列是 signal 列。如果输入表包含值列,则 signal 列包含最近输入点的第一个值列中的值。如果输入表不含值列,则 signal 列包含自记录最后一个输入点以来的分钟数。您可以强制执行此操作,如以下示例所示:

    fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
    | filter zone =~ 'us-central.*'
    | value []
    | every 30s
    | absent_for 8h
    

    在前面的示例中,value [] 运算会从其输入表中移除值列,因此由 absent_for 运算创建的表中的 signal 列包含自记录最后一个输入点以来的分钟数。

提醒政策配置

除了 MQL 查询之外,提醒政策条件还包括两个其他值:

  • 必须满足条件的输入时序数量。此值可以是以下任一值:
    • 一个时序。
    • 特定的时序数量。
    • 时序百分比。
    • 所有时序。
  • 提醒状态的时长,即提醒条件必须持续评估为 true 的时长。

如果查询在特定时序的指定期限内持续求值为 true,则该时序被视为活跃。当指定数量的时序处于活跃状态时,会触发提醒政策,并为每个活跃的时间序列生成提醒。如需详细了解如何评估提醒政策,请参阅基于指标的提醒政策的行为

当时时序数据停止到达或数据延迟时,Monitoring 会将数据归类为缺失。如需了解如何配置 Monitoring 以在数据停止到达时评估指标阈值条件,请参阅部分指标数据

如果在某个条件中使用 MQL,则该条件必须是政策中的唯一条件。您无法在基于 MQL 的提醒政策中使用多个条件。

指南

借助 MQL,您可以创建用户定义的标签并将其附加到突发事件。如需查看示例,请参阅向提醒政策添加严重级别

指标类型的单位列在指标类型的相关表中;对于指标类型 compute.googleapis.com/instance/cpu/utilization,请参阅 compute 表。

后续步骤

如需了解如何使用 Google Cloud 控制台和 Cloud Monitoring API 根据基于 MQL 的条件创建提醒政策,请参阅创建 MQL 提醒

如需查看有关使用基于 MQL 的条件配置有效提醒政策的指南和建议,请参阅 MQL 提醒最佳做法

如需了解如何排查使用基于 MQL 的条件的提醒政策的常见问题,请参阅排查 MQL 提醒问题

如需查看采用基于 MQL 的条件的提醒政策示例,请参阅 MQL 提醒的用例