Important: This documentation is about an older version. It's relevant only to the release noted, many of the features and functions have been updated or replaced. Please view the current version.
prometheus.relabel
Prometheus metrics follow the OpenMetrics format. Each time series is uniquely identified by its metric name, plus optional key-value pairs called labels. Each sample represents a datapoint in the time series and contains a value and an optional timestamp.
<metric name>{<label_1>=<label_val_1>, <label_2>=<label_val_2> ...} <value> [timestamp]The prometheus.relabel component rewrites the label set of each metric passed along to the exported receiver by applying one or more relabeling rules.
If no rules are defined or applicable to some metrics, then those metrics are forwarded as-is to each receiver passed in the component’s arguments.
If no labels remain after the relabeling rules are applied, then the metric is dropped.
The most common use of prometheus.relabel is to filter Prometheus metrics or standardize the label set that’s passed to one or more downstream receivers.
The rule blocks are applied to the label set of each metric in order of their appearance in the configuration file.
The configured rules can be retrieved by calling the function in the rules export field.
You can specify multiple prometheus.relabel components by giving them different labels.
Usage
prometheus.relabel "<LABEL>" {
  forward_to = <RECEIVER_LIST>
  rule {
    ...
  }
  ...
}Arguments
You can use the following arguments with prometheus.relabel:
| Name | Type | Description | Default | Required | 
|---|---|---|---|---|
| forward_to | list(MetricsReceiver) | Where the metrics should be forwarded to, after relabeling takes place. | yes | |
| max_cache_size | int | The maximum number of elements to hold in the relabeling cache. | 100000 | no | 
Blocks
You can use the following block with prometheus.relabel:
| Name | Description | Required | 
|---|---|---|
| rule | Relabeling rules to apply to received metrics. | no | 
rule
The rule block contains the definition of any relabeling rules that can be applied to an input metric.
If more than one rule block is defined, the transformations are applied in top-down order.
The following arguments can be used to configure a rule.
All arguments are optional. Omitted fields take their default values.
| Name | Type | Description | Default | Required | 
|---|---|---|---|---|
| action | string | The relabeling action to perform. | replace | no | 
| modulus | uint | A positive integer used to calculate the modulus of the hashed source label values. | no | |
| regex | string | A valid RE2 expression with support for parenthesized capture groups. Used to match the extracted value from the combination of the source_labelandseparatorfields or filter labels during thelabelkeep/labeldrop/labelmapactions. | (.*) | no | 
| replacement | string | The value against which a regular expression replace is performed, if the regular expression matches the extracted value. Supports previously captured groups. | "$1" | no | 
| separator | string | The separator used to concatenate the values present in source_labels. | ; | no | 
| source_labels | list(string) | The list of labels whose values are to be selected. Their content is concatenated using the separatorand matched againstregex. | no | |
| target_label | string | Label to which the resulting value will be written to. | no | 
You can use the following actions:
- drop- Drops metrics where- regexmatches the string extracted using the- source_labelsand- separator.
- dropequal- Drop targets for which the concatenated- source_labelsdo match- target_label.
- hashmod- Hashes the concatenated labels, calculates its modulo- modulusand writes the result to the- target_label.
- keep- Keeps metrics where- regexmatches the string extracted using the- source_labelsand- separator.
- keepequal- Drop targets for which the concatenated- source_labelsdon’t match- target_label.
- labeldrop- Matches- regexagainst all label names. Any labels that match are removed from the metric’s label set.
- labelkeep- Matches- regexagainst all label names. Any labels that don’t match are removed from the metric’s label set.
- labelmap- Matches- regexagainst all label names. Any labels that match are renamed according to the contents of the- replacementfield.
- lowercase- Sets- target_labelto the lowercase form of the concatenated- source_labels.
- replace- Matches- regexto the concatenated labels. If there’s a match, it replaces the content of the- target_labelusing the contents of the- replacementfield.
- uppercase- Sets- target_labelto the uppercase form of the concatenated- source_labels.
Note
The regular expression capture groups can be referred to using either the
$CAPTURE_GROUP_NUMBERor${CAPTURE_GROUP_NUMBER}notation.
Exported fields
The following fields are exported and can be referenced by other components:
| Name | Type | Description | 
|---|---|---|
| receiver | MetricsReceiver | The input receiver where samples are sent to be relabeled. | 
| rules | RelabelRules | The currently configured relabeling rules. | 
Component health
prometheus.relabel is only reported as unhealthy if given an invalid configuration.
In those cases, exported fields are kept at their last healthy values.
Debug information
prometheus.relabel doesn’t expose any component-specific debug information.
Debug metrics
- prometheus_fanout_latency(histogram): Write latency for sending to direct and indirect components.
- prometheus_forwarded_samples_total(counter): Total number of samples sent to downstream components.
- prometheus_relabel_cache_hits(counter): Total number of cache hits.
- prometheus_relabel_cache_misses(counter): Total number of cache misses.
- prometheus_relabel_cache_size(gauge): Total size of relabel cache.
- prometheus_relabel_metrics_processed(counter): Total number of metrics processed.
- prometheus_relabel_metrics_written(counter): Total number of metrics written.
Example
The following example shows how the prometheus.relabel component applies relabel rules to the incoming metrics, and forwards the results to prometheus.remote_write.onprem.receiver:
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"} 4After applying the first rule, the replace action populates a new label named host by concatenating the contents of the __address__ and instance labels, separated by a slash /.
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"} 4On the second relabeling rule, the keep action only keeps the metrics whose app label matches regex, dropping everything else, so the list of metrics is trimmed down to:
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"}  9The third and final relabeling rule which uses the labeldrop action removes the instance label from the set of labels.
So in this case, the initial set of metrics passed to the exported receiver is:
metric_a{host = "localhost/development", __address__ = "localhost", app = "backend"}  2
metric_a{host = "cluster_a/production",  __address__ = "cluster_a", app = "backend"}  9The two resulting metrics are then propagated to each receiver defined in the forward_to argument.
Compatible components
prometheus.relabel can accept arguments from the following components:
- Components that export Prometheus MetricsReceiver
prometheus.relabel has exports that can be consumed by the following components:
- Components that consume Prometheus MetricsReceiver
Note
Connecting some components may not be sensible or components may require further configuration to make the connection work correctly. Refer to the linked documentation for more details.







