排查提醒政策的问题

本页面介绍为何某些提醒政策的行为方式与预期不同,并针对这些情况提供了可能的补救方法。

如需了解可能影响提醒政策的变量(例如选择重新测试时段),请参阅基于指标的提醒政策的行为

磁盘利用率政策产生意外突发事件

您创建了一个提醒政策,用于监控系统中磁盘的“已用”容量。此政策会监控指标 agent.googleapis.com/disk/percent_used。您预期仅在任何物理磁盘的利用率超过您在条件中设置的阈值时收到通知。但是,此政策会在每个物理磁盘的磁盘利用率低于阈值时创建突发事件。

这些政策的意外突发事件的已知原因是此类条件不限于监控物理磁盘。这些政策会改为监控所有磁盘,包括环回设备等虚拟磁盘。如果构建了一个虚拟磁盘,使其利用率达到 100%,则会导致创建政策的突发事件。

例如,请考虑 Linux df 命令的下列输出,其中显示系统所装载的文件系统上的磁盘空间:

$ df
/dev/root     9983232  2337708  7629140   24%  /
devtmpfs      2524080        0  2524080    0%  /dev
tmpfs         2528080        0  2528080    0%  /dev/shm
...
/dev/sda15     106858     3934   102924    4%  /boot/efi
/dev/loop0      56704    56704        0  100%  /snap/core18/1885
/dev/loop1     129536   129536        0  100%  /snap/google-cloud-sdk/150
...

对于此系统,应配置磁盘利用率提醒政策,以过滤掉环回设备 /dev/loop0/dev/loop1 的时序。例如,您可以添加过滤条件 device !=~ ^/dev/loop.*,排除 device 标签与正则表达式 ^/dev/loop.* 不匹配的所有时序。

异常突发事件的常见原因

您创建了一个提醒政策,该政策似乎过早创建或错误地创建了突发事件。

由于多种原因,您可能会收到看似不正确的事件通知:

  • 如果数据中存在缺口,尤其对于存在指标缺失或“小于”阈值条件的提醒政策,则可能创建看似异常的突发事件。有时,突发事件并未显示数据缺口,而有时数据缺口会自动纠正:

    • 例如,在图表中,由于缺失数据的值是内插的,因此可能不会出现缺口。即使缺少几分钟的数据,图表也会连接缺失的点,以获得视觉上的连续性。提醒政策中的此类缺口可能足以让提醒政策创建突发事件。

    • 基于日志的指标中的点可能会延迟,并且过去最长 10 分钟会进行回填。回填行为可以有效地纠正缺口;当数据最终到达时,会填补缺口。因此,基于日志的指标中不会再存在的缺口可能会导致提醒政策创建突发事件。

  • 指标缺失和“小于”阈值条件会实时评估,查询延迟时间很短。在评估条件到相应突发事件在 Monitoring 中可见这段时间内,条件的状态可能会发生变化。

  • 配置为针对单个测量创建突发事件的条件可能会导致看似过早或不正确的突发事件。为防止出现这种情况,请确保在发生突发事件之前需要进行多次测量,方法是将条件的重新测试期设置为指标采样率的两倍以上。

    例如,如果每 60 秒对某个指标进行一次采样,则将重新测试窗口设置为至少 3 分钟。如果将重新测试窗口设置为最新值(或等效于 0 秒),则单次测量可能会导致创建突发事件。

  • 修改提醒政策的条件时,更改可能需要几分钟才能在提醒政策基础架构中传播。在此期间,您可能会收到满足原来的提醒政策条件的突发事件通知。

  • 时间序列数据到达时,数据可能需要一分钟才能传播到整个提醒基础架构。在此过程中,即使时序数据尚未传播到时序图表,提醒政策也可能会评估条件是否满足。因此,即使图表未指示满足条件,您可能也会收到通知。为降低发生这种情况的可能性,请使用至少五分钟的校准时间段。

数据停止传入时,突发事件未关闭

您可以按照部分指标数据中的指导进行操作,并配置提醒政策,以便在数据停止送达时关闭突发事件。在某些情况下,数据会停止到达,但未结突发事件不会自动关闭。

如果提醒政策监控的底层资源包含 metadata.system_labels.state 标签,并且该政策不是使用 Monitoring Query Language 编写的,则 Monitoring 可以确定该资源的状态。如果已知资源的状态是已停用,Monitoring 不会在数据停止时自动关闭突发事件。不过,您可以手动关闭这些突发事件。

由于权限错误,导致无法查看突发事件详情

前往 Google Cloud 控制台中的“突发事件”页面,并选择要查看的突发事件。您应能打开详情页面。但是,详情页面无法打开,并显示“权限遭拒”的消息。

如需查看除指标数据以外的所有突发事件详细信息,请确保您拥有 Monitoring Cloud Console Incident Viewer (roles/monitoring.cloudConsoleIncidentViewer) 和 Stackdriver Accounts Viewer (roles/stackdriver.accounts.viewer) 的 Identity and Access Management (IAM) 角色。

如需查看所有突发事件详情(包括指标数据)并能够确认或关闭突发事件,请确保您具有 Monitoring Viewer (roles/monitoring.viewer) 和 Monitoring Cloud Console Incident Editor (roles/monitoring.cloudConsoleIncidentEditor) 的 IAM 角色。

自定义角色无法授予查看突发事件详情所需的权限。

满足条件时无法创建突发事件

您创建了一个包含 1 个条件的提醒政策。提醒政策的图表显示受监控的数据违反了条件,但您未收到通知,且未创建突发事件。

如果在满足提醒政策条件后满足以下任一条件,Monitoring 不会创建突发事件。

  • 提醒政策已延后
  • 提醒政策已停用。
  • 提醒政策已达到可以同时创建的突发事件数量上限
  • 提醒政策监控的资源状态已知已停用。当资源包含 metadata.system_labels.state 标签以及提醒政策不是使用 Monitoring Query Language 编写时,Monitoring 可以确定资源的状态。

突发事件详情列出了错误的项目

您会收到通知,并且条件摘要列出了创建突发事件的 Google Cloud 项目,即列出了限定范围的项目。但是,您希望突发事件列出 Google Cloud 项目的名称,该项目存储导致 Monitoring 创建突发事件的时序。

在提醒政策的条件中指定的汇总选项决定了通知中引用的 Google Cloud 项目:

  • 当汇总选项消除存储项目 ID 的标签后,突发事件信息会列出限定范围的项目。例如,如果您仅按区域对数据进行分组,则在分组后,存储项目 ID 的标签将被移除。

  • 如果汇总选项保留存储项目 ID 的标签,突发事件通知会包含存储导致突发事件的时序的 Google Cloud 项目的名称。如需保留项目 ID 标签,请在分组字段中添加 project_id 标签,或者不要对时序进行分组。

无法手动结束突发事件

您收到系统突发事件通知。转到突发事件详情页面,然后点击结束突发事件。突发事件应能结束;但是您收到以下错误消息:

Unable to close incident with active conditions.

只有在最近的提醒期内没有收到任何观察结果时,您才能结束突发事件。提醒期(通常默认为 5 分钟)作为提醒政策条件的一部分进行定义,并且可以对其进行配置。上一条错误消息表明在提醒期内收到数据。

如果突发事件因内部错误而无法关闭,则会发生以下错误:

Unable to close incident. Please try again in a few minutes.

当您看到上一条错误消息时,可以重试关闭操作,或者让 Monitoring 自动关闭突发事件。

如需了解详情,请参阅管理突发事件

多条件政策创建多个通知

您创建了一个包含多个条件的提醒政策,并使用逻辑 AND 连接这些条件。您希望在满足所有条件时收到一条通知并创建一个突发事件。但您会收到多个通知,还会发现存在多个突发事件。

Monitoring 会发送通知,并为每个导致满足条件的时序创建突发事件。因此,如果您的提醒政策包含多个条件,您可能会收到每个时序都收到的一个通知和事件,这些时序导致满足联接的条件。

例如,您的提醒政策包含两个条件,其中每个条件监控 3 个时序。仅当同时满足这两个条件时,政策才会发送通知。当满足政策的条件时,您可能会收到 2 个(每个条件都满足一个时序)到 6 个(每个条件中的所有时序都满足)通知和事件。

您无法将 Monitoring 配置为创建一个突发事件并发送单个通知。

如需了解详情,请参阅每次事件的通知数

指标标签的变量为 null

您将创建提醒政策,并将指标标签的变量添加到文档部分。您预期通知会显示该变量的值;不过,该值设置为 null

如需解决此问题,请尝试以下操作:

  • 确保提醒政策的汇总设置保留您要显示的标签。

    例如,假设您创建了一项提醒政策,用于监控虚拟机实例写入的磁盘字节数。您希望文档列出引发通知的设备,因此请在文档字段中添加以下内容:device: ${metric.label.device}

    您还必须确保汇总设置保留 device 标签的值。您可以通过将聚合函数设置为 none 或确保分组选择包含 device 来保留此标签。

  • 验证变量的语法和适用性。如需了解语法信息,请参阅使用用户定义的文档为通知添加注释

    例如,只有基于日志的提醒政策支持变量 log.extracted_label.KEY。当提醒政策监控某个指标(甚至是基于日志的指标)时,此变量始终呈现为 null

更改指标定义后不再有新数据

您可以更改用户定义的指标的定义,例如,通过修改在基于日志的指标中使用的过滤条件,但提醒政策不会反映您对指标定义所做的更改。

要解决此问题,请修改提醒政策的显示名,以强制更新提醒政策。