Stackdriver基于自定义指标创建告警失败:容器资源类型识别异常
问题原因分析
这个错误的核心是自定义日志指标的资源类型和原日志查询的资源类型不匹配:
- 你最初的日志查询针对的是
container类型的资源,但当你基于该查询创建自定义指标后,这个指标实际上属于global资源类型(Cloud Monitoring中所有自定义日志指标默认绑定全局资源)。 - Stackdriver在自动生成告警条件的filter时,错误地沿用了原日志查询里的
resource.type="container",但Cloud Monitoring无法识别自定义指标关联container资源类型,因此抛出"unknown resource type: container"的错误。
解决方案
你需要手动修正告警策略中的filter,步骤如下:
- 打开告警策略的编辑页面,找到
condition_threshold对应的filter字段。 - 将
resource.type="container"替换为resource.type="global"。 - (可选)如果需要保留原日志查询中的集群、命名空间过滤逻辑,要把原日志的
resource.labels.*替换为metric.labels.*——因为自定义指标会将原日志的资源标签同步为指标标签。
修正后的正确filter示例:
metric.type="logging.googleapis.com/user/my-custom-metric" resource.type="global" metric.labels.cluster_name="my-cluster" metric.labels.namespace_id="mynamespace"
- 保存告警策略,此时错误应该会消失。
补充说明
Cloud Monitoring的自动填充逻辑在这里存在一个小bug:它没有区分原日志查询的资源类型和自定义指标实际对应的资源类型。自定义日志指标本质上是全局聚合的指标,不属于任何特定的容器或实例资源,所以必须使用global作为资源类型。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

