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 | string | 要执行的重新标记操作。 | replace | 否 |
modulus | uint | 用于计算哈希源标签值的模数的正整数。 | 否 | |
regex | string | 有效的 RE2 表达式,支持带括号的捕获组。 用于匹配从 source_label 和 separator 字段组合中提取的值,或在 labelkeep/labeldrop/labelmap 操作期间过滤标签。 | (.*) | 否 |
replacement | string | 如果正则表达式与提取的值匹配,则执行正则表达式替换的值。 支持先前捕获的组。 | "$1" | 否 |
separator | string | 用于连接 source_labels 中存在的值的分隔符。 | ; | 否 |
source_labels | list(string) | 要选择其值的标签列表。 它们的内容使用 separator 连接,并与 regex 匹配。 | 否 | |
target_label | string | 结果值将写入到的标签。 | 否 |
您可以使用以下操作
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 "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
具有可以被以下组件使用的导出
- 使用 目标 的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。 有关更多详细信息,请参阅链接的文档。