---
title: "otelcol.exporter.prometheus | Grafana Agent documentation"
description: "Learn about otelcol.exporter.prometheus"
---

# otelcol.exporter.prometheus

`otelcol.exporter.prometheus` accepts OTLP-formatted metrics from other `otelcol` components, converts metrics to Prometheus-formatted metrics, and forwards the resulting metrics to `prometheus` components.

> **NOTE**: `otelcol.exporter.prometheus` is a custom component unrelated to the `prometheus` exporter from OpenTelemetry Collector.
> 
> Conversion of metrics are done according to the OpenTelemetry [Metrics Data Model](https://opentelemetry.io/docs/reference/specification/metrics/data-model/) specification.

Multiple `otelcol.exporter.prometheus` components can be specified by giving them different labels.

## Usage

Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```alloy
otelcol.exporter.prometheus "LABEL" {
  forward_to = [...]
}
```

## Arguments

`otelcol.exporter.prometheus` supports the following arguments:

Expand table

| Name                               | Type                    | Description                                                       | Default | Required |
|------------------------------------|-------------------------|-------------------------------------------------------------------|---------|----------|
| `include_target_info`              | `boolean`               | Whether to include `target_info` metrics.                         | `true`  | no       |
| `include_scope_info`               | `boolean`               | Whether to include `otel_scope_info` metrics.                     | `false` | no       |
| `include_scope_labels`             | `boolean`               | Whether to include additional OTLP labels in all metrics.         | `true`  | no       |
| `add_metric_suffixes`              | `boolean`               | Whether to add type and unit suffixes to metrics names.           | `true`  | no       |
| `gc_frequency`                     | `duration`              | How often to clean up stale metrics from memory.                  | `"5m"`  | no       |
| `forward_to`                       | `list(MetricsReceiver)` | Where to forward converted Prometheus metrics.                    |         | yes      |
| `resource_to_telemetry_conversion` | `boolean`               | Whether to convert OTel resource attributes to Prometheus labels. | `false` | no       |

By default, OpenTelemetry resources are converted into `target_info` metrics. OpenTelemetry instrumentation scopes are converted into `otel_scope_info` metrics. Set the `include_scope_info` and `include_target_info` arguments to `false`, respectively, to disable the custom metrics.

When `include_scope_labels` is `true` the `otel_scope_name` and `otel_scope_version` labels are added to every converted metric sample.

When `include_target_info` is true, OpenTelemetry Collector resources are converted into `target_info` metrics.

> Note
> 
> OTLP metrics can have a lot of resource attributes. Setting `resource_to_telemetry_conversion` to `true` would convert all of them to Prometheus labels, which may not be what you want. Instead of using `resource_to_telemetry_conversion`, most users need to use `otelcol.processor.transform` to convert OTLP resource attributes to OTLP metric datapoint attributes before using `otelcol.exporter.prometheus`. See [Creating Prometheus labels from OTLP resource attributes](#creating-prometheus-labels-from-otlp-resource-attributes) for an example.

## Exported fields

The following fields are exported and can be referenced by other components:

Expand table

| Name    | Type               | Description                                                      |
|---------|--------------------|------------------------------------------------------------------|
| `input` | `otelcol.Consumer` | A value that other components can use to send telemetry data to. |

`input` accepts `otelcol.Consumer` data for metrics. Other telemetry signals are ignored.

Metrics sent to the `input` are converted to Prometheus-compatible metrics and are forwarded to the `forward_to` argument.

The following are dropped during the conversion process:

- Metrics that use the delta aggregation temporality

## Component health

`otelcol.exporter.prometheus` is only reported as unhealthy if given an invalid configuration.

## Debug information

`otelcol.exporter.prometheus` does not expose any component-specific debug information.

## Example

## Basic usage

This example accepts metrics over OTLP and forwards it using `prometheus.remote_write`:

Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```alloy
otelcol.receiver.otlp "default" {
  grpc {}

  output {
    metrics = [otelcol.exporter.prometheus.default.input]
  }
}

otelcol.exporter.prometheus "default" {
  forward_to = [prometheus.remote_write.mimir.receiver]
}

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

## Create Prometheus labels from OTLP resource attributes

This example uses `otelcol.processor.transform` to add extra `key1` and `key2` OTLP metric datapoint attributes from the `key1` and `key2` OTLP resource attributes.

`otelcol.exporter.prometheus` then converts `key1` and `key2` to Prometheus labels along with any other OTLP metric datapoint attributes.

This avoids the need to set `resource_to_telemetry_conversion` to `true`, which could have created too many unnecessary metric labels.

Alloy ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```alloy
otelcol.receiver.otlp "default" {
  grpc {}

  output {
    metrics = [otelcol.processor.transform.default.input]
  }
}

otelcol.processor.transform "default" {
  error_mode = "ignore"

  metric_statements {
    context = "datapoint"

    statements = [
      `set(attributes["key1"], resource.attributes["key1"])`,
      `set(attributes["key2"], resource.attributes["key2"])`,
    ]
  }

  output {
    metrics = [otelcol.exporter.prometheus.default.input]
  }
}

otelcol.exporter.prometheus "default" {
  forward_to = [prometheus.remote_write.mimir.receiver]
}

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

## Compatible components

`otelcol.exporter.prometheus` can accept arguments from the following components:

- Components that export [Prometheus `MetricsReceiver`](../../compatibility/#prometheus-metricsreceiver-exporters)

`otelcol.exporter.prometheus` has exports that can be consumed by the following components:

- Components that consume [OpenTelemetry `otelcol.Consumer`](../../compatibility/#opentelemetry-otelcolconsumer-consumers)

> 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.
