Relabel Rules

During ingestion, the Kloudfuse platform supports the rewriting the labels for Metrics, Events, Logs, and Traces data. This page describes configuration of relabel rules for Metrics, Events, and Traces. For configuration of relabel rules for Logs, see Parsing logs.

The configuration follows the Prometheus relabel config format, see https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config for more details. You can use helm chart values in the relevant relabel_configs section of the custom_values.yaml file.

Relabel rules in the Ingester
ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs: []
    events:
      # relabelConfigs - Configure relabel rules for events labels.
      # Format follows Prometheus relabel_config syntax.
      # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
      relabelConfigs: []
    traces:
      # relabelConfigs - Configure relabel rules for traces labels.
      # Format follows Prometheus relabel_config syntax.
      # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
      relabelConfigs: []
yaml

Common Example of Relabel Rules

The examples below only shows a single relabel rule for each scenario. Multiple rules can be be provided, and they are evaluated in order. Specifically, each rule is evaluated against the current state of the labels after application of the previous rules.

Add New Label Based on Current Label Value

In a common scenario, you can enrich some metrics with new labels, depending on the existing label values. For example, for the label aws_account with value 123456, you can add aws_account_name label with AWS_account_name_for_123456 value by inserting the following section at the end of the custom_values.yaml file.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "123456"
            replacement: AWS_account_name_for_123456
            source_labels:
            - aws_account
            target_label: aws_account_name
          - ...
yaml

Run the helm upgrade to apply the changes.

Replace Label Value Based on Current Label Value

In a common scenario, you can update the label value, based on regex grouping. Consider the following example: A label span_name always comes with prefix span_. You can add a regex pattern that strips the prefix span_. Note that in the example below, the replacement value supports group references, e.g., ${1}.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "span_(.*)"
            replacement: ${1}
            source_labels:
            - span_name
            target_label: span_name
          - ...
yaml

Run the helm upgrade to apply the changes.

Conditionally Replace Label Value

By utilizing source_labels and regex you can conditionally replace the label value. Continuing with the example above, you can remove the prefix of span_ only if the service label is my-service. By default the relabel rules concatenate the label values of the source_labels with the ; separator. The separator used can be changed by explicitly providing the separator paramter.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "my-service;span_(.*)"
            replacement: ${1}
            source_labels:
            - service
            - span_name
            target_label: span_name
          - ...
yaml

Run the helm upgrade to apply the changes.

Add New Label Based on Multiple Labels

Continuing with the example above, you can create a new label service_span by combining value of the service and span_name labels. You can also utilize regex grouping to extract a part of the value. In the example below, the service_span label is created by combining the value of the service label and a portion of the span_name label.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "(.*);span_(.*)"
            replacement: ${1}-${2}
            source_labels:
            - service
            - span_name
            target_label: service_span
          - ...
yaml

Run the helm upgrade to apply the changes.

Drop labels

Labels can be dropped from the data by setting the action to labeldrop and setting the regex to a pattern that matches the label name. In the example below, any label that starts with span_ will be dropped from the data.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "span_(.*)"
            action: labeldrop
          - ...
yaml

Run the helm upgrade to apply the changes.

Keep labels and Drop Everything Else

You can retain only the labels in your data while removing all other labels by setting the action to labelkeep and specifying a regex pattern that matches the desired label names. In the following example, any label that does not begin with span_ will be excluded from the data.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "span_(.*)"
            action: labelkeep
          - ...
yaml

Run the helm upgrade to apply the changes.

Drop or Keep Series with Matching Label Values

In business scenarios, some series have to be dropped based on existing label values. For example, to stop storing data for the label aws_account with value 123456, you must add aws_account_name label with AWS_account_name_for_123456 value in the relabel config with action drop. To keep certain series, use the keep action.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "123456"
            action: drop
            source_labels:
            - aws_account
          - ...
yaml

Run the helm upgrade to apply the changes.

Drop or Keep Series with Matching Metric Name

In Metrics stream, name is a special label that contains the name of the metric. For example, to stop storing any metric with name that starts with aws_ec2, you must add name label with aws_ec2.* value in the relabel config with action drop. To only keep these metrics, use the keep action.

ingester:
  config:
    aggregator:
      metric:
        # relabelConfigs - Configure relabel rules for metric labels.
        # Format follows Prometheus relabel_config syntax.
        # Ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
        relabelConfigs:
          - ...
          - regex: "aws_ec2.*"
            action: drop
            source_labels:
            - __name__
          - ...
yaml

Run the helm upgrade to apply the changes.