文档文档

使用 Prometheus Summary

使用 Flux 查询和转换存储在 InfluxDB 中的 Prometheus summary 指标。

Summary 采样观测值(通常是请求持续时间和响应大小等)。虽然它也提供观测值的总计数和所有观测值的总和,但它会计算滑动时间窗口上的可配置分位数。

Prometheus 指标类型

Prometheus 数据中的 Summary 指标示例
# 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

以下示例包含从 InfluxDB OSS 2.x /metrics 端点 收集并存储在 InfluxDB 中的示例数据。

Prometheus 指标解析格式

查询结构取决于用于抓取 Prometheus 指标的 Prometheus 指标解析格式。 在下面选择适当的指标格式版本。

可视化 Summary 指标分位数值

Prometheus Summary 指标提供无需修改即可可视化的分位数值。

  1. prometheus measurement 过滤。
  2. 按您的 Prometheus 指标名称 字段过滤。
from(bucket: "example-bucket")
    |> range(start: -1m)
    |> filter(fn: (r) => r._measurement == "prometheus")
    |> filter(fn: (r) => r._field == "go_gc_duration_seconds")
  1. 按您的 Prometheus 指标名称 measurement 过滤。
  2. 滤除 sumcount 字段。
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")
Visualize Prometheus summary quantiles

从 Summary 指标导出平均值

使用 Prometheus Summary 指标中提供的 sumcount 值来导出平均 Summary 值。

  1. prometheus measurement 过滤。
  2. <metric_name>_count<metric_name>_sum 字段过滤。
  3. 使用 pivot() 将字段透视为基于时间的列。 然后,每行都包含 <metric_name>_count<metric_name>_sum 列。
  4. <metric_name>_sum 列除以 <metric_name>_count 列以生成新的 _value
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. 按您的 Prometheus 指标名称 measurement 过滤。
  2. countsum 字段过滤。
  3. 使用 pivot() 将字段透视为列。 然后,每行都包含 countsum 列。
  4. sum 列除以 count 列以生成新的 _value
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 }))

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 将进入维护模式。 您可以继续像现在一样使用它,而无需对代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。 更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时的数据引擎,可以实时收集和处理数据,并将其持久化到本地磁盘或对象存储。 InfluxDB 3 Enterprise 以 Core 的基础为构建,增加了高可用性、读取副本、增强的安全性以及数据压缩,从而实现更快的查询和优化的存储。 InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看