InfluxDB 2 迁移路径:Instrumentation
作者:David Flanagan / 产品、 用例、 开发者
2019 年 8 月 15 日
导航至
InfluxDB 2 和我们的 SaaS 产品 InfluxDB Cloud 2 即将推出。在我们最终完成我们精彩的更新,为您提供您应得的 InfluxDB 2 体验的同时,我们将与您讨论迁移路径。
本文是系列文章的一部分。本期将介绍如何使用 InfluxDB 1 客户端库将应用程序中现有的 Instrumentation 迁移到 InfluxDB 2,而无需更改代码。
官方迁移路径
InfluxDB 2 将附带 InfluxDB 1 的兼容模式,但这将在今年晚些时候推出 — 更接近我们 InfluxDB 2 的第一个 GA 版本。这意味着当使用 v2 时,您仍然可以使用 v1 的客户端库,至少在有限的范围内是这样。由于目前还不可用,我们可以使用 Telegraf 做一些非常类似的事情;这就是我今天想谈论的。
但在我们开始之前,让我们先谈谈客户端库。
客户端库
我们的 CTO Paul Dix 之前曾提到,我们将创建、维护和支持我们自己的 InfluxDB 2 官方客户端库!虽然在 GitHub 上的 InfluxData 旗下有一些 InfluxDB 1 的客户端库,但这些库通常由外部贡献者维护,并且 API 可能差异很大。对于 InfluxDB 2,我们将在客户端库的进展和维护中发挥更积极的作用。
当然,这些目前也无法使用;但在 2.0 发布时(或临近发布时),我们计划支持 dotNet、Go、Java、JS、PHP、Python 和 Ruby。
那么,在此期间,您如何开始为 InfluxDB 2 Instrumentation 您的应用程序呢?
介绍 Telegraf
嗯... 显然 Telegraf 无需介绍... 但是,通常情况下,人们不太了解可用插件的宽度和广度。例如:您是否知道 Telegraf 有一个名为 influxdb_listener?
的输入插件?此插件允许 Telegraf 提供 InfluxDB 1 /write
兼容代理。
???? 哇哦 ????
注意事项
在您过于兴奋之前,有几件事值得注意。首先,它实际上只是 /write
路径。如果您出于该目的使用任何客户端库,这将不允许您从 InfluxDB 读取数据。CREATE DATABASE
请求将响应 200 OK
,但实际上在远程 InfluxDB 服务器上没有执行任何操作;只有 Telegraf 插件可以确定您可以写入哪个数据库。稍后会详细介绍。
迁移路径
让我们深入细节,看看您当前、假定的和估计的架构。
<figcaption>写入 InfluxDB 1</figcaption>
非常简单。您的应用程序中有一个我们的客户端库,并且您正在使用它直接写入 InfluxDB 1。
现在,我们希望尽可能少地更改组件。因此,我们将引入 Telegraf 来充当中间层并代理我们的请求,而不是写入 InfluxDB 1。根据您发送到 InfluxDB 的数据量,您可以自行决定如何部署此 Telegraf。
常见场景包括
- 每个主机(或 DaemonSet)上的 Telegraf
- Telegraf Sidecar(Kubernetes)
- 集中式 Telegraf 服务
<figcaption>通过 Telegraf 使用 InfluxDB 1 客户端库写入 InfluxDB 2</figcaption>
如果您在容器中运行 Telegraf,请务必查看我的 自带 Telegraf 工作。
配置 Telegraf
第一步是启用 influxdb_listener plugin
并对其进行配置。您可以使用以下方法执行此操作
[[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 有一个很棒的免费层级? ??