Menu

This is documentation for the next version of Grafana Alloy Documentation. For the latest stable release, go to the latest version.

Experimental Open source

prometheus.enrich

EXPERIMENTAL: This is an experimental component. Experimental components are subject to frequent breaking changes, and may be removed with no equivalent replacement. To enable and use an experimental component, you must set the stability.level flag to experimental.

The prometheus.enrich component enriches metrics with additional labels from service discovery targets. It matches a label from incoming metrics against a label from discovered targets, and copies specified labels from the matched target to the metric sample. If match doesn’t happen, the metrics will be passed through.

Usage

alloy
prometheus.enrich "<LABEL>" {
  targets = <DISCOVERY_COMPONENT>.targets
  
  target_match_label = "<LABEL>"
  
  forward_to = [<RECEIVER_LIST>]
}

Arguments

You can use the following arguments with prometheus.enrich:

NameTypeDescriptionDefaultRequired
forward_tolist(MetricsReceiver)Where the metrics should be forwarded to, after enrichment.yes
target_match_labelstringThe label from discovered targets to match against, for example, "__inventory_consul_service".yes
targetslist(map(string))List of targets from a discovery component.yes
labels_to_copylist(string)List of labels to copy from discovered targets to metrics. If empty, all labels are copied.no
metrics_match_labelstringThe label from incoming metrics to match against discovered targets, for example "service_name".no

If not provided, the metrics_match_label attribute defaults to the value of target_match_label.

Blocks

The prometheus.enrich component doesn’t support any blocks. You can configure this component with arguments.

Exports

The following values are exported:

NameTypeDescription
receiverMetricsReceiverThe input receiver where samples are sent to be enriched.

Debug information

prometheus.enrich 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_target_cache_size (gauge): The number of targets in the targets list.

Example

Enrich metrics from prometheus.scrape

The following example shows how the prometheus.enrich enriches incoming metrics from prometheus.scrape.default, using HTTP discovery, and forwards the results to prometheus.remote_write.default component:

alloy
discovery.http "default" {
    url = "http://network-inventory.example.com/prometheus_sd"
}

prometheus.scrape "default" {
  targets = [
    {"__address__" = "example-app:9001"},
  ]

  forward_to = [prometheus.enrich.default.receiver]
}

prometheus.enrich "default" {
	targets = discovery.http.default.targets

	target_match_label = "hostname"

	forward_to = [prometheus.remote_write.default.receiver]
}

prometheus.remote_write "default" {
  endpoint {
    url = "http://mimir:9009/api/v1/push"
  }
}

Enrich metrics from prometheus.receive_http

The following example shows how the prometheus.enrich enriches incoming metrics from prometheus.receive_http.default, using HTTP discovery, and forwards the results to prometheus.remote_write.default component:

alloy
discovery.file "network_devices" {  
   files = ["/etc/alloy/devices.json"]  
}  
  
prometheus.receive_http "default" {
  http {
    listen_address = "0.0.0.0"
    listen_port = 9999
  }
  
  forward_to = [prometheus.enrich.default.receiver]
}

prometheus.enrich "default" {  
    targets = discovery.file.network_devices.targets  
  
    target_match_label = "hostname"  
    
    forward_to = [prometheus.remote_write.default.receiver]  
}

prometheus.remote_write "default" {  
  endpoint {  
    url = "http://mimir:9009/api/v1/push"    
  }    
}

Compatible components

prometheus.enrich can accept arguments from the following components:

prometheus.enrich has exports that can be consumed by the following components:

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.