菜单
开源

发现重标签

在Alloy中,目标被定义为名为labels的键值对集合。

discovery.relabel通过应用一个或多个重命名规则来重写输入目标的标签集。如果没有定义规则,则输入目标将原样导出。

discovery.relabel最常用的用法是过滤目标或标准化传递给下游组件的目标标签集。根据在配置文件中出现的顺序,应用rule块到每个目标的标签集。可以通过调用rules导出字段中的函数来检索配置的规则。

以双下划线__开头的目标标签被认为是内部的,并在收集遥测信息之前可能被其他组件删除。要保留这些标签中的任何一个,请使用labelmap操作来删除前缀,或将它们重新映射到不同的名称。服务发现机制通常将它们的标签分组在__meta_*下。例如,discovery.kubernetes组件填充了一组__meta_kubernetes_*标签,以提供有关发现Kubernetes资源的信息。如果需要临时存储标签值,例如作为后续步骤的输入,请使用__tmp标签名称前缀,因为它保证永远不会被使用。

可以通过提供不同的标签来指定多个discovery.relabel组件。

用法

alloy
discovery.relabel "LABEL" {
  targets = TARGET_LIST

  rule {
    ...
  }

  ...
}

参数

以下参数被支持

名称类型描述默认值必需
targetslist(map(string))要重新标记的目标yes

以下块可以在discovery.relabel的定义内部使用

层次结构描述必需
rulerule要应用于目标的重新标记规则。no

rule block

rule块包含可以应用于输入指标的任何重新标记规则的定义。如果定义了多个rule块,则按自上而下的顺序应用转换。

可以使用以下参数配置rule。所有参数都是可选的。省略的字段将取它们的默认值。

名称类型描述默认值必需
action字符串要执行的重新标记操作。replaceno
modulusuint用于计算散列源标签值模数的正整数。no
regex字符串一个有效的RE2表达式,支持带括号的捕获组。用于匹配从source_labelseparator字段的组合中提取的值或在进行labelkeep/labeldrop/labelmap操作时过滤标签。(.*)no
replacement字符串如果正则表达式匹配提取的值,则执行正则表达式替换的值。支持先前捕获的组。"$1"no
separator字符串用于连接source_labels中现有值的分隔符。;no
source_labelslist(string)要选择其值的标签列表。它们的内容使用separator连接,并与regex匹配。no
target_label字符串将结果值写入的标签。no

可以使用以下操作

  • drop - 如果regex匹配使用source_labelsseparator提取的字符串,则删除指标。
  • dropequal - 删除与source_labels连接不匹配target_label的目标。
  • hashmod - 散列连接的标签,计算其模数并将其写入target_label
  • keep - 如果regex匹配使用source_labelsseparator提取的字符串,则保留指标。
  • keepequal - 删除与source_labels连接不匹配target_label的目标。
  • labeldrop - 将正则表达式与所有标签名称进行匹配。匹配的任何标签都将从指标的标签集中删除。
  • labelkeep - 将正则表达式与所有标签名称进行匹配。不匹配的任何标签都将从指标的标签集中删除。
  • labelmap - 将正则表达式与所有标签名称进行匹配。匹配的任何标签将根据replacement字段的内 容进行重命名。
  • lowercase - 将target_label设置为source_labels连接后的小写形式。
  • replace - 将正则表达式匹配到连接的标签。如果匹配成功,则使用replacement字段的内 容替换target_label的内容。
  • uppercase - 将target_label设置为source_labels连接后的大写形式。

注意

可以使用$CAPTURE_GROUP_NUMBER${CAPTURE_GROUP_NUMBER}的格式引用正则表达式捕获组。

导出字段

以下字段被导出,并且可以由其他组件引用

名称类型描述
outputlist(map(string))应用重命名规则后的目标集合。
rulesRelabelRules当前配置的重命名规则。

组件健康

discovery.relabel只有在给定无效配置时才会报告为不健康。在这种情况下,导出字段保留其最后健康值。

调试信息

discovery.relabel不暴露任何组件特定的调试信息。

调试指标

discovery.relabel不暴露任何组件特定的调试指标。

示例

alloy
discovery.relabel "keep_backend_only" {
  targets = [
    { "__meta_foo" = "foo", "__address__" = "localhost", "instance" = "one",   "app" = "backend"  },
    { "__meta_bar" = "bar", "__address__" = "localhost", "instance" = "two",   "app" = "database" },
    { "__meta_baz" = "baz", "__address__" = "localhost", "instance" = "three", "app" = "frontend" },
  ]

  rule {
    source_labels = ["__address__", "instance"]
    separator     = "/"
    target_label  = "destination"
    action        = "replace"
  }

  rule {
    source_labels = ["app"]
    action        = "keep"
    regex         = "backend"
  }
}

兼容组件

discovery.relabel可以接受以下组件的参数

discovery.relabel的导出可以被以下组件消费

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。有关更多详细信息,请参阅相关文档。