You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Stackdriver JSON告警消息键定义及监控资源GCP项目ID提取咨询

关于Stackdriver Webhook告警至Alerta的JSON键定义及GCP项目ID提取方案

我来帮你梳理这两个问题,结合你提供的完整告警示例详细说明:

一、Stackdriver告警JSON各核心键的定义

以下是你提供的告警示例中关键字段的含义:

顶层属性

  • attributes: 告警的元数据集合,包含:
    • incidentId: Stackdriver生成的唯一事件ID,用于关联控制台中的事件
    • moreInfo: 指向Stackdriver控制台事件页面的链接,方便直接查看详情
    • runBookUrl: 自定义的运行手册链接,用于指导告警处理流程
  • createTime: Alerta接收并创建告警的时间戳
  • environment: 告警所属的环境(如示例中的Production)
  • event: 告警事件的名称,通常对应Stackdriver的规则名称
  • resource: 告警关联的资源名称,和rawData.incident.resource_name一致
  • service: 关联的服务或策略名称(如示例中的ez-policy)
  • severity: 当前告警的级别(如critical、ok)
  • text: 告警的详细描述文本,包含阈值、当前值等关键信息

rawData.incident(原始Stackdriver事件数据)

这部分是Stackdriver通过Webhook发送的原始事件内容,是最核心的数据源:

  • incident_id: 和顶层attributes.incidentId一致,Stackdriver事件唯一标识
  • condition_name: 触发告警的规则条件名称
  • policy_name: 所属的Stackdriver告警策略名称
  • resource: 监控资源的详细信息:
    • labels: 资源的标签集合(如GCE实例的instance_id、zone)
    • type: 资源类型(如gce_instance表示GCE虚拟机)
  • resource_name: 资源的显示名称,格式为「GCP项目ID + 空格 + 资源名称」(如示例中的squad-spielwiese test-ezander)
  • started_at: 告警触发的时间戳(Unix时间格式)
  • state: 事件状态(如open表示告警活跃,closed表示已关闭)
  • summary: 事件的简短摘要,和顶层text内容一致
  • url: Stackdriver控制台事件页面的直接链接,包含project参数

history

告警的状态变更历史记录,每条记录包含:

  • severity: 变更后的告警级别
  • status: 变更后的告警状态(如open、closed)
  • text: 变更的描述文本
  • updateTime: 变更发生的时间戳

二、提取GCP项目ID的可靠方法

针对你的需求,这里提供两种可行方案,按可靠性排序:

方案1:从rawData.incident.url中提取(最可靠)

Stackdriver事件的控制台链接中,project参数直接对应资源所在的GCP项目ID,这个参数格式是固定的,不会轻易变更,是最稳定的提取方式。

示例代码(Python):

from urllib.parse import urlparse, parse_qs

# 假设alert是你的告警JSON对象
url = alert["rawData"]["incident"]["url"]
parsed_url = urlparse(url)
project_id = parse_qs(parsed_url.query)["project"][0]
# 输出结果:squad-spielwiese

方案2:从rawData.incident.resource_name中分割

resource_name的格式确实是「GCP项目ID + 空格 + 资源名称」,可以通过分割空格取第一部分获取项目ID。但需要注意:如果未来Stackdriver修改这个格式,或者资源名称中出现空格(虽然GCP资源名不允许空格,但不排除特殊场景),这种方法会失效。

示例代码(Python):

resource_name = alert["rawData"]["incident"]["resource_name"]
project_id = resource_name.split(" ")[0]
# 输出结果:squad-spielwiese

补充验证

你也可以从attributes.moreInfo的链接中提取project参数,和上述方案1的结果一致,作为交叉验证的手段。

内容的提问来源于stack exchange,提问作者Heiwu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:26:00