discovery.relabel
在 Alloy 中,目标被定义为一组称为标签的键值对。
discovery.relabel
通过应用一个或多个重新标记规则来重写输入目标的标签集。如果没有定义规则,则输入目标按原样导出。
discovery.relabel
最常见的用途是过滤目标或标准化传递给下游组件的目标标签集。rule
块按照它们在配置文件中的出现顺序应用于每个目标的标签集。可以通过调用 rules
导出字段中的函数来检索配置的规则。
以双下划线 __
开头的目标标签被认为是内部标签,可能会在遥测收集之前被其他组件移除。要保留这些标签中的任何一个,请使用 labelmap
操作来移除前缀,或将其重新映射到不同的名称。服务发现机制通常将它们的标签分组在 __meta_*
下。例如,discovery.kubernetes 组件会填充一组 __meta_kubernetes_*
标签,以提供关于发现的 Kubernetes 资源的信息。如果重新标记规则需要临时存储标签值(例如作为后续步骤的输入),请使用 __tmp
标签名称前缀,因为它保证永远不会被使用。
可以通过给它们不同的标签来指定多个 discovery.relabel
组件。
用法
discovery.relabel "<LABEL>" {
targets = "<TARGET_LIST>"
rule {
...
}
...
}
参数
可以将以下参数与 discovery.relabel
一起使用
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 要重新标记的目标 | 是 |
块
可以将以下块与 discovery.relabel
一起使用
块 | 描述 | 必需 |
---|---|---|
rule | 应用于目标的重新标记规则。 | 否 |
rule
rule
块配置要应用于目标的重新标记规则。
rule
块包含可以应用于输入指标的任何重新标记规则的定义。如果定义了多个 rule
块,则转换按从上到下的顺序应用。
以下参数可用于配置 rule
。所有参数都是可选的。省略的字段采用其默认值。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
action | 字符串 | 要执行的重新标记操作。 | replace | 否 |
modulus | uint | 用于计算哈希源标签值模数的一个正整数。 | 否 | |
regex | 字符串 | 一个有效的 RE2 表达式,支持带括号的捕获组。用于匹配从 source_label 和 separator 字段组合中提取的值,或在 labelkeep/labeldrop/labelmap 操作期间过滤标签。 | (.*) | 否 |
replacement | 字符串 | 如果在正则表达式匹配提取的值时,用于执行正则表达式替换的值。支持之前捕获的组。 | "$1" | 否 |
separator | 字符串 | 用于连接 source_labels 中存在的值的分隔符。 | ; | 否 |
source_labels | list(string) | 要选择其值的标签列表。其内容使用 separator 连接并与 regex 匹配。 | 否 | |
target_label | 字符串 | 将写入结果值的标签。 | 否 |
您可以使用以下操作
drop
- 丢弃regex
匹配使用source_labels
和separator
提取的字符串的指标。dropequal
- 丢弃串联的source_labels
与target_label
匹配的目标。hashmod
- 对串联的标签进行哈希,计算其模数modulus
,并将结果写入target_label
。keep
- 保留regex
匹配使用source_labels
和separator
提取的字符串的指标。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}
符号引用正则表达式捕获组。
导出的字段
以下字段被导出,可供其他组件引用
名称 | 类型 | 描述 |
---|---|---|
output | list(map(string)) | 应用重新标记后的目标集。 |
rules | RelabelRules | 当前配置的重新标记规则。 |
组件健康状态
discovery.relabel
仅在配置无效时报告不健康。在这种情况下,导出的字段保留其上次健康时的值。
调试信息
discovery.relabel
不暴露任何组件特定的调试信息。
调试指标
discovery.relabel
不暴露任何组件特定的调试指标。
示例
以下示例展示了 discovery.relabel
组件如何将重新标记规则应用于传入目标。实际上,targets
切片将来自另一个 discovery.*
组件,但此处枚举它们以帮助澄清示例。
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
具有可供以下组件使用的导出
- 消费目标的组件
注意
连接某些组件可能没有意义,或者组件可能需要进一步配置才能使连接正常工作。请参阅链接的文档以获取更多详细信息。