菜单
通用版本 (GA) 开源

discovery.relabel

在 Alloy 中,目标被定义为一组称为标签的键值对。

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

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

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

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

用法

alloy
discovery.relabel "<LABEL>" {
  targets = "<TARGET_LIST>"

  rule {
    ...
  }

  ...
}

参数

可以将以下参数与 discovery.relabel 一起使用

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

可以将以下块与 discovery.relabel 一起使用

描述必需
rule应用于目标的重新标记规则。

rule

rule 块配置要应用于目标的重新标记规则。

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

以下参数可用于配置 rule。所有参数都是可选的。省略的字段采用其默认值。

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

您可以使用以下操作

  • drop - 丢弃 regex 匹配使用 source_labelsseparator 提取的字符串的指标。
  • dropequal - 丢弃串联的 source_labelstarget_label 匹配的目标。
  • hashmod - 对串联的标签进行哈希,计算其模数 modulus,并将结果写入 target_label
  • keep - 保留 regex 匹配使用 source_labelsseparator 提取的字符串的指标。
  • keepequal - 丢弃串联的 source_labelstarget_label 不匹配的目标。
  • labeldrop - 将 regex 与所有标签名称匹配。任何匹配的标签都会从指标的标签集中移除。
  • labelkeep - 将 regex 与所有标签名称匹配。任何不匹配的标签都会从指标的标签集中移除。
  • labelmap - 将 regex 与所有标签名称匹配。任何匹配的标签都会根据 replacement 字段的内容进行重命名。
  • lowercase - 将 target_label 设置为串联的 source_labels 的小写形式。
  • replace - 将 regex 与串联的标签匹配。如果匹配,则使用 replacement 字段的内容替换 target_label 的内容。
  • uppercase - 将 target_label 设置为串联的 source_labels 的大写形式。

注意

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

导出的字段

以下字段被导出,可供其他组件引用

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

组件健康状态

discovery.relabel 仅在配置无效时报告不健康。在这种情况下,导出的字段保留其上次健康时的值。

调试信息

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

调试指标

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

示例

以下示例展示了 discovery.relabel 组件如何将重新标记规则应用于传入目标。实际上,targets 切片将来自另一个 discovery.* 组件,但此处枚举它们以帮助澄清示例。

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" },
  ]

  # Combine the "__address__" and "instance" labels into a new "destination" label.
  rule {
    source_labels = ["__address__", "instance"]
    separator     = "/"
    target_label  = "destination"
    action        = "replace"
  }

  # Drop any targets that do not have the value "backend" in their "app" label.
  rule {
    source_labels = ["app"]
    action        = "keep"
    regex         = "backend"
  }

  # Add a static label to all remaining targets.
  rule {
    target_label = "custom_static_label"
    replacement = "static_value"
  }
}

兼容组件

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

discovery.relabel 具有可供以下组件使用的导出

注意

连接某些组件可能没有意义,或者组件可能需要进一步配置才能使连接正常工作。请参阅链接的文档以获取更多详细信息。