This repository contains the reference Ruby client for the InfluxDB 2.0.
Note: This library is for use with InfluxDB 2.x. For connecting to InfluxDB 1.x instances, please use the influxdb-ruby client.
The InfluxDB 2 client is bundled as a gem and is hosted on Rubygems.
The client can be installed manually or with bundler.
To install the client gem manually:
gem install influxdb-client -v 1.0.0.beta
Use InfluxDB::Client to create a client connected to a running InfluxDB 2 instance.
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token')
Option | Description | Type | Default |
---|---|---|---|
bucket | Default destination bucket for writes | String | none |
org | Default organization bucket for writes | String | none |
precision | Default precision for the unix timestamps within the body line-protocol | String | none |
open_timeout | Number of seconds to wait for the connection to open | Integer | 10 |
write_timeout | Number of seconds to wait for one block of data to be written | Integer | 10 |
read_timeout | Number of seconds to wait for one block of data to be read | Integer | 10 |
max_redirect_count | Maximal number of followed HTTP redirects | Integer | 10 |
use_ssl | Turn on/off SSL for HTTP communication | bool | true |
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org',
precision: InfluxDB2::WritePrecision::NANOSECOND)
The result retrieved by QueryApi could be formatted as a:
- Raw query response
- Flux data structure: FluxTable, FluxColumn and FluxRecord
- Stream of FluxRecord
Synchronously executes the Flux query and return result as unprocessed String
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org')
query_api = client.create_query_api
result = query_api.query_raw(query: 'from(bucket:"' + bucket + '") |> range(start: 1970-01-01T00:00:00.000000001Z) |> last()')
Synchronously executes the Flux query and return result as a Array of FluxTables
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org')
query_api = client.create_query_api
result = query_api.query(query: 'from(bucket:"' + bucket + '") |> range(start: 1970-01-01T00:00:00.000000001Z) |> last()')
Synchronously executes the Flux query and return stream of FluxRecord
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org')
query_api = client.create_query_api
query = 'from(bucket: "my-bucket") |> range(start: -10m, stop: now()) ' \
"|> filter(fn: (r) => r._measurement == \"#{measurement}\")"
query_api.query_stream(query: query).each do |record|
puts record.to_s
end
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org',
precision: InfluxDB2::WritePrecision::NANOSECOND)
write_api = client.create_write_api
write_api.write(data: 'h2o,location=west value=33i 15')
Configure default time precision:
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org',
precision: InfluxDB2::WritePrecision::NANOSECOND)
Configure precision per write:
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org')
write_api = client.create_write_api
write_api.write(data: 'h2o,location=west value=33i 15', precision: InfluxDB2::WritePrecision::SECOND)
Allowed values for precision are:
InfluxDB::WritePrecision::NANOSECOND
for nanosecondInfluxDB::WritePrecision::MICROSECOND
for microsecondInfluxDB::WritePrecision::MILLISECOND
for millisecondInfluxDB::WritePrecision::SECOND
for second
Default bucket
and organization
destination are configured via InfluxDB::Client
:
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org')
but there is also possibility to override configuration per write:
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token')
write_api = client.create_write_api
write_api.write(data: 'h2o,location=west value=33i 15', bucket: 'production-data', org: 'customer-1')
The data could be written as:
String
that is formatted as a InfluxDB's line protocolHash
with keys: name, tags, fields and time- Data Point structure
Array
of above items
client = InfluxDB2::Client.new('https://localhost:9999', 'my-token',
bucket: 'my-bucket',
org: 'my-org',
precision: InfluxDB2::WritePrecision::NANOSECOND)
point = InfluxDB2::Point.new(name: 'h2o')
.add_tag('location', 'europe')
.add_field('level', 2)
hash = { name: 'h2o',
tags: { host: 'aws', region: 'us' },
fields: { level: 5, saturation: '99%' }, time: 123 }
write_api = client.create_write_api
write_api.write(data: ['h2o,location=west value=33i 15', point, hash])
brew install wget # on a mac, if not yet installed!
bin/influxdb-restart.sh
rake test
Bug reports and pull requests are welcome on GitHub at https://github.com/influxdata/influxdb-client-ruby.
The gem is available as open source under the terms of the MIT License.