---
title: Work with Prometheus summaries
description: Use Flux to query and transform Prometheus summary metrics stored in InfluxDB. A summary samples observations, e.g. request durations and response sizes. While it also provides a total count of observations and a sum of all observed values, it calculates configurable quantiles over a sliding time window.
url: https://docs.influxdata.com/flux/v0/prometheus/metric-types/summary/
estimated_tokens: 1060
product: Flux
version: v0
publisher: InfluxData
canonical: https://docs.influxdata.com/flux/v0/prometheus/metric-types/summary/
date: '2023-11-06T17:08:22-07:00'
lastmod: '2023-11-06T17:08:22-07:00'
---

Use Flux to query and transform Prometheus **summary** metrics stored in InfluxDB.

>
>
> A *summary* samples observations (usually things like request durations and response sizes).
> While it also provides a total count of observations and a sum of all observed
> values, it calculates configurable quantiles over a sliding time window.
>
>
>
> [Prometheus metric types](https://prometheus.io/docs/concepts/metric_types/#summary)
>
>

##### Example summary metric in Prometheus data

```sh
# HELP task_executor_run_duration The duration in seconds between a run starting and finishing.
# TYPE task_executor_run_duration summary
example_summary_duration{label="foo",quantile="0.5"} 4.147907251
example_summary_duration{label="foo",quantile="0.9"} 4.147907251
example_summary_duration{label="foo",quantile="0.99"} 4.147907251
example_summary_duration_sum{label="foo"} 2701.367126714001
example_summary_duration_count{label="foo"} 539
```

The examples below include example data collected from the **InfluxDB OSS 2.x `/metrics` endpoint**and stored in InfluxDB.

#### Prometheus metric parsing formats

Query structure depends on the [Prometheus metric parsing format](/influxdb/v2/reference/prometheus-metrics/)used to scrape the Prometheus metrics.
Select the appropriate metric format version below.

* [Visualize summary metric quantile values](#visualize-summary-metric-quantile-values)
* [Derive average values from a summary metric](#derive-average-values-from-a-summary-metric)

## Visualize summary metric quantile values

Prometheus summary metrics provide quantile values that can be visualized without modification.

#### Metric version 2 ####

1. Filter by the `prometheus` measurement.
2. Filter by your **Prometheus metric name** field.

```js
from(bucket: "example-bucket")
    |> range(start: -1m)
    |> filter(fn: (r) => r._measurement == "prometheus")
    |> filter(fn: (r) => r._field == "go_gc_duration_seconds")
```

1. Filter by your **Prometheus metric name** measurement.
2. Filter out the `sum` and `count` fields.

```js
from(bucket: "example-bucket")
    |> range(start: -1m)
    |> filter(fn: (r) => r._measurement == "go_gc_duration_seconds")
    |> filter(fn: (r) => r._field != "count" and r._field != "sum")
```

<img alt="Visualize Prometheus summary quantiles" src="/img/flux/0-x-prometheus-summary-quantiles.png" width="641">

## Derive average values from a summary metric

Use the **sum** and **count** values provided in Prometheus summary metrics to
derive an average summary value.

#### Metric version 2 ####

1. Filter by the `prometheus` measurement.
2. Filter by the `<metric_name>_count` and `<metric_name>_sum` fields.
3. Use [`pivot()`](/flux/v0/stdlib/universe/pivot/) to pivot fields into
   columns based on time. Each row then contains a `<metric_name>_count` and`<metric_name>_sum` column.
4. Divide the `<metric_name>_sum` column by the `<metric_name>_count` column to
   produce a new `_value`.

```js
from(bucket: "example-bucket")
    |> range(start: -1m)
    |> filter(fn: (r) => r._measurement == "prometheus")
    |> filter(fn: (r) => r._field == "go_gc_duration_seconds_count" or r._field == "go_gc_duration_seconds_sum")
    |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
    |> map(fn: (r) => ({r with _value: r.go_gc_duration_seconds_sum / r.go_gc_duration_seconds_count}))
```

1. Filter by your **Prometheus metric name** measurement.
2. Filter by the `count` and `sum` fields.
3. Use [`pivot()`](/flux/v0/stdlib/universe/pivot/) to pivot fields into columns.
   Each row then contains a `count` and `sum` column.
4. Divide the `sum` column by the `count` column to produce a new `_value`.

```js
from(bucket: "example-bucket")
    |> range(start: -1m)
    |> filter(fn: (r) => r._measurement == "go_gc_duration_seconds")
    |> filter(fn: (r) => r._field == "count" or r._field == "sum")
    |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
    |> map(fn: (r) => ({ r with _value: r.sum / r.count }))
```

#### Related

* [Prometheus metric types](https://prometheus.io/docs/concepts/metric_types/)
* [Prometheus metric parsing formats](/influxdb/v2/reference/prometheus-metrics/)

[prometheus](/flux/v0/tags/prometheus/)
