InfluxDB 2.0的Prometheus远程写入支持

导航至

InfluxDB 1.x版本中,我们提供了对Prometheus远程写入API的支持。InfluxDB 2.0的发布并不提供对该API的支持。然而,随着Telegraf 1.19的发布,Telegraf现在包含了一个Prometheus远程写入解析器,可以用于摄取这些指标并将它们输出到InfluxDB 1.x或InfluxDB 2.0。

如何使用Telegraf将Prometheus远程写入指标发送到InfluxDB

我将介绍如何将您的Prometheus远程写入指标存储在InfluxDB Cloud中,但这种方法同样适用于InfluxDB 2.x。我们将首先设置Telegraf以开始监听指标,并确保您的Prometheus服务器已配置为开始将数据远程写入Telegraf实例。

Data flow of Prometheus remote write metrics from Prometheus server into InfluxDB Cloud via Telegraf

通过Telegraf从Prometheus服务器到InfluxDB Cloud的Prometheus远程写入指标的数据流

设置Telegraf以开始监听Prometheus远程写入指标

如果您是Telegraf及其插件生态系统的初学者,请查看此入门指南视频,了解如何设置Telegraf以及将其配置为向InfluxDB Cloud发送数据。

我们将使用Telegraf作为您的Prometheus远程写入指标的收集器。要开始远程写入Prometheus指标,您将使用以下内容

  1. HTTP Listener v2输入插件
  2. Prometheus远程写入解析器
  3. InfluxDB v2输出插件

Telegraf包含许多通用插件,支持解析输入数据,使用可配置的解析器,将其转换为指标。该Prometheus远程写入解析器将Prometheus远程写入样本直接转换为Telegraf指标

您指定要使用的解析器,适用于包含 data_format 选项的任何输入插件。我将介绍如何使用 Prometheus Remote Write 解析器,特别是与 inputs.http_listener_v2 一起使用,以开始收集 Prometheus 指标。

设置您的 HTTP 监听器的端口号以及监听路径

HTTP Listener v2 插件监听通过 HTTP 发送的指标,这是我们设置 Telegraf 以接收 Prometheus 远程写入指标的方式。在您的 HTTP Listener v2 输入插件中,您通过指定 Telegraf 要监听的端口号来创建一个端点。您将此端口号设置在 Telegraf 配置文件中的 service_address 选项内,作为 HTTP Listener v2 插件配置的一部分。在本博文中,我们将使用端口号 :1234。接下来,您将设置想要监听的路径,并在 path 中进行配置;我将设置我的路径为 /receive

解析器配置相当简单,因为没有额外的配置选项来开始读取 Prometheus 远程写入样本。一旦您在 HTTP Listener 插件中将 data_format = "prometheusremotewrite"remote_write URL 信息一起设置,您应该就可以开始了!

在您的 Telegraf 配置文件中,您的 HTTP Listener v2 插件定义看起来可能如下所示

[[inputs.http_listener_v2]]
 ## Address and port to host HTTP listener on
 service_address = ":1234"
 ## Path to listen to.
 path = "/receive"
 ## Data format to consume.
 data_format = "prometheusremotewrite"

添加您的 InfluxDB 输出插件

要将数据发送到您的 InfluxDB Cloud 实例,您需要添加 InfluxDB v2 输出插件 并配置您的 URL、组织、桶和令牌(我们建议您不要直接在 telegraf.conf 中存储令牌,而是将它们存储为 环境变量)。

InfluxDB Cloud 输出插件的示例

[[outputs.influxdb_v2]]
  urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"]
  token = "$INFLUX_TOKEN"
  organization = "example-org"
  bucket = "example-bucket"

Telegraf 小贴士:对于设置 Telegraf 和故障排除,同时将您的指标写入输出数据库和 STDOUT 也很有帮助。只需将 outputs.file 添加到您的配置中。

运行 Telegraf 以开始监听指标

一旦您的配置就绪,您可以使用以下命令运行 Telegraf 以启动它

telegraf --config /path/to/custom/telegraf.conf

Telegraf 运行后,您应该看到 Telegraf 正在您设置的端口号上监听指标。

2021-06-17T17:52:04Z I! Starting Telegraf 1.19.0
2021-06-17T17:52:04Z I! Loaded inputs: http_listener_v2
2021-06-17T17:52:04Z I! Loaded aggregators:
2021-06-17T17:52:04Z I! Loaded processors:
2021-06-17T17:52:04Z I! Loaded outputs: file influxdb_v2
2021-06-17T17:52:04Z I! Tags enabled: host=MBP15-SWANG.local
2021-06-17T17:52:04Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"MBP15-SWANG.local", Flush Interval:10s
2021-06-17T17:52:04Z I! [inputs.http_listener_v2] Listening on [::]:7070

您将不会看到指标,直到您启动 Prometheus 并将 Prometheus 配置文件设置为远程写入。

设置您的 Prometheus 服务器

如果您还没有设置 Prometheus 服务器,请参阅 Prometheus 的 “入门” 文档,了解如何启动 Prometheus 以开始自监控。

将您的 Telegraf 端点添加到 Prometheus 配置文件中的 remote_write 部分

在您的配置文件(prometheus.yml)中,添加一个包含您在 HTTP Listener v2 插件中设置的 Telegraf 端点 URL 的 remote_write 部分。

您使用的 URL 应该类似于上面步骤中指定的 http://+service_address+path

remote_write 配置示例

remote_write:
 - url: "https://127.0.0.1:1234/receive"

我的整个 prometheus.yml

global:
  scrape_interval:     15s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - static_configs:
    - targets:
rule_files:
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

remote_write:
  - url: "https://127.0.0.1:1234/receive"

开始将 Prometheus 指标远程写入 Telegraf

使用更新的配置文件启动 Prometheus。

./prometheus --config.file=prometheus.yml

Telegraf 整个时间都在监听您设置的端口号上的指标。一旦 Prometheus 启动,Telegraf 将接收这些指标并将它们发送到 InfluxDB Cloud。

在 InfluxDB Cloud 中查看指标

现在您已经运行了Telegraf和Prometheus,您可以在InfluxDB Cloud中查看您的数据。从那里,您可以使用Flux开始创建仪表板或查询数据。

笔记本中查看您的Prometheus远程写入指标

Prometheus remote write metrics in Notebooks

数据探索器中查看您的Prometheus远程写入指标

Prometheus remote write metrics in Data Explorer

将Prometheus远程写入写入与InfluxDB 1.x的架构匹配

如果您希望与InfluxDB 1.x的Prometheus远程写入架构保持一致,您需要快速修改您的配置。Prometheus远程写入解析器与Telegraf中我们的Prometheus解析器的metric_version = 2 格式相匹配。我们建议Telegraf用户在使用任何类型的Prometheus插件时使用此设置,以便正确地往返指标。

如果您希望发送与InfluxDB 1.x架构相匹配的数据,您需要添加一个包含此脚本Starlark处理器。如果您不熟悉,Starlark是一种轻量级的类似Python的语言,用于快速转换Telegraf中的记录。您可能需要编辑下面的示例脚本以适应您的特定情况。

您的配置(不包括输出插件)应如下所示

[[inputs.http_listener_v2]]
  ## Address and port to host HTTP listener on
  service_address = ":1234"

  ## Path to listen to.
  path = "/receive"

  ## Data format to consume.
  data_format = "prometheusremotewrite"
[[processors.starlark]]
  ## The Starlark source can be set as a string in this configuration file, or
  ## by referencing a file containing the script.  Only one source or script
  ## should be set at once.

  ## Source of the Starlark script.
  source = '''
def apply(metric):
   if metric.name == "prometheus_remote_write":
        for k, v in metric.fields.items():
            metric.name = k
            metric.fields["value"] = v
            metric.fields.pop(k)
   return metric
'''

您会注意到在处理器有无的情况下架构的不同。在InfluxDB 1.x中,Prometheus指标名称成为InfluxDB度量。然后Prometheus样本值成为使用值字段键(始终为浮点数)的InfluxDB字段。然后Prometheus标签将成为InfluxDB标签

使用Prometheus远程写入解析器,度量名称是插件名称prometheus_remote_write。字段键是Prometheus指标名称,样本值作为float64。然后Prometheus标签转换为标签。

InfluxDB输出 Telegraf配置 示例输出架构
InfluxDB 2.x [[inputs.http_listener_v2]] data_format = "prometheusremotewrite" + [[outputs.influxdb_v2]] prometheus_remote_write,instance=localhost:9090,job=prometheus scrape_samples_scraped=390 1622840468859000000
InfluxDB 1.x [[inputs.http_listener_v2]] data_format = "prometheusremotewrite" + [[processors.starlark]] + [[outputs.influxdb]] scrape_samples_scraped,instance=localhost:9090,job=prometheus value=390 1622843903859000000(不推荐)

以下是Prometheus远程写入指标1.x架构的视图,作为一个InfluxDB 笔记本,供您开始查询和探索数据。

View of the 1.x schema of Prometheus remote write metrics as an InfluxDB Notebook

将InfluxDB 1.x中的Prometheus远程写入指标迁移到2.0

对于那些一直停留在InfluxDB 1.x的人,因为他们一直在等待2.0中的Prometheus远程写入支持,现在终于轮到你了!

如前所述,如果您在Telegraf解析器1.19之前远程编写Prometheus指标,您很可能正在使用API写入1.x,并且由于API不支持,您无法迁移到2.0。

Data flow of Prometheus remote write metrics into InfluxDB Cloud + InfluxDB 1.x for eventual migration off of InfluxDB 1.x

将Prometheus远程写入指标的数据流到InfluxDB Cloud + InfluxDB 1.x,以便最终迁移离InfluxDB 1.x

从您的Prometheus服务器双向远程写入InfluxDB 1.x和2.0

当您开始将数据远程写入InfluxDB 1.x时,您可能已经配置了您的prometheus.yml,其中包含了运行InfluxDB的端口号。要双向写入InfluxDB 2.0,我们需要在配置中添加一个额外的远程写入端点。这可以通过简单地向remote_write 部分的prometheus.yml添加另一个指向您的Telegraf端点的-url:来完成。

remote_write:
  - url: "https://127.0.0.1:8086/api/v1/prom/write?db=prometheus"
  - url: "https://127.0.0.1:1234/receive"

设置Telegraf以远程写入InfluxDB 2.0的数据

按照“如何使用Telegraf将Prometheus远程写入指标发送到InfluxDB”部分中的步骤进行操作,以开始将数据远程写入InfluxDB 2.0,同时与现有的InfluxDB 1.x实例并行。如果您希望您的指标与InfluxDB 1.x的方案一致,请记住添加Starlark处理器。

验证数据是否流入InfluxDB 2.0

您可以在InfluxDB 2.0中查看和查询指标。请务必查看我们的迁移文档,以确保您的所有仪表板、查询以及1.x中您关心的所有内容也升级到2.0。

逐步迁移离InfluxDB 1.x

一旦您对InfluxDB 2.0中的运行方式满意,您就可以开始迁移离1.x。一旦您从prometheus.yml配置中删除InfluxDB API端点,您将不再向1.x发送数据,而只通过Telegraf远程写入InfluxDB 2.0。

如前所述,以metric_version=2格式(没有Starlark)发送的Prometheus指标是Telegraf用户正确往返指标的推荐选项。除非您正在重用InfluxQL或其他可能导致您的设置中断的类似迁移,否则朝着迁移到该方案的方向努力也非常重要。

注册InfluxDB Cloud并下载Telegraf开始写入!

开始远程写入您的Prometheus指标!下载或升级到Telegraf 1.19,并注册InfluxDB Cloud进行尝试。如果您有任何问题,请随时通过我们的Telegraf GitHub页面InfluxData Slack频道社区网站联系我们。