发现重标签
在Alloy中,目标被定义为名为labels的键值对集合。
discovery.relabel
通过应用一个或多个重命名规则来重写输入目标的标签集。如果没有定义规则,则输入目标将原样导出。
discovery.relabel
最常用的用法是过滤目标或标准化传递给下游组件的目标标签集。根据在配置文件中出现的顺序,应用rule
块到每个目标的标签集。可以通过调用rules
导出字段中的函数来检索配置的规则。
以双下划线__
开头的目标标签被认为是内部的,并在收集遥测信息之前可能被其他组件删除。要保留这些标签中的任何一个,请使用labelmap
操作来删除前缀,或将它们重新映射到不同的名称。服务发现机制通常将它们的标签分组在__meta_*
下。例如,discovery.kubernetes组件填充了一组__meta_kubernetes_*
标签,以提供有关发现Kubernetes资源的信息。如果需要临时存储标签值,例如作为后续步骤的输入,请使用__tmp
标签名称前缀,因为它保证永远不会被使用。
可以通过提供不同的标签来指定多个discovery.relabel
组件。
用法
discovery.relabel "LABEL" {
targets = TARGET_LIST
rule {
...
}
...
}
参数
以下参数被支持
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 要重新标记的目标 | yes |
块
以下块可以在discovery.relabel
的定义内部使用
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
rule | rule | 要应用于目标的重新标记规则。 | no |
rule block
rule
块包含可以应用于输入指标的任何重新标记规则的定义。如果定义了多个rule
块,则按自上而下的顺序应用转换。
可以使用以下参数配置rule
。所有参数都是可选的。省略的字段将取它们的默认值。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
action | 字符串 | 要执行的重新标记操作。 | replace | no |
modulus | uint | 用于计算散列源标签值模数的正整数。 | no | |
regex | 字符串 | 一个有效的RE2表达式,支持带括号的捕获组。用于匹配从source_label 和separator 字段的组合中提取的值或在进行labelkeep/labeldrop/labelmap 操作时过滤标签。 | (.*) | no |
replacement | 字符串 | 如果正则表达式匹配提取的值,则执行正则表达式替换的值。支持先前捕获的组。 | "$1" | no |
separator | 字符串 | 用于连接source_labels 中现有值的分隔符。 | ; | no |
source_labels | list(string) | 要选择其值的标签列表。它们的内容使用separator 连接,并与regex 匹配。 | no | |
target_label | 字符串 | 将结果值写入的标签。 | no |
可以使用以下操作
drop
- 如果regex
匹配使用source_labels
和separator
提取的字符串,则删除指标。dropequal
- 删除与source_labels
连接不匹配target_label
的目标。hashmod
- 散列连接的标签,计算其模数并将其写入target_label
。keep
- 如果regex
匹配使用source_labels
和separator
提取的字符串,则保留指标。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}
的格式引用正则表达式捕获组。
导出字段
以下字段被导出,并且可以由其他组件引用
名称 | 类型 | 描述 |
---|---|---|
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
的导出可以被以下组件消费
- 消费目标的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。有关更多详细信息,请参阅相关文档。