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)
嘿!客户端接受一个选项哈希,它接受可变数量的键/值对。数据库指示我们要使用哪个数据库。在我们的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开头。然而,当我们设置主机值时,不需要前缀。然后我们通过username和password传递任何服务器的登录凭据。
一旦建立连接,查询数据库的方式与本地运行时完全相同。查询字符串始终是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