Skip to content

[receiver/prometheusremotewrite] Support METRIC_TYPE_UNSPECIFIED #41840

@grizzlybite

Description

@grizzlybite

Component(s)

receiver/prometheusremotewrite

What happened?

Description

Hi! I'm trying to forward metrics from Prometheus to OpenTelemetry Collector using the prometheusremotewritereceiver. Prometheus is receiving metrics via remote_write from several sources (mainly vmagent and prometheus-agent), then forwarding them to Otel Collector.

flowchart TD
    vma1(vmagent-01)
    vma2(vmagent-02)
    pa1(prometheus-agent-01)
    prometheus(Prometheus)
    otg(Otel Collector Gateway)
    prwr["Prometheus Remote<br>Write Receiver"]
    vma1 -->|Remote Write| prometheus
    vma2 -->|Remote Write| prometheus
    pa1  -->|Remote Write| prometheus
    prometheus -->|Remote Write| prwr
    prwr <--> otg
Loading

However, when Prometheus sends these metrics to Otel Collector, the collector rejects them with the following error: METRIC_TYPE_UNSPECIFIED

This happens for many metrics — the rejected type is always METRIC_TYPE_UNSPECIFIED

Steps to Reproduce

Configuration

Prometheus config:

global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

remote_write:
  - url: "http://192.168.138.91:32411/api/v1/write"
    name: "Remote write to Otelcol gateway"
    protobuf_message: io.prometheus.write.v2.Request

Collector config (relevant part):

receivers:
  prometheusremotewrite:
    endpoint: 192.168.138.91:32411
  otlp:
    protocols:
      grpc:
        endpoint: 192.168.138.91:5555
      http:
        endpoint: 192.168.138.91:32412

Expected Result

Metrics should be successfully forwarded from Prometheus to the OpenTelemetry Collector, even if the metrics were originally written to Prometheus via remote_write (e.g., by prometheus-agent or vmagent).

Actual Result

The prometheusremotewritereceiver component rejects incoming metrics from Prometheus with METRIC_TYPE_UNSPECIFIED errors.

Example log output from Prometheus:

level=ERROR component=remote remote_name="Remote write to Otelcol gateway"
err="server returned HTTP status 400 Bad Request:
unsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"angie_slabs_pages_slots_used\""

Let me know if you’d like me to provide full debug logs or a test environment to reproduce the issue.

Collector version

0.131.1

Environment information

Environment

OS: Ubuntu 24.04
Compiler: go version go1.24.4 linux/amd64

OpenTelemetry Collector configuration

Log output

Aug 07 13:33:01 test-monit-01 prometheus[186361]: time=2025-08-07T13:33:01.437+03:00 level=ERROR source=queue_manager.go:1668 msg="non-recoverable error" component=remote remote_name="Remote write to Otelcol gateway" url=http://192.168.138.91:32411/api/v1/write failedSampleCount=3995 failedHistogramCount=0 failedExemplarCount=0 err="server returned HTTP status 400 Bad Request: unsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_mtu_bytes\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_mtu_bytes\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_mtu_bytes\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_mtu_bytes\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_mtu_bytes\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_name_assign_type\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_name_assign_type\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_name_assign_type\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_name_assign_type\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_name_assign_type\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_network_name_assign_type\"\nunsupported metric type \"METRIC_TYPE"

Aug 07 13:35:12 test-monit-01 prometheus[186361]: time=2025-08-07T13:35:12.942+03:00 level=ERROR source=queue_manager.go:1668 msg="non-recoverable error" component=remote remote_name="Remote write to Otelcol gateway" url=http://192.168.138.91:32411/api/v1/write failedSampleCount=3995 failedHistogramCount=0 failedExemplarCount=0 err="server returned HTTP status 400 Bad Request: unsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_filesystem_info\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_filesystem_info\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_filesystem_info\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_filesystem_info\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_filesystem_info\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_flush_requests_time_seconds_total\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_flush_requests_time_seconds_total\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_flush_requests_time_seconds_total\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_flush_requests_time_seconds_total\"\nunsupported metric type \"METRIC_TYPE_UNSPECIFIED\" for metric \"node_disk_flush_requests_time_seconds_total\"\nunsupported metric type \"METRIC_TYPE_UNSPECI"

Additional context

Additional context

In Prometheus, when using remote_write, metric types are not explicitly defined — they are inferred based on the metric’s structure and behavior. This might be the reason why the receiver is unable to handle them.

As far as I understand, the OpenTelemetry Collector might expect the metric type to be explicitly set, which Prometheus does not do for remote_write — especially if the metrics were ingested into Prometheus via remote_write themselves (e.g., from prometheus-agent, vmagent, etc.)

Tip

React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions