prometheus重新标记
Prometheus指标遵循OpenMetrics格式。每个时间序列由其度量名称唯一标识,以及可选的键值对,称为标签。每个样本代表时间序列中的一个数据点,并包含一个值和一个可选的时间戳。
<metric name>{<label_1>=<label_val_1>, <label_2>=<label_val_2> ...} <value> [timestamp]
prometheus.relabel
组件通过应用一个或多个重命名规则来重新编写每个传递给导出接收机的指标的重命名集。如果没有定义规则或某些指标不适用,则将那些指标原样转发到组件参数中传递的每个接收机。如果在应用重命名规则后没有剩余标签,则删除该指标。
prometheus.relabel
最常用的用途是过滤Prometheus指标或标准化传递给一个或多个下游接收机的标签集。按配置文件中的出现顺序应用规则
块到每个指标的标签集中。通过调用rules
导出字段中的函数可以检索配置的规则。
可以通过指定不同的标签来指定多个prometheus.relabel
组件。
用法
prometheus.relabel "LABEL" {
forward_to = RECEIVER_LIST
rule {
...
}
...
}
参数
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
forward_to | list(MetricsReceiver) | 指示在重命名后应将指标转发到何处。 | yes | |
max_cache_size | int | 重新命名缓存中要保留的最大元素数。 | 100,000 | no |
块
在以下定义块中支持prometheus.relabel
层次结构 | 名称 | 描述 | 必需 |
---|---|---|---|
rule | rule | 要应用于接收到的指标的重命名规则。 | no |
rule block
在rule
块中包含适用于输入指标的重命名规则的定义。如果定义了多个rule
块,则按其在配置文件中的出现顺序应用转换。
以下参数可以用来配置一个rule
。所有参数都是可选的。省略的字段采用它们的默认值。
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
action | string | 要执行的重命名操作。 | 替换 | no |
modulus | uint | 用于计算散列的源标签值模数的正整数。 | no | |
regex | string | 支持括号捕获组的有效RE2表达式。用于匹配从source_label 和separator 字段的组合中提取的值,或在labelkeep/labeldrop/labelmap 操作期间过滤标签。 | (.*) | no |
替换 | string | 如果正则表达式匹配提取的值,将会与此值进行比较的替换值。支持之前捕获的组。 | "$1" | no |
分隔符 | string | 用于连接source_labels 中存在的值的分隔符。 | ; | no |
source_labels | 列表(字符串) | 要选择其值的标签列表。它们的内容将使用separator 连接,并匹配regex 。 | no | |
target_label | string | 结果值将被写入的标签。 | no |
可以使用以下操作
drop
- 删除与使用source_labels
和separator
提取的字符串匹配正则表达式regex
的指标。dropequal
- 删除与此处的source_labels
连接的顺序匹配target_label
的目标。hashmod
- 计算连接标签的散列值,并 módulomodulus
,将结果写入到target_label
。keep
- 保护与使用source_labels
和separator
提取的字符串匹配正则表达式regex
的指标。keepequal
- 删除与连接的source_labels
不匹配target_label
的目标。labeldrop
- 将regex
与所有标签名匹配。匹配的任何标签都将从指标的标签集合中删除。labelkeep
- 将regex
与所有标签名匹配。不匹配的任何标签都将从指标的标签集合中删除。labelmap
- 将regex
与所有标签名匹配。匹配的任何标签将根据replacement
字段的内容重新命名。lowercase
- 将连接的source_labels
的小写形式设置为target_label
。replace
- 将regex
与连接的标签进行匹配。如果有匹配项,它将使用replacement
字段的内容替换target_label
的内容。uppercase
- 将连接的source_labels
的大写形式设置为target_label
。
说明
可以使用$CAPTURE_GROUP_NUMBER
或${CAPTURE_GROUP_NUMBER}
表示法来引用正则表达式捕获组。
导出字段
以下字段将被导出,并可被其他组件引用
名称 | 类型 | 描述 |
---|---|---|
receiver | 度量接收器 | 将样本发送到以重新标记的输入接收器。 |
rules | 重新标记规则 | 当前配置的重新标记规则。 |
组件健康
prometheus.relabel
仅在给定无效配置时报告为不健康。在这些情况下,导出字段将保留其最后的健康值。
调试信息
prometheus.relabel
不公开任何组件特定的调试信息。
调试度量
prometheus_relabel_metrics_processed
(计数器):已处理的总指标数。prometheus_relabel_metrics_written
(计数器):编写总数。prometheus_relabel_cache_misses
(计数器):缓存缺失总数。prometheus_relabel_cache_hits
(计数器):缓存命中总数。prometheus_relabel_cache_size
(仪表盘):重新标记缓存的总大小。prometheus_fanout_latency
(直方图):向直接和间接组件发送的写入延迟。prometheus_forwarded_samples_total
(计数器):发送到下游组件的总样本数。
示例
让我们创建一个prometheus.relabel
组件的实例,并看看它在以下度量的行为如何。
prometheus.relabel "keep_backend_only" {
forward_to = [prometheus.remote_write.onprem.receiver]
rule {
action = "replace"
source_labels = ["__address__", "instance"]
separator = "/"
target_label = "host"
}
rule {
action = "keep"
source_labels = ["app"]
regex = "backend"
}
rule {
action = "labeldrop"
regex = "instance"
}
}
metric_a{__address__ = "localhost", instance = "development", app = "frontend"} 10
metric_a{__address__ = "localhost", instance = "development", app = "backend"} 2
metric_a{__address__ = "cluster_a", instance = "production", app = "frontend"} 7
metric_a{__address__ = "cluster_a", instance = "production", app = "backend"} 9
metric_a{__address__ = "cluster_b", instance = "production", app = "database"} 4
应用第一条规则之后,通过连接标签 __address__
和 instance
的内容(由斜杠 /
分隔),使用 replace
动作填充了一个新的标签名为 host
。
metric_a{host = "localhost/development", __address__ = "localhost", instance = "development", app = "frontend"} 10
metric_a{host = "localhost/development", __address__ = "localhost", instance = "development", app = "backend"} 2
metric_a{host = "cluster_a/production", __address__ = "cluster_a", instance = "production", app = "frontend"} 7
metric_a{host = "cluster_a/production", __address__ = "cluster_a", instance = "production", app = "backend"} 9
metric_a{host = "cluster_b/production", __address__ = "cluster_a", instance = "production", app = "database"} 4
在第二条重命名规则中,keep
动作只保留 app
标签匹配正则表达式 regex
的指标,丢弃其他所有数据,因此指标列表被缩减到
metric_a{host = "localhost/development", __address__ = "localhost", instance = "development", app = "backend"} 2
metric_a{host = "cluster_a/production", __address__ = "cluster_a", instance = "production", app = "backend"} 9
第三条也是最后一条重命名规则,它使用 labeldrop
动作从标签集中移除了 instance
标签。
因此,在这种情况下,传递给导出接收者的初始指标集是
metric_a{host = "localhost/development", __address__ = "localhost", app = "backend"} 2
metric_a{host = "cluster_a/production", __address__ = "cluster_a", app = "backend"} 9
这两个结果指标随后分配给在 forward_to
参数中定义的每个接收者。
兼容组件
prometheus.relabel
可以接受以下组件的参数
- 导出 Prometheus
MetricsReceiver
的组件
prometheus.relabel
的导出可以被以下组件使用
- 消费 Prometheus
MetricsReceiver
的组件
说明
连接某些组件可能不太合理,或者组件可能需要进一步的配置才能正确工作。请参考相关文档了解详细信息。