google-cloud-platform - 如何使用 terraform 定义具有多个标签的基于 GCP 日志的指标,但无法定义 label_extractors 块
问题描述
resource "google_logging_metric" "logging_metric" {
for_each = { for inst in var.log_based_metrics : inst.name => inst }
name = each.value.name
filter = each.value.filter
metric_descriptor {
metric_kind = each.value.metric_kind
value_type = each.value.value_type
dynamic "labels" {
for_each = each.value.labels
content {
key = labels.value["label_key"]
value_type = labels.value["label_value_type"]
description = labels.value["label_description"]
}
}
display_name = each.value.display_name
}
label_extractors = {
<< How to define multiple label_keys with label extractors >>
}
}
我试过 for_each 但它指的是资源中的第一个 for_each ,我们不能使用动态,因为它创建了多个 label_extractors 块,这不是有意的。
我的变量文件:
log_based_metrics = [
{
name = "name1",
filter = "something"
metric_kind = "DELTA",
value_type = "INT64",
labels = [
{
label_key = "deployment",
label_value_type = "STRING",
label_description = "deployment",
label_extractor = "REGEXP_EXTRACT(jsonPayload.involvedObject.name, \"(.*)-[^-]*-[^-]*$\")"
}
]
},
{
name = "name2",
filter = "something",
metric_kind = "DELTA",
value_type = "INT64",
labels = [
{
label_key = "deployment",
label_value_type = "STRING",
label_description = "deployment",
label_extractor = "REGEXP_EXTRACT(jsonPayload.involvedObject.name, \"(.*)-[^-]*-[^-]*$\")"
}
]
},
{
name = "name3",
filter = "something",
metric_kind = "DELTA",
value_type = "INT64",
labels = [
{
label_key = "deployment",
label_value_type = "STRING",
label_description = "deployment",
label_extractor = "REGEXP_EXTRACT(jsonPayload.involvedObject.name, \"(.*)-[^-]*-[^-]*$\")"
}
]
}]
label_extractor 应该是这样的 :(label_extractor ,label_key from each label block) 例如:
labels {
key = "mass"
value_type = "STRING"
description = "amount of matter"
}
labels {
key = "sku"
value_type = "INT64"
description = "Identifying number for item"
}
display_name = "My metric"
}
value_extractor = "EXTRACT(jsonPayload.request)"
label_extractors = {
"mass" = "EXTRACT(jsonPayload.request)"
"sku" = "EXTRACT(jsonPayload.id)"
}
解决方案
label_extractors
是一个属性,而不是一个块。所以你只需要创建一个你想要的地图。我不知道您输入数据的确切结构(问题中未显示),但它会如下所示(粗略示例):
label_extractors = { for val in each.value.labels: val.label_key => val.label_extractor }
推荐阅读
- mule - 将json数组转换为带有内部数组的单个json
- c# - 如何还原对其 MDF 和 LDF 文件使用相同命名方案的多个 SQL Server 数据库
- encryption - 解析签名和加密的电子邮件
- javascript - 使用节点js从url获取视频文件?
- python - 使用 Visual Studio Code 和 autopep8 在导入前允许语句
- javascript - 将元素添加到 DOM 后如何选择元素
- c# - 在复杂类型上使用 [FromQuery] Name 属性
- javascript - 如何将 node.js url 参数从 id 更改为博客的关键字
- node.js - 将 adobe inDesign 转换为 pptx(甚至可能吗?)
- swift - 我在 spritekit 中的 if 语句(swift 不起作用)。随着分数越来越高,我正在尝试增加障碍的数量