InfluxDB 2.0的Prometheus远程写入支持
由 Samantha Wang / 产品, 用例, 开发者
2021年6月28日
导航至
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实例。
设置Telegraf以开始监听Prometheus远程写入指标
如果您是Telegraf及其插件生态系统的初学者,请查看此入门指南和视频,了解如何设置Telegraf以及将其配置为向InfluxDB Cloud发送数据。
我们将使用Telegraf作为您的Prometheus远程写入指标的收集器。要开始远程写入Prometheus指标,您将使用以下内容
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远程写入指标
将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 笔记本,供您开始查询和探索数据。
将InfluxDB 1.x中的Prometheus远程写入指标迁移到2.0
对于那些一直停留在InfluxDB 1.x的人,因为他们一直在等待2.0中的Prometheus远程写入支持,现在终于轮到你了!
如前所述,如果您在Telegraf解析器1.19之前远程编写Prometheus指标,您很可能正在使用API写入1.x,并且由于API不支持,您无法迁移到2.0。
从您的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频道或社区网站联系我们。