菜单
开源

prometheus.relabel

Prometheus度量遵循OpenMetrics格式。每个时间序列都通过其度量名称以及可选的键值对(标签)唯一标识。每个样本代表时间序列中的一个数据点,并包含一个值和一个可选的时间戳。

<metric name>{<label_1>=<label_val_1>, <label_2>=<label_val_2> ...} <value> [timestamp]

prometheus.relabel 组件通过应用一个或多个重命名规则,重新编写每个传递给导出接收器的指标的标签集。如果没有定义或适用规则,则将那些指标按原样转发到组件参数中传递的每个接收器。如果应用重命名规则后没有标签剩余,则丢弃该指标。

prometheus.relabel 最常见的用途是过滤 Prometheus 指标或标准化传递给一个或多个下游接收器的标签集。按配置文件中出现的顺序应用 rule 块。可以通过调用 rules 导出字段中的函数来检索配置的规则。

可以通过给它们不同的标签来指定多个 prometheus.relabel 组件。

用法

alloy
prometheus.relabel "LABEL" {
  forward_to = RECEIVER_LIST

  rule {
    ...
  }

  ...
}

参数

以下参数被支持

名称类型描述默认值必需
forward_tolist(MetricsReceiver)指定在重命名后应该转发到何处。yes
max_cache_sizeint在重命名缓存中保留的最大元素数。100,000no

以下块支持在 prometheus.relabel 定义内部

层次结构名称描述必需
rulerule应用于接收到的指标的重命名规则。no

rule 块

rule 块包含可以应用于输入指标的任何重命名规则的定义。如果定义了多个 rule 块,则按从上到下的顺序应用转换。

可以使用以下参数配置 rule。所有参数都是可选的。省略的字段采用其默认值。

名称类型描述默认值必需
操作字符串要执行的重命名操作。替换no
modulusuint用于计算散列源标签值的模数的正整数。no
regex字符串一个有效的 RE2 表达式,支持括号捕获组。用于匹配从 source_labelseparator 字段的组合中提取的值或过滤标签。(.*)no
replacement字符串如果正则表达式与提取的值匹配,则执行正则表达式替换的值。支持以前捕获的组。"$1"no
separator字符串用于连接 source_labels 中存在的值的分隔符。;no
source_labelslist(string)要选择其值的标签列表。它们的内容使用 separator 连接,并匹配 regexno
target_label字符串要将结果值写入的标签。no

可以使用以下操作

  • drop - 丢弃 regex 与使用 source_labelsseparator 提取的字符串匹配的指标。
  • dropequal - 丢弃与连接的 source_labels 匹配 target_label 的目标。
  • hashmod - 散列连接的标签,计算其模数并将结果写入 target_label
  • keep - 保留 regex 与使用 source_labelsseparator 提取的字符串匹配的指标。
  • 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} 语法来引用正则表达式捕获组。

导出字段

以下字段被导出,其他组件可以引用它们

名称类型描述
receiverMetricsReceiver输入接收器,样本被发送到此处进行重新标记。
rulesRelabelRules当前配置的重新标记规则。

组件健康状态

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 组件的实例,并查看它如何对以下指标进行操作。

alloy
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

在应用第一个 rule 后,replace 动作通过连接 __address__instance 标签的内容(用斜杠 / 分隔)来填充一个名为 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 动作仅保留与 regex 匹配的 app 标签的指标,删除其他所有内容,因此指标列表被缩减为:

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 的组件

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。有关更多详细信息,请参阅相关文档。