InfluxDB 2迁移路径:仪器
作者:David Flanagan / 产品,用例,开发者
2019年8月15日
导航到
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插件可以确定你可以写入哪个数据库。更多关于这个的细节将在稍后介绍。
迁移路径
让我们深入了解,看看你当前、假定和预计的架构。
<figcaption> 写入InfluxDB 1</figcaption>
简单直接。你在应用程序中使用我们的客户端库,并直接将其写入InfluxDB 1。
现在,我们想要尽可能少地改变。所以,我们不是写入InfluxDB 1,而是引入Telegraf来坐在中间并代理我们的请求。根据你发送到InfluxDB的量,如何部署这个Telegraf取决于你。
常见场景
- 每个主机(或DaemonSet)上的Telegraf
- Kubernetes中的Telegraf侧边车
- 集中式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,有一个出色的免费层? ??