【问题标题】:GCP Monitoring - Incident does not contain system labelsGCP 监控 - 事件不包含系统标签
【发布时间】: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 主题。
  • 我认为你没有关注。我在频道上收到通知 - 这些通知(事件)缺少我上面提到的元数据字段。

标签: google-cloud-platform google-cloud-monitoring


【解决方案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 demandediting 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 这就是我想要的!谢谢。随意添加这是一个答案,我会接受它。
    猜你喜欢
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多