Scrape Prometheus native histograms

Requires Chronosphere Collector version 0.107.0 or greater.

To scrape Prometheus native histograms, you must configure the Collector to enable native histogram scraping.

Observability Platform persists Prometheus native histograms as a histogram metric type. You can define aggregation rules to control histogram costs. For more information, see supported histogram aggregation operations.

Histogram persisted writes, persisted cardinality, and matched writes consume Histogram Metric License capacity.

Backward compatibility

Prometheus clients don't support exposing native histograms in the text-based exposition format. To scrape native histograms, Chronosphere Collector negotiates the Protobuf format for scraping.

The change to scrape the Protobuf format can cause problems for backward compatibility. Depending on the Prometheus client, the value for classic histogram le labels and summary quantile labels appear as an integer in text format (le="50") and a decimal number (le="50.0") in Protobuf format.

Because these values are strings, queries that filter by the integer label value stop working when the le values are in a decimal number format. For more information, see the Prometheus documentation (opens in a new tab).

The Chronosphere Collector provides backward compatibility by dual-scraping the text-based format and the Protobuf format. The Collector first scrapes the Protobuf exposition and keeps only native histogram metrics. The Collector then scrapes the text-based format for all other metrics to preserve the le value format in histogram and quantile time series. Dual-scraping ensures backward compatibility and adds only minor overhead.

Migrate from legacy Prometheus histograms to native histograms

The Prometheus Java and Go clients support Prometheus native histograms. Because native histograms are an experimental feature, use the latest version of the Prometheus Java and Go clients for the best experience.

Prometheus client configuration

The Prometheus Java client maintains both classic and native histogram representation (opens in a new tab) by default. It exposes the legacy histogram representation in the text-based format and the native histogram representation in the Protobuf format.

The Go Prometheus client can also expose both legacy and native histogram representations. However, unlike the Java client it requires you to opt-in to each bucket layout. To make the classic histogram available for scraping, users must explicitly define the custom bucket layouts (opens in a new tab). To make the native histogram representation available, users must set a value for NativeHistogramBucketFactor (opens in a new tab).

The Buckets field configures legacy histograms. To collect exponential histograms, use the NativeHistogramBucketFactor parameter.

Chronosphere Collector configuration

Start by configuring the Chronosphere Collector to collect both the legacy and native histogram representations. After you've built up enough historical data and modified your queries to use native histograms, you can modify the Collector configuration to scrape only the Protobuf format.

Collect both legacy and native histogram representations for at least as long as your query time windows. For example, if you have service-level objective queries with a 30-day look-back period, collect both representations for at least 31 days before changing your settings to scrape only the Protobuf format.

Recommended initial configuration

Chronosphere recommends the following Collector configuration when initially transitioning from legacy histograms to native histograms. The configuration sets up the Collector to:

  • Negotiate scraping both the Protobuf and text-based expositions.
  • Scrape native histograms from the Protobuf exposition when present.
  • Scrape all other metrics from the text-based exposition.
  • Send both the legacy and native histogram representations to Observability Platform, when a histogram exists in both formats.
scrape:
  nativeHistograms:
    enabled: true                    # Enables scraping native histograms. Defaults to false.
  defaults:
    scrapeClassicHistograms: true    # Sends both the classic and native histogram
                                     # representation when both are present. Defaults to false.

Fully-migrated configuration

After you've collected enough histogram data and have modified your queries to query the native histogram representation, you can configure the Collector to no longer send the legacy histogram representation.

The following configuration configures the Collector to:

  • Negotiate scraping both the Protobuf and text-based expositions.
  • Scrape all metrics from the Protobuf exposition when present.
scrape:
  nativeHistograms:
    enabled: true                    # Enables scraping native histograms. Defaults to false.