InfluxDB Ruby 客户端入门
作者:Katy Farmer / 产品, 用例, 开发者, 入门
2018 年 4 月 6 日
导航至
让我们来谈谈 InfluxDB Ruby 客户端。我喜欢它的原因有很多,主要是因为它封装了我喜欢 Ruby 的地方:它抽象了我不需要知道的部分,让我可以轻松地专注于我的目标:获取(或写入)一些时间序列数据。
还有一个专门为 Rails 提供的客户端库,但在这篇文章中我们将专注于纯粹而令人愉悦的 Ruby。
回顾基础知识总不是坏事,因此我们将介绍设置和使用 Ruby 客户端,以及您可能遇到的一些问题。开始吧!
设置
在您的开发环境(本地机器、容器、服务器等)中安装并启动 TICK Stack。需要相关指导?没问题。
将 influxdb-ruby gem 添加到您的 Gemfile。您可以使用 gem install 全局安装它,但这只是个人决定。您随意。
gem 'influxdb'
别忘了 bundle!
从 InfluxDB(本地主机)读取数据
好的,我们有了库。让我们使用它。influxdb-ruby 的文档很棒;您可以而且应该阅读它们。我们将从查询现有数据库开始。这看起来可能有点倒退,但随着 TICK Stack 的运行,我们也有一个 InfluxDB 实例在运行:'telegraf' 数据库,它捕获来自其托管机器的指标。
在我们的第一个示例中,我们将使用位于本地机器上的数据库。
database = "telegraf"
client = InfluxDB::Client.new(database: database, retry: 4)
哒!客户端接受一个选项哈希,它接受可变数量的键/值对。Database 指示我们要使用的数据库。我们的 InfluxDB 实例中可能设置了多个数据库,因此告诉客户端我们要使用哪个数据库非常重要。retry
设置客户端放弃连接之前尝试连接的次数限制。这很重要,因为我们不希望在出现问题时用连接尝试淹没数据库服务器。
上面的示例中缺少两个选项:host
和 port
。这些是必需的,好消息是它们具有预设默认值。host
默认为 localhost,port
默认为 8086,这与本地 InfluxDB 实例的默认值相匹配。如果这是您的用例,则无需添加任何其他内容即可开始读取指标。
response = client.query("select * from cpu limit 5")
print response
[output]
{"name"=>"cpu", "tags"=>nil, "values"=>[{"time"=>"2018-04-04T00:06:10Z", "cpu"=>"cpu-total", "host"=>"katys-MacBook-Pro.local", "usage_guest"=>0, "usage_guest_nice"=>0, "usage_idle"=>93.90395620801195, "usage_iowait"=>0, "usage_irq"=>0, "usage_nice"=>0, "usage_softirq"=>0, "usage_steal"=>0, "usage_system"=>2.139835780044787, "usage_user"=>3.9562080119432697},...}
我们成功了!
从 InfluxDB(外部主机)读取数据
让我们看一个数据库托管在云端的示例,看看有哪些不同。
database = 'telegraf'
username = "beeper"
password = "booper"
client = InfluxDB::Client.new(database: database,
host: "blorper.influxcloud.net",
use_ssl: true,
username: username,
password: password,
retry: 4)
response = client.query("select * from cpu limit 5")
print response
[output]
{"name"=>"cpu", "tags"=>nil, "values"=>[{"time"=>"2018-04-04T00:06:10Z", "cpu"=>"cpu-total", "host"=>"katys-MacBook-Pro.local", "usage_guest"=>0, "usage_guest_nice"=>0, "usage_idle"=>93.90395620801195, "usage_iowait"=>0, "usage_irq"=>0, "usage_nice"=>0, "usage_softirq"=>0, "usage_steal"=>0, "usage_system"=>2.139835780044787, "usage_user"=>3.9562080119432697},...}
请注意,输出保持不变。唯一改变的是我们传递给客户端的选项。现在我们已经转移到狂野的互联网,我们必须传递主机地址,以便客户端知道在哪里查找名为 'telegraf' 的数据库。我们还必须将use_ssl
设置为 true(默认为 false),因为当我们完整查看主机的 url 时,它以 https 为前缀。但是,当我们设置 host 的值时,不需要前缀。然后,我们通过用户名和密码传入服务器的任何登录凭据。
建立连接后,查询数据库的方式与本地运行时完全相同。查询字符串始终是 InfluxQL,虽然这些示例是简单的查询,但我们可以在此处运行任何有效的 InfluxQL 查询,无论其复杂程度如何。
将数据写入 InfluxDB
我们已经学会了使用 InfluxDB Ruby 客户端读取数据。现在让我们学习写入。基本原理是相同的:我们需要创建一个连接到 InfluxDB 实例的客户端。虽然配置因您的实例所在的位置而异(请参阅上面云实例和本地实例之间的区别),但一旦建立连接,无论您的数据库托管在哪里,写入过程都是相同的。
username = 'beeper'
password = 'booper'
database = 'happytime'
name = 'sogreat'
time_precision = 'ms'
time = (Time.now.to_r * 1000).to_i
influxdb = InfluxDB::Client.new database,
username: username,
password: password,
time_precision: time_precision
data = {
values: { value: 9 },
timestamp: time
}
influxdb.write_point(name, data)
response = influxdb.query("select * from sogreat")
puts response
[output]
{"name"=>"sogreat", "tags"=>nil, "values"=>[{"time"=>"2018-04-06T18:11:10.41Z", "value"=>9}, {"time"=>"2018-04-06T19:02:08.544Z", "value"=>9}]}
其中一些内容应该看起来很熟悉。我们正在创建一个新客户端 - 只是这次我们有一个额外的选项:time_precision
。Ruby 客户端的时间精度默认为 's'(秒),但我想要毫秒。我们将时间精度传递给客户端,然后我们需要调整捕获时间戳的方式,以便时间戳反映精度。如果时间精度不匹配,则数据点将被压缩。
在此示例中,name 表示我们向其中添加点的序列的名称。有关 序列 和 点 的定义,请查看这些文档。
总结
Ruby 客户端有很棒的文档,我能够在那里找到我需要的一切。还有更多高级功能可用,最棒的是,它由一个非常酷的社区维护。
我 还应该承认,我的密码中有一个错字,持续了相当长的时间,导致我几乎像一颗垂死的恒星一样崩溃。这发生在每个人身上。
您有更多问题吗?您想看具体的例子吗?请告诉我们。
在互联网上找到我
@thekatertot