InfluxDB Ruby 客户端入门指南

导航至

让我们来谈谈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设置了客户端在放弃之前尝试连接的最大次数。这很重要,因为我们不希望当出现问题时,数据库服务器被过多的连接尝试所淹没。

我们不能预测一切

上述示例中缺少两个选项:hostport。这些是必需的,好消息是它们有预设的默认值。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客户端有很好的文档,我能在那里找到我需要的一切。还有更多高级功能可用,最好的是,它由一个相当酷的社区维护。

 也应该承认我在密码中犯了一个拼写错误,持续了令人尴尬的长的时间,结果是我几乎像一颗垂死的恒星一样崩溃。这种情况每个人都有可能遇到。

我成为了死亡,密码的破坏者

您还有更多问题吗?您想看具体的示例吗?请告诉我们。

在互联网上找到我

[email protected]

@thekatertot