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
相关产品推荐
相关产品推荐

