使用 Prometheus Summary
使用 Flux 查询和转换存储在 InfluxDB 中的 Prometheus summary 指标。
Summary 采样观测值(通常是请求持续时间和响应大小等)。虽然它也提供观测值的总计数和所有观测值的总和,但它会计算滑动时间窗口上的可配置分位数。
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 指标提供无需修改即可可视化的分位数值。
- 按
prometheus
measurement 过滤。 - 按您的 Prometheus 指标名称 字段过滤。
from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._measurement == "prometheus")
|> filter(fn: (r) => r._field == "go_gc_duration_seconds")
- 按您的 Prometheus 指标名称 measurement 过滤。
- 滤除
sum
和count
字段。
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")

从 Summary 指标导出平均值
使用 Prometheus Summary 指标中提供的 sum 和 count 值来导出平均 Summary 值。
- 按
prometheus
measurement 过滤。 - 按
<metric_name>_count
和<metric_name>_sum
字段过滤。 - 使用
pivot()
将字段透视为基于时间的列。 然后,每行都包含<metric_name>_count
和<metric_name>_sum
列。 - 将
<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}))
- 按您的 Prometheus 指标名称 measurement 过滤。
- 按
count
和sum
字段过滤。 - 使用
pivot()
将字段透视为列。 然后,每行都包含count
和sum
列。 - 将
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 }))
此页面是否对您有帮助?
感谢您的反馈!