InfluxDB 2迁移路径:仪器

导航到

InfluxDB 2以及我们的SaaS产品InfluxDB Cloud 2即将推出。在我们完成最后的更新,为您提供应得的InfluxDB 2体验的同时,我们将与您探讨迁移路径。

本文是系列文章之一。本篇将介绍如何使用InfluxDB 1客户端库将现有应用中的仪器迁移到InfluxDB 2,而无需进行代码更改。

官方迁移路径

InfluxDB 2将支持与InfluxDB 1的兼容模式,但这项功能将在今年晚些时候推出——接近InfluxDB 2的第一个GA版本。这意味着您在使用v2时仍然可以有限地使用v1的客户端库。由于目前尚不可用,我们可以通过Telegraf做类似的事情;这正是我今天要讨论的。

但在我们继续之前,让我们先谈谈客户端库。

客户端库

我们的首席技术官保罗·迪克斯之前提到,我们将创建、维护和支持我们自己的官方InfluxDB 2客户端库!虽然GitHub上InfluxData标志下有一些InfluxDB 1的客户端库,但这些通常由外部贡献者维护,API差异很大。对于InfluxDB 2,我们将更积极地参与客户端库的进步和维护。

当然,这些目前也还没有提供;但在2.0版本发布时,我们计划支持dotNet、Go、Java、JS、PHP、Python和Ruby。

那么,在这段时间里,你如何开始为InfluxDB 2仪表化你的应用程序呢?

介绍Telegraf

嗯……很明显,Telegraf无需介绍……但是,很多时候,人们并不完全理解可用的插件范围。例如:你知道Telegraf有一个名为influxdb_listener的输入插件吗?这个插件允许Telegraf提供一个与InfluxDB 1兼容的/write代理。

???? 哇 ????

注意事项

在过于兴奋之前,有一些事情值得注意。首先,这实际上只是/write路径。这不会允许你从InfluxDB读取,如果你使用任何客户端库来读取的话。《code class="language-markup">CREATE DATABASE请求将返回200 OK,但远程InfluxDB服务器实际上并没有执行任何操作;只有Telegraf插件可以确定你可以写入哪个数据库。更多关于这个的细节将在稍后介绍。

迁移路径

让我们深入了解,看看你当前、假定和预计的架构。

Writing to InfluxDB 1<figcaption> 写入InfluxDB 1</figcaption>

简单直接。你在应用程序中使用我们的客户端库,并直接将其写入InfluxDB 1。

现在,我们想要尽可能少地改变。所以,我们不是写入InfluxDB 1,而是引入Telegraf来坐在中间并代理我们的请求。根据你发送到InfluxDB的量,如何部署这个Telegraf取决于你。

常见场景

  • 每个主机(或DaemonSet)上的Telegraf
  • Kubernetes中的Telegraf侧边车
  • 集中式Telegraf服务

Writing to InfluxDB 2 with InfluxDB 1 Client Libraries Through Telegraf<figcaption> 通过Telegraf使用InfluxDB 1客户端库写入InfluxDB 2</figcaption>

如果你在容器中运行Telegraf,请务必查看我的Bring Your Own Telegraf工作。

配置Telegraf

第一步是启用influxdb_listener插件并对其进行配置。你可以用以下方法做到这一点

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

这是一个没有认证的最简单设置,但我们不建议以这种方式运行InfluxDB。因此,为了配置认证,你可以在Telegraf配置中提供TLS和基本认证细节

[[inputs.influxdb_listener]]
  ## Set one or more allowed client CA certificate file names to enable mutually authenticated TLS connections
  tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
  ## Add service certificate and key
  tls_cert = "/etc/telegraf/cert.pem"
  tls_key = "/etc/telegraf/key.pem"
  ## Optional username and password to accept for HTTP basic authentication.
  ## You probably want to make sure you have TLS configured above for this.
  basic_username = "foobar"
  basic_password = "barfoo"

现在,当你运行Telegraf时,它将接受在配置的端口上进行的InfluxDB 1写入请求。

???? 美味! ????

现在来配置我们的InfluxDB 2输出。同样,Telegraf让这变得非常简单

[[outputs.influxdb_v2]]
    ## The URLs of the InfluxDB cluster nodes.
    ## Multiple URLs can be specified for a single cluster, only ONE of the
    ## urls will be written to each interval.
    urls = ["http://127.0.0.1:9999"]

    ## Token for authentication.
    token = ""

    ## Organization is the name of the organization you wish to write to.
    organization = ""

    ## Destination bucket to write into.
    bucket = ""

简单!

但是等等,还有更多!

为什么止步于此?你知道你可以使用Telegraf来进行组合写入吗?没有必要完全迁移到InfluxDB 2,因为在我们还处于alpha版本的时候,谁会这样做呢,对吧?

为什么不写入InfluxDB 1、InfluxDB 2和InfluxDB Cloud 2……而无需任何代码更改呢?

要这样做,只需配置多个输出插件即可。

[[outputs.influxdb_v2]]
    # As above
[[outputs.influxdb_v2]]
    # Configure for Cloud 2 (See your settings page)
[[outputs.influxdb]
    # As you currently have right now

????????????

这就是它,一种无需更改任何一行代码即可尝试 InfluxDB 2 的无痛苦方式。

下次再见了 ????????????

你知道吗?我们的SaaS 产品,Cloud 2,有一个出色的免费层? ??