菜单
开源

发现 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 {
    ...
  }

  ...
}

参数

以下参数受支持

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

以下块在 discovery.relabel 定义中受支持

层次结构描述必需
rulerule要应用到目标上的重命名规则。no

规则块

rule 块包含可以应用到输入度量值上的任何重命名规则的定义。如果定义了多个 rule 块,则将转换按从上到下的顺序应用。

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

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

您可以使用的以下操作

  • drop - 删除与使用 source_labels分隔符 提取的字符串匹配 regex 的指标。
  • dropequal - 对不与 source_labels 连接匹配 target_label 的目标进行删除。
  • hashmod - 对连接的标签进行哈希处理,计算其模 modulus,并将结果写入 target_label
  • keep - 保持与使用 source_labels分隔符 提取的字符串匹配 regex 的指标。
  • keepequal - 对不与 source_labels 连接匹配 target_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 不公开任何特定于组件的调试指标。

示例

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 的导出可以被以下组件消费

注意

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