本页面介绍了您可能未能按预期收到通知的原因,并针对这些情况提供了可能的补救方法。
未收到通知
您可以配置通知渠道,并希望在发生突发事件时收到通知。但是,您不会收到任何通知。
如需收集有关失败原因的信息,请执行以下操作:
-
在 Google Cloud 控制台中,转到 Logs Explorer 页面。
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 选择相应的 Google Cloud 项目。
查询日志以查找通知渠道事件:
- 展开日志名称菜单,然后选择 notification_channel_events。
- 展开严重级别菜单,然后选择错误。
- 可选:如需选择自定义时间范围,请使用时间范围选择器。
- 点击运行查询。
上述步骤会创建以下查询:
resource.type:"stackdriver_notification_channel" logName="projects/PROJECT_ID/logs/monitoring.googleapis.com%2Fnotification_channel_events" severity=ERROR
摘要行和
jsonPayload
字段通常包含失败信息。例如,发生网关错误时,摘要行会包含“failed with 502 Bad Gateway”(失败,错误代码为 502 Bad Gateway)。
未收到网络钩子通知
您可以配置网络钩子通知渠道,并希望在发生突发事件时收到通知。但是,您不会收到任何通知。
专用端点
除非端点处于公开状态,否则您不能将网络钩子用于通知。
如需解决此问题,请参阅 Pub/Sub 通知以及针对该通知主题的拉取订阅。
配置 Pub/Sub 通知渠道时,突发事件通知将发送到具有 Identity and Access Management 控制的 Pub/Sub 队列。任何可以查询或监听 Pub/Sub 主题的服务都可以使用这些通知。例如,在 App Engine、Cloud Run 或 Compute Engine 虚拟机上运行的应用可以使用这些通知。
如果您使用拉取订阅,系统会向 Google 发送请求,等待消息到达。这些订阅需要访问 Google,但不需要防火墙或入站访问规则。
公共端点
如需确定传送失败的原因,请检查您的 Cloud Logging 日志条目以获取失败信息。
例如,您可以使用日志浏览器搜索通知渠道资源的日志条目,过滤条件如下所示:
resource.type="stackdriver_notification_channel"
未收到 Pub/Sub 通知
您配置了 Pub/Sub 通知渠道,但未收到任何通知。
如需改善此情况,请尝试执行以下操作:
确保通知服务账号存在。服务账号被删除后,系统不会发送通知。
如需验证服务账号是否存在,请执行以下操作:
-
在 Google Cloud 控制台中,进入 IAM 页面:
如果您使用搜索栏查找此页面,请选择子标题为 IAM 和管理的结果。
搜索具有以下命名惯例的服务账号:
service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
如果此服务账号未列出,请选择包括 Google 提供的角色授权。
如果通知服务账号不存在,您必须开始为 Monitoring 创建 Pub/Sub 通知渠道,以便创建服务账号:
-
确保通知服务账号有权针对感兴趣的 Pub/Sub 主题发送通知。
如需查看服务账号的权限,您可以使用 Google Cloud 控制台或 Google Cloud CLI 命令:
- Google Cloud 控制台中的 IAM 页面列出了每个服务账号的角色。
- Google Cloud 控制台中的 Pub/Sub 主题页面列出了每个主题。选择主题时,权限标签页列出了授予服务账号的角色。
如需列出所有服务账号及其角色,请运行以下 Google Cloud CLI 命令:
gcloud projects get-iam-policy PROJECT_ID
以下是此命令的部分响应:
serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com role: roles/monitoring.notificationServiceAgent - members: [...] role: roles/owner - members: - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com role: roles/pubsub.publisher
命令响应仅包含角色,不包括按主题进行授权。
如需列出特定主题的 IAM 绑定,请运行以下命令:
gcloud pubsub topics get-iam-policy TOPIC
以下是此命令的示例响应:
bindings: - members: - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwXPRb5WDPI= version: 1
如需了解如何为通知服务账号授权,请参阅为服务账号授权。
未收到正常运行时间检查提醒政策的通知
您希望在虚拟机 (VM) 重新启动或关停时收到通知,因此您要创建监控指标 compute.googleapis.com/instance/uptime
的提醒政策。您可以创建并配置条件,以便在没有指标数据时生成突发事件。您不能使用 Monitoring Query Language (MQL)1 定义该条件。当虚拟机 (VM) 重新启动或关停时,系统不会通知您。
此提醒政策仅监控处于 RUNNING
状态的 Compute Engine 虚拟机实例的时间序列。对于任何其他状态(例如 STOPPED
或 DELETED
)的虚拟机,系统会在评估条件之前过滤掉其时序。鉴于此行为,您不能使用带有指标缺失提醒条件的提醒政策来确定虚拟机实例是否正在运行。如需了解虚拟机实例状态,请参阅虚拟机实例生命周期。
如需解决此问题,请创建提醒政策以监控拨测。对于专用端点,请使用非公开拨测。
针对拨测发出提醒的替代方案是使用用于监控数据缺失情况的提醒政策。我们强烈建议您针对正常运行时间检查发出提醒,而不是针对数据缺失发出提醒:如果监控数据的可用性存在暂时性问题,基于指标缺失的提醒政策可能会产生误报。
不过,如果无法使用拨测,您可以使用 MQL 创建提醒政策,以便在虚拟机关停时收到通知。MQL 定义的条件不会根据虚拟机实例的状态预先过滤时间序列数据。由于 MQL 不会按虚拟机状态过滤数据,因此您可以使用它来检测已关停的虚拟机的数据缺失。
请考虑监控 compute.googleapis.com/instance/cpu/utilization
指标的以下 MQL 条件:
fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
|absent_for 3m
如果此条件监控的虚拟机关闭,三分钟后,将生成一个突发事件并发送通知。absent_for
值必须至少为三分钟。
如需详细了解 MQL,请参阅使用 MQL 的提醒政策。
1:MQL 是一种富有表现力的文本型语言,它可以与 Cloud Monitoring API 调用搭配使用,也可以在 Google Cloud 控制台中使用。如需在使用 Google Cloud 控制台时通过 MQL 配置条件,则必须使用代码编辑器。
未收到针对请求数提醒政策的通知
您想要监控已完成请求的数量。您创建了一个用于监控指标 serviceruntime.googleapis.com/api/request_count
的提醒政策,但在请求数量超出您配置的阈值时,您并未收到通知。
请求数指标的最大对齐周期为 7 小时 30 分钟。
如需解决此问题,请检查提醒政策中对齐周期的值。如果该值超过此指标的最大值,请缩短对齐周期,使其不超过 7 小时 30 分钟。