GCP 监控 - 事件不包含系统标签

Posted

技术标签:

【中文标题】GCP 监控 - 事件不包含系统标签【英文标题】:GCP Monitoring - Incident does not contain system labels 【发布时间】:2022-01-22 07:49:38 【问题描述】:

我通过 GCP 控制台创建了警报政策。此政策将事件发送到 PubSub 通知渠道。

例如:容器的高 CPU 利用率策略


  "name": "...",
  "displayName": "...",
  "documentation": ,
  "conditions": [
    
      "name": "...",
      "displayName": "Kubernetes Container - CPU usage time",
      "conditionThreshold": 
        "aggregations": [
          
            "alignmentPeriod": "300s",
            "perSeriesAligner": "ALIGN_RATE"
          
        ],
        "comparison": "COMPARISON_GT",
        "duration": "0s",
        "filter": "metric.type=\"kubernetes.io/container/cpu/core_usage_time\" resource.type=\"k8s_container\"",
        "thresholdValue": 0.04,
        "trigger": 
          "count": 1
        
      
    
  ],
  "alertStrategy": 
    "autoClose": "604800s",
    "notificationPrompts": [
      "OPENED"
    ]
  ,
  "combiner": "OR",
  "enabled": true,
  "notificationChannels": [
    "..."
  ],
  "creationRecord": 
    "mutateTime": "...",
    "mutatedBy": "..."
  ,
  "mutationRecord": 
    "mutateTime": "...",
    "mutatedBy": "..."
  

一旦我触发此警报,并在 PubSub 端获取事件,system_labels 的元数据字段始终为空:

    "metadata": 
      "system_labels": ,
      "user_labels": 
    ,

尽管如此,如果我使用指标资源管理器查看此资源,我发现这些标签已被填充。

有什么建议吗?

【问题讨论】:

我想了解更多关于您创建策略的方式。您可以分享用于创建策略的查询吗?除此之外,您还在 Cloud Monitoring 中遇到问题,或者只是在 Cloud Pub/Sub 中查看元数据? 策略是使用 UI 创建的,没什么特别的。我已将其导出到 json 并添加到上面的原始问题中。至于您的第二个问题,这是云监控而不是发布订阅的问题。我将相同的事件发送到其他渠道并遇到相同的问题。 您是否创建了通知渠道并授权了服务帐户?授权允许通知服务帐户发布您用作通知渠道的每个 Pub/Sub 主题。 我认为你没有关注。我在频道上收到通知 - 这些通知(事件)缺少我上面提到的元数据字段。 【参考方案1】:

这不是错误。仅当标签明确包含在条件的过滤器或跨系列聚合的分组中时,元数据的值才可用。也就是说,您必须在过滤器或分组中引用元数据标签,以便它具有模板的值。如需更多信息,请参阅documentation。

【讨论】:

【参考方案2】:

根据这个documentation创建频道时,需要:

启用 Pub/Sub API 并创建主题。 为主题配置通知渠道。 授权服务帐户。 在提醒政策中设置通知渠道。

要在提醒政策中使用 Pub/Sub 通知渠道,请选择 Pub/Sub 作为渠道类型,然后选择主题。 默认情况下,警报后端会尝试生成具有 1.2 版格式的 JSON 数据包。

默认情况下,元数据字段需要具有以下值:

"metadata": 
  "system_labels":  "labelkey": "labelvalue" ,
  "user_labels":  "labelkey": "labelvalue" 
,

如果 “system_labels” 字段未显示“labelkey”和“labelvalue”,您需要检查服务帐户的配置,并确保在警报中设置通知渠道政策正确。

请查看examples of JSON packet and the schema。

在同一篇文章中,您将找到有关Create a Channel on demand 和editing or deleting channels. 的详细说明


您需要在您的策略中启用过滤器,以便查看填充的 “metadata”: 下的字段(您想要的任何字段)。

为了确认这一点,我在 Google Cloud 中复制了您的场景。我创建了一个警报并将 pub/Sub 配置为通知渠道之一。

然后,我继续向 VM 施加压力以触发警报。当我在策略中使用过滤器(在本例中为“system_labels=name”)时,Pub/Sub 中消息主题中的“元数据”字段显示:

"metadata": 
      "system_labels": "name": "pubsubtest-1",
      "user_labels": 
    ,

但是当我没有配置时,策略中的过滤器显示给我:

"metadata": 
      "system_labels": ,
      "user_labels": 
    ,

【讨论】:

我不明白这如何回答我的问题 - 我确实在 PubSub 频道上收到了通知,这意味着我已经正确设置了所有内容。我只缺少元数据字段。配置中是否有仅与这些字段相关的部分? 我在回答中添加了更多信息,希望这些信息可以帮助您解决疑问。 首先非常感谢您的帮助!但是您建议的是解决错误的方法。我不想在字段上设置过滤器以获得它的价值,这很奇怪。我也不知道该字段的值 - 这就是我首先需要它的原因。无论如何它都应该存在 - 与资源标签的显示方式相同,无需设置任何过滤器。 @Omricoco,这不是错误。仅当标签明确包含在条件的过滤器或跨系列聚合的分组中时,元数据的值才可用。也就是说,您必须在过滤器或分组中引用元数据标签,以便它具有模板的值。如需更多信息,请参阅documentation。 @ChandraKiranPasumarti 这就是我想要的!谢谢。随意添加这是一个答案,我会接受它。

以上是关于GCP 监控 - 事件不包含系统标签的主要内容,如果未能解决你的问题,请参考以下文章

在 GCP 上调整永久磁盘大小时,如何触发文件系统调整大小?

pyget-资源与标签(SpriteLabelFont)

论监控中事件管理的艺术

Prometheus监控实战系列八:标签重写

运维监控三剑客之Nagios

inotify机制监控文件系统事件原理及使用