文档文档

抓取 Prometheus 指标

要使用 Flux 抓取来自 HTTP 可访问端点的 Prometheus 格式的指标

  1. 导入 experimental/prometheus
  2. 使用 prometheus.scrape 并指定要从中抓取指标的 url
import "experimental/prometheus"

prometheus.scrape(url: "http://localhost:8086/metrics")

输出结构

prometheus.scrape() 返回一个包含以下列的 表流

表按 _measurement_field标签列 分组。

带有下划线前缀的列

带有下划线 (_) 前缀的列被认为是“系统”列。一些 Flux 函数需要这些列才能正常工作。

Prometheus 查询结果示例

以下是从 InfluxDB OSS 2.x /metrics 端点抓取的 Prometheus 指标示例

# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
go_memstats_alloc_bytes_total 1.42276424e+09
# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.
# TYPE go_memstats_buck_hash_sys_bytes gauge
go_memstats_buck_hash_sys_bytes 5.259247e+06
# HELP task_executor_run_latency_seconds Records the latency between the time the run was due to run and the time the task started execution, by task type
# TYPE task_executor_run_latency_seconds histogram
task_executor_run_latency_seconds_bucket{task_type="system",le="0.25"} 4413
task_executor_run_latency_seconds_bucket{task_type="system",le="0.5"} 11901
task_executor_run_latency_seconds_bucket{task_type="system",le="1"} 12565
task_executor_run_latency_seconds_bucket{task_type="system",le="2.5"} 12823
task_executor_run_latency_seconds_bucket{task_type="system",le="5"} 12844
task_executor_run_latency_seconds_bucket{task_type="system",le="10"} 12864
task_executor_run_latency_seconds_bucket{task_type="system",le="+Inf"} 74429
task_executor_run_latency_seconds_sum{task_type="system"} 4.256783538679698e+11
task_executor_run_latency_seconds_count{task_type="system"} 74429
# HELP task_executor_run_duration The duration in seconds between a run starting and finishing.
# TYPE task_executor_run_duration summary
task_executor_run_duration{taskID="00xx0Xx0xx00XX0x0",task_type="threshold",quantile="0.5"} 5.178160855
task_executor_run_duration{taskID="00xx0Xx0xx00XX0x0",task_type="threshold",quantile="0.9"} 5.178160855
task_executor_run_duration{taskID="00xx0Xx0xx00XX0x0",task_type="threshold",quantile="0.99"} 5.178160855
task_executor_run_duration_sum{taskID="00xx0Xx0xx00XX0x0",task_type="threshold"} 2121.9758301650004
task_executor_run_duration_count{taskID="00xx0Xx0xx00XX0x0",task_type="threshold"} 570

当被 Flux 抓取时,这些指标返回以下表流

_time_measurementurl_field_value
2021-01-01T00:00:00Zprometheushttp://localhost:8086/metricsgo_memstats_alloc_bytes_total1422764240.0
_time_measurementurl_field_value
2021-01-01T00:00:00Zprometheushttp://localhost:8086/metricsgo_memstats_buck_hash_sys_bytes5259247.0
_time_measurementtask_typeurlle_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metrics0.25task_executor_run_latency_seconds4413
_time_measurementtask_typeurlle_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metrics0.5task_executor_run_latency_seconds11901
_time_measurementtask_typeurlle_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metrics1task_executor_run_latency_seconds12565
_time_measurementtask_typeurlle_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metrics2.5task_executor_run_latency_seconds12823
_time_measurementtask_typeurlle_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metrics5task_executor_run_latency_seconds12844
_time_measurementtask_typeurlle_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metrics+Inftask_executor_run_latency_seconds74429
_time_measurementtask_typeurl_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metricstask_executor_run_latency_seconds_sum425678353867.9698
_time_measurementtask_typeurl_field_value
2021-01-01T00:00:00Zprometheussystemhttp://localhost:8086/metricstask_executor_run_latency_seconds_count74429
_time_measurementtask_typetaskIDurlquantile_field_value
2021-01-01T00:00:00Zprometheusthreshold00xx0Xx0xx00XX0x0http://localhost:8086/metrics0.5task_executor_run_duration5.178160855
_time_measurementtask_typetaskIDurlquantile_field_value
2021-01-01T00:00:00Zprometheusthreshold00xx0Xx0xx00XX0x0http://localhost:8086/metrics0.9task_executor_run_duration5.178160855
_time_measurementtask_typetaskIDurlquantile_field_value
2021-01-01T00:00:00Zprometheusthreshold00xx0Xx0xx00XX0x0http://localhost:8086/metrics0.99task_executor_run_duration5.178160855
_time_measurementtask_typetaskIDurl_field_value
2021-01-01T00:00:00Zprometheusthreshold00xx0Xx0xx00XX0x0http://localhost:8086/metricstask_executor_run_duration_sum2121.9758301650004
_time_measurementtask_typetaskIDurl_field_value
2021-01-01T00:00:00Zprometheusthreshold00xx0Xx0xx00XX0x0http://localhost:8086/metricstask_executor_run_duration_count570

抓取的 Prometheus 指标的不同数据结构

TelegrafInfluxDB 提供了抓取 Prometheus 指标并将其存储在 InfluxDB 中的工具。根据您用于抓取指标的工具和配置,生成的数据结构可能与 上面描述的 prometheus.scrape() 返回的结构不同。

有关存储在 InfluxDB 中的抓取的 Prometheus 指标的不同数据结构的信息,请参阅 InfluxDB Prometheus 指标解析格式

将 Prometheus 指标写入 InfluxDB

要将抓取的 Prometheus 指标写入 InfluxDB

  1. 使用 prometheus.scrape 来抓取 Prometheus 指标。
  2. 使用 to() 将抓取的指标写入 InfluxDB。
import "experimental/prometheus"

prometheus.scrape(url: "http://example.com/metrics")
    |> to(bucket: "example-bucket", host: "http://localhost:8086", org: "example-org", token: "mYsuP3R5eCR37t0K3n")

以固定间隔将 Prometheus 指标写入 InfluxDB

要抓取 Prometheus 指标并以固定间隔将其写入 InfluxDB,请在 InfluxDB 任务中抓取 Prometheus 指标。

import "experimental/prometheus"

option task = {name: "Scrape Prometheus metrics", every: 10s}

prometheus.scrape(url: "http://example.com/metrics")
    |> to(bucket: "example-bucket")

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看