发现 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 {
...
}
...
}
参数
以下参数受支持
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 要重命名的目标 | yes |
块
以下块在 discovery.relabel
定义中受支持
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
rule | rule | 要应用到目标上的重命名规则。 | no |
规则块
rule
块包含可以应用到输入度量值上的任何重命名规则的定义。如果定义了多个 rule
块,则将转换按从上到下的顺序应用。
可以使用以下参数来配置 rule
。所有参数都是可选的。省略的字段会采用它们的默认值。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
操作 | 字符串 | 要执行的重命名操作。 | replace | no |
modulus | 无符号整数 | 用来计算哈希的源标签值的模数。 | no | |
regex | 字符串 | 一个有效的 RE2 表达式,带有支持括号捕获组。它用于从 source_label 和 separator 字段的组合中提取值或进行 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}
语法引用正则表达式捕获组。
导出字段
以下字段被导出,可以由其他组件引用
名称 | 类型 | 描述 |
---|---|---|
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
的导出可以被以下组件消费
- 消费 目标 的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。请参阅相关文档以获取更多详细信息。